diff --git a/Benchmarks/Mock/MockLogger.cs b/Benchmarks/Mock/MockLogger.cs index c750857c..9265c68a 100644 --- a/Benchmarks/Mock/MockLogger.cs +++ b/Benchmarks/Mock/MockLogger.cs @@ -6,12 +6,7 @@ namespace Benchmarks.Mock; public class MockLogger : ISptLogger { - public void LogWithColor( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ) + public void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null) { throw new NotImplementedException(); } @@ -72,12 +67,7 @@ public class MockLogger : ISptLogger throw new NotImplementedException(); } - public void LogWithColor( - string data, - Exception? ex = null, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null - ) + public void LogWithColor(string data, Exception? ex = null, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null) { Console.WriteLine(data); } diff --git a/Libraries/SPTarkov.Common/Extensions/MemberInfoExtensions.cs b/Libraries/SPTarkov.Common/Extensions/MemberInfoExtensions.cs index eb52bbe4..7a70ae8c 100644 --- a/Libraries/SPTarkov.Common/Extensions/MemberInfoExtensions.cs +++ b/Libraries/SPTarkov.Common/Extensions/MemberInfoExtensions.cs @@ -8,10 +8,7 @@ public static class MemberInfoExtensions public static string GetJsonName(this MemberInfo memberInfo) { return Attribute.IsDefined(memberInfo, typeof(JsonPropertyNameAttribute)) - ? ( - Attribute.GetCustomAttribute(memberInfo, typeof(JsonPropertyNameAttribute)) - as JsonPropertyNameAttribute - ).Name + ? (Attribute.GetCustomAttribute(memberInfo, typeof(JsonPropertyNameAttribute)) as JsonPropertyNameAttribute).Name : memberInfo.Name; } } diff --git a/Libraries/SPTarkov.Common/Extensions/ObjectExtensions.cs b/Libraries/SPTarkov.Common/Extensions/ObjectExtensions.cs index 33a33af3..c015f1d0 100644 --- a/Libraries/SPTarkov.Common/Extensions/ObjectExtensions.cs +++ b/Libraries/SPTarkov.Common/Extensions/ObjectExtensions.cs @@ -6,8 +6,7 @@ namespace SPTarkov.Common.Extensions; public static class ObjectExtensions { - private static readonly Dictionary> _indexedProperties = - new(); + private static readonly Dictionary> _indexedProperties = new(); private static readonly Lock _indexedPropertiesLockObject = new(); private static bool TryGetCachedProperty(Type type, string key, out PropertyInfo cachedProperty) @@ -16,8 +15,7 @@ public static class ObjectExtensions { if (!_indexedProperties.TryGetValue(type, out var properties)) { - properties = type.GetProperties() - .ToDictionary(prop => prop.GetJsonName(), prop => prop); + properties = type.GetProperties().ToDictionary(prop => prop.GetJsonName(), prop => prop); _indexedProperties.Add(type, properties); } diff --git a/Libraries/SPTarkov.Common/Extensions/StringExtensions.cs b/Libraries/SPTarkov.Common/Extensions/StringExtensions.cs index 5cfea17f..ecadc047 100644 --- a/Libraries/SPTarkov.Common/Extensions/StringExtensions.cs +++ b/Libraries/SPTarkov.Common/Extensions/StringExtensions.cs @@ -8,11 +8,7 @@ public static class StringExtensions private static readonly Dictionary _regexCache = new(); private static readonly Lock _regexCacheLock = new(); - public static string RegexReplace( - this string source, - [StringSyntax(StringSyntaxAttribute.Regex)] string regexString, - string newValue - ) + public static string RegexReplace(this string source, [StringSyntax(StringSyntaxAttribute.Regex)] string regexString, string newValue) { Regex regex; lock (_regexCacheLock) diff --git a/Libraries/SPTarkov.DI/Annotations/Injectable.cs b/Libraries/SPTarkov.DI/Annotations/Injectable.cs index 4ad0fb9a..1017dc43 100644 --- a/Libraries/SPTarkov.DI/Annotations/Injectable.cs +++ b/Libraries/SPTarkov.DI/Annotations/Injectable.cs @@ -1,11 +1,8 @@ namespace SPTarkov.DI.Annotations; [AttributeUsage(AttributeTargets.Class, Inherited = false)] -public class Injectable( - InjectionType injectionType = InjectionType.Scoped, - Type? typeOverride = null, - int typePriority = int.MaxValue -) : Attribute +public class Injectable(InjectionType injectionType = InjectionType.Scoped, Type? typeOverride = null, int typePriority = int.MaxValue) + : Attribute { public InjectionType InjectionType { get; set; } = injectionType; diff --git a/Libraries/SPTarkov.DI/DependencyInjectionHandler.cs b/Libraries/SPTarkov.DI/DependencyInjectionHandler.cs index d71dc0a4..f0175bb1 100644 --- a/Libraries/SPTarkov.DI/DependencyInjectionHandler.cs +++ b/Libraries/SPTarkov.DI/DependencyInjectionHandler.cs @@ -36,8 +36,7 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) public void AddInjectableTypesFromTypeList(IEnumerable types) { var typesToInject = types.Where(type => - Attribute.IsDefined(type, typeof(Injectable)) - && !_injectedTypeNames.ContainsKey($"{type.Namespace}.{type.Name}") + Attribute.IsDefined(type, typeof(Injectable)) && !_injectedTypeNames.ContainsKey($"{type.Namespace}.{type.Name}") ); if (typesToInject.Any()) { @@ -52,9 +51,7 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) { if (_oneTimeUseFlag) { - throw new Exception( - "Invalid usage of DependencyInjectionHandler, this is a one time use service!" - ); + throw new Exception("Invalid usage of DependencyInjectionHandler, this is a one time use service!"); } _oneTimeUseFlag = true; var typeRefValues = _injectedTypeNames.Values.Select(t => new TypeRefContainer( @@ -74,33 +71,19 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) // All the components without the removed overrides var cleanedComponents = typeRefValues.Where(tr => { - var name = string.IsNullOrEmpty(tr.Type.FullName) - ? $"{tr.Type.Namespace}.{tr.Type.Name}" - : tr.Type.FullName!; + var name = string.IsNullOrEmpty(tr.Type.FullName) ? $"{tr.Type.Namespace}.{tr.Type.Name}" : tr.Type.FullName!; return !componentsToRemove.Contains(name); }); // All the components sorted and ready to be inserted into the DI container - var sortedInjectableTypes = cleanedComponents.OrderBy(tRef => - tRef.InjectableAttribute.TypePriority - ); + var sortedInjectableTypes = cleanedComponents.OrderBy(tRef => tRef.InjectableAttribute.TypePriority); foreach (var typeRefToInject in sortedInjectableTypes) { var nodes = new Queue(); nodes.Enqueue(typeRefToInject); - foreach ( - var implementedInterface in typeRefToInject - .Type.GetInterfaces() - .Where(t => !t.Namespace.StartsWith("System")) - ) + foreach (var implementedInterface in typeRefToInject.Type.GetInterfaces().Where(t => !t.Namespace.StartsWith("System"))) { - nodes.Enqueue( - new TypeRefContainer( - typeRefToInject.InjectableAttribute, - typeRefToInject.Type, - implementedInterface - ) - ); + nodes.Enqueue(new TypeRefContainer(typeRefToInject.InjectableAttribute, typeRefToInject.Type, implementedInterface)); } while (nodes.Any()) @@ -108,13 +91,7 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) var node = nodes.Dequeue(); if (node.Type.BaseType != null && node.Type.BaseType != typeof(object)) { - nodes.Enqueue( - new TypeRefContainer( - node.InjectableAttribute, - typeRefToInject.Type, - node.Type.BaseType - ) - ); + nodes.Enqueue(new TypeRefContainer(node.InjectableAttribute, typeRefToInject.Type, node.Type.BaseType)); } if (node.Type.IsGenericType) @@ -123,11 +100,7 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) } else { - RegisterComponent( - node.InjectableAttribute.InjectionType, - node.Type, - node.ParentType - ); + RegisterComponent(node.InjectableAttribute.InjectionType, node.Type, node.ParentType); } } } @@ -137,10 +110,7 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) { try { - _allLoadedTypes ??= AppDomain - .CurrentDomain.GetAssemblies() - .SelectMany(t => t.GetTypes()) - .ToList(); + _allLoadedTypes ??= AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).ToList(); } catch (ReflectionTypeLoadException ex) { @@ -153,11 +123,7 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) try { var matchedConstructors = _allConstructors.Where(c => - c.GetParameters() - .Any(p => - p.ParameterType.IsGenericType - && p.ParameterType.GetGenericTypeDefinition().FullName == typeName - ) + c.GetParameters().Any(p => p.ParameterType.IsGenericType && p.ParameterType.GetGenericTypeDefinition().FullName == typeName) ); var constructorInfos = matchedConstructors.ToList(); @@ -169,19 +135,11 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) 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 = typeRef.ParentType.MakeGenericType(parameters); - RegisterComponent( - typeRef.InjectableAttribute.InjectionType, - parameterInfo.ParameterType, - typedGeneric - ); + RegisterComponent(typeRef.InjectableAttribute.InjectionType, parameterInfo.ParameterType, typedGeneric); } } } @@ -194,15 +152,10 @@ public class DependencyInjectionHandler(IServiceCollection serviceCollection) private static bool IsMatchingGenericType(ParameterInfo paramInfo, string typeName) { - return paramInfo.ParameterType.IsGenericType - && paramInfo.ParameterType.GetGenericTypeDefinition().FullName == typeName; + return paramInfo.ParameterType.IsGenericType && paramInfo.ParameterType.GetGenericTypeDefinition().FullName == typeName; } - private void RegisterComponent( - InjectionType injectionType, - Type registrableInterface, - Type implementationType - ) + private void RegisterComponent(InjectionType injectionType, Type registrableInterface, Type implementationType) { switch (injectionType) { diff --git a/Libraries/SPTarkov.DI/SPTarkov.DI.csproj b/Libraries/SPTarkov.DI/SPTarkov.DI.csproj index 276b7616..acd39e3f 100644 --- a/Libraries/SPTarkov.DI/SPTarkov.DI.csproj +++ b/Libraries/SPTarkov.DI/SPTarkov.DI.csproj @@ -14,10 +14,7 @@ true - + diff --git a/Libraries/SPTarkov.Reflection/CodeWrapper/CodeGenerator.cs b/Libraries/SPTarkov.Reflection/CodeWrapper/CodeGenerator.cs index 270c6162..606ba5b3 100644 --- a/Libraries/SPTarkov.Reflection/CodeWrapper/CodeGenerator.cs +++ b/Libraries/SPTarkov.Reflection/CodeWrapper/CodeGenerator.cs @@ -27,16 +27,9 @@ public class CodeGenerator return new CodeInstruction(code.OpCode) { labels = GetLabelList(code) }; } - if ( - code.OpCode == OpCodes.Ldfld - || code.OpCode == OpCodes.Ldflda - || code.OpCode == OpCodes.Stfld - ) + if (code.OpCode == OpCodes.Ldfld || code.OpCode == OpCodes.Ldflda || code.OpCode == OpCodes.Stfld) { - return new CodeInstruction( - code.OpCode, - AccessTools.Field(code.CallerType, code.OperandTarget as string) - ) + return new CodeInstruction(code.OpCode, AccessTools.Field(code.CallerType, code.OperandTarget as string)) { labels = GetLabelList(code), }; @@ -44,10 +37,7 @@ public class CodeGenerator if (code.OpCode == OpCodes.Call || code.OpCode == OpCodes.Callvirt) { - return new CodeInstruction( - code.OpCode, - AccessTools.Method(code.CallerType, code.OperandTarget as string, code.Parameters) - ) + return new CodeInstruction(code.OpCode, AccessTools.Method(code.CallerType, code.OperandTarget as string, code.Parameters)) { labels = GetLabelList(code), }; @@ -55,10 +45,7 @@ public class CodeGenerator if (code.OpCode == OpCodes.Box) { - return new CodeInstruction(code.OpCode, code.CallerType) - { - labels = GetLabelList(code), - }; + return new CodeInstruction(code.OpCode, code.CallerType) { labels = GetLabelList(code) }; } if ( @@ -70,18 +57,12 @@ public class CodeGenerator || code.OpCode == OpCodes.Br_S ) { - return new CodeInstruction(code.OpCode, code.OperandTarget) - { - labels = GetLabelList(code), - }; + return new CodeInstruction(code.OpCode, code.OperandTarget) { labels = GetLabelList(code) }; } if (code.OpCode == OpCodes.Ldftn) { - return new CodeInstruction( - code.OpCode, - AccessTools.Method(code.CallerType, code.OperandTarget as string, code.Parameters) - ) + return new CodeInstruction(code.OpCode, AccessTools.Method(code.CallerType, code.OperandTarget as string, code.Parameters)) { labels = GetLabelList(code), }; @@ -91,8 +72,7 @@ public class CodeGenerator { return new CodeInstruction( code.OpCode, - code.CallerType.GetConstructors() - .FirstOrDefault(x => x.GetParameters().Length == code.Parameters.Length) + code.CallerType.GetConstructors().FirstOrDefault(x => x.GetParameters().Length == code.Parameters.Length) ) { labels = GetLabelList(code), diff --git a/Libraries/SPTarkov.Reflection/CodeWrapper/CodeWithLabel.cs b/Libraries/SPTarkov.Reflection/CodeWrapper/CodeWithLabel.cs index 3304c3c7..6c483253 100644 --- a/Libraries/SPTarkov.Reflection/CodeWrapper/CodeWithLabel.cs +++ b/Libraries/SPTarkov.Reflection/CodeWrapper/CodeWithLabel.cs @@ -24,13 +24,7 @@ public class CodeWithLabel : Code Label = label; } - public CodeWithLabel( - OpCode opCode, - Label label, - Type callerType, - object operandTarget, - Type[] parameters = null - ) + public CodeWithLabel(OpCode opCode, Label label, Type callerType, object operandTarget, Type[] parameters = null) : base(opCode, callerType, operandTarget, parameters) { Label = label; diff --git a/Libraries/SPTarkov.Reflection/Patching/AbstractPatch.cs b/Libraries/SPTarkov.Reflection/Patching/AbstractPatch.cs index 2015dd7d..c6fe34af 100644 --- a/Libraries/SPTarkov.Reflection/Patching/AbstractPatch.cs +++ b/Libraries/SPTarkov.Reflection/Patching/AbstractPatch.cs @@ -33,9 +33,7 @@ public abstract class AbstractPatch && _ilManipulatorList.Count == 0 ) { - throw new Exception( - $"{_harmony.Id}: At least one of the patch methods must be specified" - ); + throw new Exception($"{_harmony.Id}: At least one of the patch methods must be specified"); } } @@ -55,14 +53,7 @@ public abstract class AbstractPatch var T = GetType(); var methods = new List(); - foreach ( - var method in T.GetMethods( - BindingFlags.Static - | BindingFlags.NonPublic - | BindingFlags.Public - | BindingFlags.DeclaredOnly - ) - ) + foreach (var method in T.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly)) { if (method.GetCustomAttribute(attributeType) != null) { diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/AchievementCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/AchievementCallbacks.cs index 4cb07a3a..ee88a074 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/AchievementCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/AchievementCallbacks.cs @@ -7,10 +7,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class AchievementCallbacks( - AchievementController achievementController, - HttpResponseUtil httpResponseUtil -) +public class AchievementCallbacks(AchievementController achievementController, HttpResponseUtil httpResponseUtil) { /// /// Handle client/achievement/list @@ -18,9 +15,7 @@ public class AchievementCallbacks( /// public ValueTask GetAchievements(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(achievementController.GetAchievements(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(achievementController.GetAchievements(sessionID))); } /// @@ -29,8 +24,6 @@ public class AchievementCallbacks( /// public ValueTask Statistic(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(achievementController.GetAchievementStatics(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(achievementController.GetAchievementStatics(sessionID))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/BotCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/BotCallbacks.cs index 56f13dcb..a13ceb7b 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/BotCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/BotCallbacks.cs @@ -19,9 +19,7 @@ public class BotCallbacks(BotController botController, HttpResponseUtil httpResp { var splitUrl = url.Split('/'); var type = splitUrl[^1]; - return new ValueTask( - httpResponseUtil.NoBody(botController.GetBotPresetGenerationLimit(type)) - ); + return new ValueTask(httpResponseUtil.NoBody(botController.GetBotPresetGenerationLimit(type))); } /// @@ -35,44 +33,28 @@ public class BotCallbacks(BotController botController, HttpResponseUtil httpResp var difficulty = splitUrl[^1]; if (difficulty == "core") { - return new ValueTask( - httpResponseUtil.NoBody(botController.GetBotCoreDifficulty()) - ); + return new ValueTask(httpResponseUtil.NoBody(botController.GetBotCoreDifficulty())); } - return new ValueTask( - httpResponseUtil.NoBody(botController.GetBotDifficulty(sessionID, type, difficulty)) - ); + return new ValueTask(httpResponseUtil.NoBody(botController.GetBotDifficulty(sessionID, type, difficulty))); } /// /// Handle singleplayer/settings/bot/difficulties /// /// - public ValueTask GetAllBotDifficulties( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public ValueTask GetAllBotDifficulties(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.NoBody(botController.GetAllBotDifficulties()) - ); + return new ValueTask(httpResponseUtil.NoBody(botController.GetAllBotDifficulties())); } /// /// Handle client/game/bot/generate /// /// - public ValueTask GenerateBots( - string url, - GenerateBotsRequestData info, - MongoId sessionID - ) + public ValueTask GenerateBots(string url, GenerateBotsRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(botController.Generate(sessionID, info)) - ); + return new ValueTask(httpResponseUtil.GetBody(botController.Generate(sessionID, info))); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/BtrDeliveryCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/BtrDeliveryCallbacks.cs index 2d578eab..32e7e53f 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/BtrDeliveryCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/BtrDeliveryCallbacks.cs @@ -21,8 +21,7 @@ public class BtrDeliveryCallbacks( SaveServer saveServer ) : IOnUpdate { - private readonly BtrDeliveryConfig _btrDeliveryConfig = - configServer.GetConfig(); + private readonly BtrDeliveryConfig _btrDeliveryConfig = configServer.GetConfig(); public Task OnUpdate(long secondsSinceLastRun) { @@ -80,13 +79,9 @@ public class BtrDeliveryCallbacks( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Found {deliveryList.Count} BTR delivery package(s) in profile {sessionId}" - ); + logger.Debug($"Found {deliveryList.Count} BTR delivery package(s) in profile {sessionId}"); } - return deliveryList - .Where(toBeDelivered => currentTime >= toBeDelivered.ScheduledTime) - .ToList(); + return deliveryList.Where(toBeDelivered => currentTime >= toBeDelivered.ScheduledTime).ToList(); } return []; diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/BuildsCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/BuildsCallbacks.cs index 63d9f7d2..fcaf2050 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/BuildsCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/BuildsCallbacks.cs @@ -17,9 +17,7 @@ public class BuildsCallbacks(HttpResponseUtil httpResponseUtil, BuildController /// public ValueTask GetBuilds(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(buildController.GetUserBuilds(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(buildController.GetUserBuilds(sessionID))); } /// @@ -29,11 +27,7 @@ public class BuildsCallbacks(HttpResponseUtil httpResponseUtil, BuildController /// /// Session/player id /// - public ValueTask CreateMagazineTemplate( - string url, - SetMagazineRequest request, - MongoId sessionID - ) + public ValueTask CreateMagazineTemplate(string url, SetMagazineRequest request, MongoId sessionID) { buildController.CreateMagazineTemplate(sessionID, request); return new ValueTask(httpResponseUtil.NullResponse()); @@ -43,11 +37,7 @@ public class BuildsCallbacks(HttpResponseUtil httpResponseUtil, BuildController /// Handle client/builds/weapon/save /// /// - public ValueTask SetWeapon( - string url, - PresetBuildActionRequestData request, - MongoId sessionID - ) + public ValueTask SetWeapon(string url, PresetBuildActionRequestData request, MongoId sessionID) { buildController.SaveWeaponBuild(sessionID, request); return new ValueTask(httpResponseUtil.NullResponse()); @@ -57,11 +47,7 @@ public class BuildsCallbacks(HttpResponseUtil httpResponseUtil, BuildController /// Handle client/builds/equipment/save /// /// - public ValueTask SetEquipment( - string url, - PresetBuildActionRequestData request, - MongoId sessionID - ) + public ValueTask SetEquipment(string url, PresetBuildActionRequestData request, MongoId sessionID) { buildController.SaveEquipmentBuild(sessionID, request); return new ValueTask(httpResponseUtil.NullResponse()); @@ -71,11 +57,7 @@ public class BuildsCallbacks(HttpResponseUtil httpResponseUtil, BuildController /// Handle client/builds/delete /// /// - public ValueTask DeleteBuild( - string url, - RemoveBuildRequestData request, - MongoId sessionID - ) + public ValueTask DeleteBuild(string url, RemoveBuildRequestData request, MongoId sessionID) { buildController.RemoveBuild(sessionID, request); return new ValueTask(httpResponseUtil.NullResponse()); diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/ClientLogCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/ClientLogCallbacks.cs index c6472460..2d375e86 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/ClientLogCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/ClientLogCallbacks.cs @@ -42,26 +42,15 @@ public class ClientLogCallbacks( ? serverLocalisationService.GetText("release-beta-disclaimer-mods-enabled") : serverLocalisationService.GetText("release-beta-disclaimer"); - data.BetaDisclaimerAcceptText = serverLocalisationService.GetText( - "release-beta-disclaimer-accept" - ); + data.BetaDisclaimerAcceptText = serverLocalisationService.GetText("release-beta-disclaimer-accept"); data.ServerModsLoadedText = serverLocalisationService.GetText("release-server-mods-loaded"); - data.ServerModsLoadedDebugText = serverLocalisationService.GetText( - "release-server-mods-debug-message" - ); + data.ServerModsLoadedDebugText = serverLocalisationService.GetText("release-server-mods-debug-message"); data.ClientModsLoadedText = serverLocalisationService.GetText("release-plugins-loaded"); - data.ClientModsLoadedDebugText = serverLocalisationService.GetText( - "release-plugins-loaded-debug-message" - ); - data.IllegalPluginsLoadedText = serverLocalisationService.GetText( - "release-illegal-plugins-loaded" - ); - data.IllegalPluginsExceptionText = serverLocalisationService.GetText( - "release-illegal-plugins-exception" - ); + data.ClientModsLoadedDebugText = serverLocalisationService.GetText("release-plugins-loaded-debug-message"); + data.IllegalPluginsLoadedText = serverLocalisationService.GetText("release-illegal-plugins-loaded"); + data.IllegalPluginsExceptionText = serverLocalisationService.GetText("release-illegal-plugins-exception"); data.ReleaseSummaryText = serverLocalisationService.GetText("release-summary"); - data.IsBeta = - ProgramStatics.ENTRY_TYPE() is EntryType.BLEEDING_EDGE or EntryType.BLEEDING_EDGE_MODS; + data.IsBeta = ProgramStatics.ENTRY_TYPE() is EntryType.BLEEDING_EDGE or EntryType.BLEEDING_EDGE_MODS; data.IsModdable = ProgramStatics.MODS(); data.IsModded = loadedMods.Count > 0; diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/CustomizationCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/CustomizationCallbacks.cs index cf39e33c..1e62d0bb 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/CustomizationCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/CustomizationCallbacks.cs @@ -20,15 +20,9 @@ public class CustomizationCallbacks( /// Handle client/trading/customization/storage /// /// - public ValueTask GetCustomisationUnlocks( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public ValueTask GetCustomisationUnlocks(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(saveServer.GetProfile(sessionID).CustomisationUnlocks) - ); + return new ValueTask(httpResponseUtil.GetBody(saveServer.GetProfile(sessionID).CustomisationUnlocks)); } /// @@ -40,20 +34,14 @@ public class CustomizationCallbacks( var splitUrl = url.Split('/'); var traderId = splitUrl[^3]; - return new ValueTask( - httpResponseUtil.GetBody(customizationController.GetTraderSuits(traderId, sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(customizationController.GetTraderSuits(traderId, sessionID))); } /// /// Handle CustomizationBuy event /// /// - public ItemEventRouterResponse BuyCustomisation( - PmcData pmcData, - BuyClothingRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse BuyCustomisation(PmcData pmcData, BuyClothingRequestData request, MongoId sessionID) { return customizationController.BuyCustomisation(pmcData, request, sessionID); } @@ -62,15 +50,9 @@ public class CustomizationCallbacks( /// Handle client/hideout/customization/offer/list /// /// - public ValueTask GetHideoutCustomisation( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public ValueTask GetHideoutCustomisation(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(customizationController.GetHideoutCustomisation(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(customizationController.GetHideoutCustomisation(sessionID))); } /// @@ -79,20 +61,14 @@ public class CustomizationCallbacks( /// public ValueTask GetStorage(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(customizationController.GetCustomisationStorage(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(customizationController.GetCustomisationStorage(sessionID))); } /// /// Handle CustomizationSet /// /// - public ItemEventRouterResponse SetCustomisation( - PmcData pmcData, - CustomizationSetRequest request, - MongoId sessionID - ) + public ItemEventRouterResponse SetCustomisation(PmcData pmcData, CustomizationSetRequest request, MongoId sessionID) { return customizationController.SetCustomisation(sessionID, request, pmcData); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/DataCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/DataCallbacks.cs index 8f0ebb9a..7b9d9cd8 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/DataCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/DataCallbacks.cs @@ -62,9 +62,7 @@ public class DataCallbacks( /// public ValueTask GetTemplateSuits(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(databaseService.GetTemplates().Customization) - ); + return new ValueTask(httpResponseUtil.GetBody(databaseService.GetTemplates().Customization)); } /// @@ -73,9 +71,7 @@ public class DataCallbacks( /// public ValueTask GetTemplateCharacter(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(databaseService.GetTemplates().Character) - ); + return new ValueTask(httpResponseUtil.GetBody(databaseService.GetTemplates().Character)); } /// @@ -84,9 +80,7 @@ public class DataCallbacks( /// public ValueTask GetHideoutSettings(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(databaseService.GetHideout().Settings) - ); + return new ValueTask(httpResponseUtil.GetBody(databaseService.GetHideout().Settings)); } /// @@ -104,9 +98,7 @@ public class DataCallbacks( /// public ValueTask GetHideoutProduction(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(databaseService.GetHideout().Production) - ); + return new ValueTask(httpResponseUtil.GetBody(databaseService.GetHideout().Production)); } /// @@ -115,9 +107,7 @@ public class DataCallbacks( /// public ValueTask GetLocalesLanguages(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(databaseService.GetLocales().Languages) - ); + return new ValueTask(httpResponseUtil.GetBody(databaseService.GetLocales().Languages)); } /// @@ -128,8 +118,7 @@ public class DataCallbacks( { var localeId = url.Replace("/client/menu/locale/", ""); var locales = databaseService.GetLocales(); - var result = - locales.Menu?[localeId] ?? locales.Menu?.FirstOrDefault(m => m.Key == "en").Value; + var result = locales.Menu?[localeId] ?? locales.Menu?.FirstOrDefault(m => m.Key == "en").Value; if (result == null) { @@ -157,9 +146,7 @@ public class DataCallbacks( /// public ValueTask GetQteList(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetUnclearedBody(hideoutController.GetQteList(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetUnclearedBody(hideoutController.GetQteList(sessionID))); } /// @@ -170,8 +157,6 @@ public class DataCallbacks( { var traderId = url.Replace("/client/items/prices/", ""); - return new ValueTask( - httpResponseUtil.GetBody(traderController.GetItemPrices(sessionID, traderId)) - ); + return new ValueTask(httpResponseUtil.GetBody(traderController.GetItemPrices(sessionID, traderId))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs index 0271ea39..0ed78a25 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/DialogueCallbacks.cs @@ -10,11 +10,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnUpdateOrder.DialogueCallbacks)] -public class DialogueCallbacks( - TimeUtil timeUtil, - HttpResponseUtil httpResponseUtil, - DialogueController dialogueController -) : IOnUpdate +public class DialogueCallbacks(TimeUtil timeUtil, HttpResponseUtil httpResponseUtil, DialogueController dialogueController) : IOnUpdate { public Task OnUpdate(long timeSinceLastRun) { @@ -26,26 +22,16 @@ public class DialogueCallbacks( /// Handle client/friend/list /// /// - public virtual ValueTask GetFriendList( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public virtual ValueTask GetFriendList(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(dialogueController.GetFriendList(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(dialogueController.GetFriendList(sessionID))); } /// /// Handle client/chatServer/list /// /// - public virtual ValueTask GetChatServerList( - string url, - GetChatServerListRequestData request, - MongoId sessionID - ) + public virtual ValueTask GetChatServerList(string url, GetChatServerListRequestData request, MongoId sessionID) { var chatServer = new List { @@ -71,20 +57,9 @@ public class DialogueCallbacks( /// TODO: request properties are not handled /// /// - public virtual ValueTask GetMailDialogList( - string url, - GetMailDialogListRequestData request, - MongoId sessionID - ) + public virtual ValueTask GetMailDialogList(string url, GetMailDialogListRequestData request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody( - dialogueController.GenerateDialogueList(sessionID), - 0, - null, - false - ) - ); + return new ValueTask(httpResponseUtil.GetBody(dialogueController.GenerateDialogueList(sessionID), 0, null, false)); } /// @@ -94,48 +69,25 @@ public class DialogueCallbacks( /// /// Session/player id /// - public virtual ValueTask GetMailDialogView( - string url, - GetMailDialogViewRequestData request, - MongoId sessionID - ) + public virtual ValueTask GetMailDialogView(string url, GetMailDialogViewRequestData request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody( - dialogueController.GenerateDialogueView(request, sessionID), - 0, - null, - false - ) - ); + return new ValueTask(httpResponseUtil.GetBody(dialogueController.GenerateDialogueView(request, sessionID), 0, null, false)); } /// /// Handle client/mail/dialog/info /// /// - public virtual ValueTask GetMailDialogInfo( - string url, - GetMailDialogInfoRequestData request, - MongoId sessionID - ) + public virtual ValueTask GetMailDialogInfo(string url, GetMailDialogInfoRequestData request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody( - dialogueController.GetDialogueInfo(request.DialogId, sessionID) - ) - ); + return new ValueTask(httpResponseUtil.GetBody(dialogueController.GetDialogueInfo(request.DialogId, sessionID))); } /// /// Handle client/mail/dialog/remove /// /// - public virtual ValueTask RemoveDialog( - string url, - RemoveDialogRequestData request, - MongoId sessionID - ) + public virtual ValueTask RemoveDialog(string url, RemoveDialogRequestData request, MongoId sessionID) { dialogueController.RemoveDialogue(request.DialogId, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); @@ -145,11 +97,7 @@ public class DialogueCallbacks( /// Handle client/mail/dialog/pin /// /// - public virtual ValueTask PinDialog( - string url, - PinDialogRequestData request, - MongoId sessionID - ) + public virtual ValueTask PinDialog(string url, PinDialogRequestData request, MongoId sessionID) { dialogueController.SetDialoguePin(request.DialogId, true, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); @@ -159,11 +107,7 @@ public class DialogueCallbacks( /// Handle client/mail/dialog/unpin /// /// - public virtual ValueTask UnpinDialog( - string url, - PinDialogRequestData request, - MongoId sessionID - ) + public virtual ValueTask UnpinDialog(string url, PinDialogRequestData request, MongoId sessionID) { dialogueController.SetDialoguePin(request.DialogId, false, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); @@ -173,11 +117,7 @@ public class DialogueCallbacks( /// Handle client/mail/dialog/read /// /// - public virtual ValueTask SetRead( - string url, - SetDialogReadRequestData request, - MongoId sessionID - ) + public virtual ValueTask SetRead(string url, SetDialogReadRequestData request, MongoId sessionID) { dialogueController.SetRead(request.Dialogs, sessionID); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); @@ -187,28 +127,16 @@ public class DialogueCallbacks( /// Handle client/mail/dialog/getAllAttachments /// /// - public virtual ValueTask GetAllAttachments( - string url, - GetAllAttachmentsRequestData request, - MongoId sessionID - ) + public virtual ValueTask GetAllAttachments(string url, GetAllAttachmentsRequestData request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody( - dialogueController.GetAllAttachments(request.DialogId, sessionID) - ) - ); + return new ValueTask(httpResponseUtil.GetBody(dialogueController.GetAllAttachments(request.DialogId, sessionID))); } /// /// Handle client/mail/msg/send /// /// - public virtual async ValueTask SendMessage( - string url, - SendMessageRequest request, - MongoId sessionID - ) + public virtual async ValueTask SendMessage(string url, SendMessageRequest request, MongoId sessionID) { return httpResponseUtil.GetBody(await dialogueController.SendMessage(sessionID, request)); } @@ -235,26 +163,16 @@ public class DialogueCallbacks( /// Handle client/friend/request/send /// /// - public virtual ValueTask SendFriendRequest( - string url, - FriendRequestData request, - MongoId sessionID - ) + public virtual ValueTask SendFriendRequest(string url, FriendRequestData request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(dialogueController.SendFriendRequest(sessionID, request)) - ); + return new ValueTask(httpResponseUtil.GetBody(dialogueController.SendFriendRequest(sessionID, request))); } /// /// Handle client/friend/request/accept-all /// /// - public virtual ValueTask AcceptAllFriendRequests( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public virtual ValueTask AcceptAllFriendRequests(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } @@ -263,11 +181,7 @@ public class DialogueCallbacks( /// Handle client/friend/request/accept /// /// - public virtual ValueTask AcceptFriendRequest( - string url, - AcceptFriendRequestData request, - MongoId sessionID - ) + public virtual ValueTask AcceptFriendRequest(string url, AcceptFriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } @@ -276,11 +190,7 @@ public class DialogueCallbacks( /// Handle client/friend/request/decline /// /// - public virtual ValueTask DeclineFriendRequest( - string url, - DeclineFriendRequestData request, - MongoId sessionID - ) + public virtual ValueTask DeclineFriendRequest(string url, DeclineFriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } @@ -289,11 +199,7 @@ public class DialogueCallbacks( /// Handle client/friend/request/cancel /// /// - public virtual ValueTask CancelFriendRequest( - string url, - CancelFriendRequestData request, - MongoId sessionID - ) + public virtual ValueTask CancelFriendRequest(string url, CancelFriendRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } @@ -302,11 +208,7 @@ public class DialogueCallbacks( /// Handle client/friend/delete /// /// - public virtual ValueTask DeleteFriend( - string url, - DeleteFriendRequest request, - MongoId sessionID - ) + public virtual ValueTask DeleteFriend(string url, DeleteFriendRequest request, MongoId sessionID) { dialogueController.DeleteFriend(sessionID, request); return new ValueTask(httpResponseUtil.NullResponse()); @@ -316,11 +218,7 @@ public class DialogueCallbacks( /// Handle client/friend/ignore/set /// /// - public virtual ValueTask IgnoreFriend( - string url, - UIDRequestData request, - MongoId sessionID - ) + public virtual ValueTask IgnoreFriend(string url, UIDRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } @@ -329,58 +227,34 @@ public class DialogueCallbacks( /// Handle client/friend/ignore/remove /// /// - public virtual ValueTask UnIgnoreFriend( - string url, - UIDRequestData request, - MongoId sessionID - ) + public virtual ValueTask UnIgnoreFriend(string url, UIDRequestData request, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } - public virtual ValueTask ClearMail( - string url, - ClearMailMessageRequest request, - MongoId sessionID - ) + public virtual ValueTask ClearMail(string url, ClearMailMessageRequest request, MongoId sessionID) { dialogueController.ClearMessages(sessionID, request); return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } - public virtual ValueTask CreateGroupMail( - string url, - CreateGroupMailRequest request, - MongoId sessionID - ) + public virtual ValueTask CreateGroupMail(string url, CreateGroupMailRequest request, MongoId sessionID) { return new ValueTask(httpResponseUtil.EmptyArrayResponse()); } - public virtual ValueTask ChangeMailGroupOwner( - string url, - ChangeGroupMailOwnerRequest request, - MongoId sessionID - ) + public virtual ValueTask ChangeMailGroupOwner(string url, ChangeGroupMailOwnerRequest request, MongoId sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } - public virtual ValueTask AddUserToMail( - string url, - AddUserGroupMailRequest request, - MongoId sessionID - ) + public virtual ValueTask AddUserToMail(string url, AddUserGroupMailRequest request, MongoId sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } - public virtual ValueTask RemoveUserFromMail( - string url, - RemoveUserGroupMailRequest request, - MongoId sessionID - ) + public virtual ValueTask RemoveUserFromMail(string url, RemoveUserGroupMailRequest request, MongoId sessionID) { return new ValueTask("Not Implemented!"); // Not implemented in Node } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs index 1ed70ccd..da8d1d9b 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs @@ -29,11 +29,7 @@ public class GameCallbacks( /// Handle client/game/version/validate /// /// - public ValueTask VersionValidate( - string url, - VersionValidateRequestData info, - MongoId sessionID - ) + public ValueTask VersionValidate(string url, VersionValidateRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } @@ -46,9 +42,7 @@ public class GameCallbacks( { var startTimestampSec = timeUtil.GetTimeStamp(); gameController.GameStart(url, sessionID, startTimestampSec); - return new ValueTask( - httpResponseUtil.GetBody(new GameStartResponse { UtcTime = startTimestampSec }) - ); + return new ValueTask(httpResponseUtil.GetBody(new GameStartResponse { UtcTime = startTimestampSec })); } /// @@ -66,15 +60,9 @@ public class GameCallbacks( /// Handle client/game/config /// /// - public ValueTask GetGameConfig( - string url, - GameEmptyCrcRequestData info, - MongoId sessionID - ) + public ValueTask GetGameConfig(string url, GameEmptyCrcRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(gameController.GetGameConfig(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(gameController.GetGameConfig(sessionID))); } /// @@ -92,9 +80,7 @@ public class GameCallbacks( /// public ValueTask GetGameMode(string url, GameModeRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(gameController.GetGameMode(sessionID, info)) - ); + return new ValueTask(httpResponseUtil.GetBody(gameController.GetGameMode(sessionID, info))); } /// @@ -112,9 +98,7 @@ public class GameCallbacks( /// public ValueTask GetCurrentGroup(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(gameController.GetCurrentGroup(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(gameController.GetCurrentGroup(sessionID))); } /// @@ -123,9 +107,7 @@ public class GameCallbacks( /// public ValueTask ValidateGameVersion(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(gameController.GetValidGameVersion(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(gameController.GetValidGameVersion(sessionID))); } /// @@ -134,9 +116,7 @@ public class GameCallbacks( /// public ValueTask GameKeepalive(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(gameController.GetKeepAlive(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(gameController.GetKeepAlive(sessionID))); } /// @@ -146,9 +126,7 @@ public class GameCallbacks( public ValueTask GetVersion(string url, EmptyRequestData _, MongoId sessionID) { // change to be a proper type - return new ValueTask( - httpResponseUtil.NoBody(new { Version = watermark.GetInGameVersionLabel() }) - ); + return new ValueTask(httpResponseUtil.NoBody(new { Version = watermark.GetInGameVersionLabel() })); } /// @@ -166,9 +144,7 @@ public class GameCallbacks( /// public ValueTask GetRaidTime(string url, GetRaidTimeRequest request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.NoBody(gameController.GetRaidTime(sessionID, request)) - ); + return new ValueTask(httpResponseUtil.NoBody(gameController.GetRaidTime(sessionID, request))); } /// @@ -184,11 +160,7 @@ public class GameCallbacks( /// Handle client/survey/view /// /// - public ValueTask GetSurveyView( - string url, - SendSurveyOpinionRequest request, - MongoId sessionID - ) + public ValueTask GetSurveyView(string url, SendSurveyOpinionRequest request, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } @@ -197,11 +169,7 @@ public class GameCallbacks( /// Handle client/survey/opinion /// /// - public ValueTask SendSurveyOpinion( - string url, - SendSurveyOpinionRequest request, - MongoId sessionID - ) + public ValueTask SendSurveyOpinion(string url, SendSurveyOpinionRequest request, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/HealthCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/HealthCallbacks.cs index 7f299704..b6b6fe73 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/HealthCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/HealthCallbacks.cs @@ -10,11 +10,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class HealthCallbacks( - HttpResponseUtil httpResponseUtil, - ProfileHelper profileHelper, - HealthController healthController -) +public class HealthCallbacks(HttpResponseUtil httpResponseUtil, ProfileHelper profileHelper, HealthController healthController) { /// /// Custom spt server request found in modules/QTEPatch.cs @@ -25,11 +21,7 @@ public class HealthCallbacks( /// empty response, no data sent back to client public ValueTask HandleWorkoutEffects(string url, WorkoutData info, MongoId sessionID) { - healthController.ApplyWorkoutChanges( - profileHelper.GetPmcProfile(sessionID), - info, - sessionID - ); + healthController.ApplyWorkoutChanges(profileHelper.GetPmcProfile(sessionID), info, sessionID); return new ValueTask(httpResponseUtil.EmptyResponse()); } @@ -40,11 +32,7 @@ public class HealthCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse OffraidEat( - PmcData pmcData, - OffraidEatRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse OffraidEat(PmcData pmcData, OffraidEatRequestData info, MongoId sessionID) { return healthController.OffRaidEat(pmcData, info, sessionID); } @@ -56,11 +44,7 @@ public class HealthCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse OffraidHeal( - PmcData pmcData, - OffraidHealRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse OffraidHeal(PmcData pmcData, OffraidHealRequestData info, MongoId sessionID) { return healthController.OffRaidHeal(pmcData, info, sessionID); } @@ -72,11 +56,7 @@ public class HealthCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse HealthTreatment( - PmcData pmcData, - HealthTreatmentRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse HealthTreatment(PmcData pmcData, HealthTreatmentRequestData info, MongoId sessionID) { return healthController.HealthTreatment(pmcData, info, sessionID); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs index eb16f496..c65eb0fd 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/HideoutCallbacks.cs @@ -11,8 +11,7 @@ using SPTarkov.Server.Core.Servers; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnUpdateOrder.HideoutCallbacks)] -public class HideoutCallbacks(HideoutController hideoutController, ConfigServer configServer) - : IOnUpdate +public class HideoutCallbacks(HideoutController hideoutController, ConfigServer configServer) : IOnUpdate { private readonly HideoutConfig _hideoutConfig = configServer.GetConfig(); @@ -62,11 +61,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle HideoutPutItemsInAreaSlots /// - public ItemEventRouterResponse PutItemsInAreaSlots( - PmcData pmcData, - HideoutPutItemInRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse PutItemsInAreaSlots(PmcData pmcData, HideoutPutItemInRequestData request, MongoId sessionID) { return hideoutController.PutItemsInAreaSlots(pmcData, request, sessionID); } @@ -74,11 +69,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle HideoutTakeItemsFromAreaSlots event /// - public ItemEventRouterResponse TakeItemsFromAreaSlots( - PmcData pmcData, - HideoutTakeItemOutRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse TakeItemsFromAreaSlots(PmcData pmcData, HideoutTakeItemOutRequestData request, MongoId sessionID) { return hideoutController.TakeItemsFromAreaSlots(pmcData, request, sessionID); } @@ -86,11 +77,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle HideoutToggleArea event /// - public ItemEventRouterResponse ToggleArea( - PmcData pmcData, - HideoutToggleAreaRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ToggleArea(PmcData pmcData, HideoutToggleAreaRequestData request, MongoId sessionID) { return hideoutController.ToggleArea(pmcData, request, sessionID); } @@ -110,11 +97,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle HideoutScavCaseProductionStart event /// - public ItemEventRouterResponse ScavCaseProductionStart( - PmcData pmcData, - HideoutScavCaseStartRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ScavCaseProductionStart(PmcData pmcData, HideoutScavCaseStartRequestData request, MongoId sessionID) { return hideoutController.ScavCaseProductionStart(pmcData, request, sessionID); } @@ -134,11 +117,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle HideoutTakeProduction event /// - public ItemEventRouterResponse TakeProduction( - PmcData pmcData, - HideoutTakeProductionRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse TakeProduction(PmcData pmcData, HideoutTakeProductionRequestData request, MongoId sessionID) { return hideoutController.TakeProduction(pmcData, request, sessionID); } @@ -176,11 +155,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle client/game/profile/items/moving - RecordShootingRangePoints /// - public ItemEventRouterResponse ImproveArea( - PmcData pmcData, - HideoutImproveAreaRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ImproveArea(PmcData pmcData, HideoutImproveAreaRequestData request, MongoId sessionID) { return hideoutController.ImproveArea(sessionID, pmcData, request); } @@ -188,11 +163,7 @@ public class HideoutCallbacks(HideoutController hideoutController, ConfigServer /// /// Handle client/game/profile/items/moving - HideoutCancelProductionCommand /// - public ItemEventRouterResponse CancelProduction( - PmcData pmcData, - HideoutCancelProductionRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse CancelProduction(PmcData pmcData, HideoutCancelProductionRequestData request, MongoId sessionID) { return hideoutController.CancelProduction(sessionID, pmcData, request); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/InraidCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/InraidCallbacks.cs index d103bc58..49b21258 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/InraidCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/InraidCallbacks.cs @@ -18,11 +18,7 @@ public class InraidCallbacks(InRaidController inRaidController, HttpResponseUtil /// register player request /// Session id /// Null http response - public ValueTask RegisterPlayer( - string url, - RegisterPlayerRequestData info, - MongoId sessionID - ) + public ValueTask RegisterPlayer(string url, RegisterPlayerRequestData info, MongoId sessionID) { inRaidController.AddPlayer(sessionID, info); return new ValueTask(httpResponseUtil.NullResponse()); @@ -47,24 +43,16 @@ public class InraidCallbacks(InRaidController inRaidController, HttpResponseUtil /// JSON as string public ValueTask GetRaidMenuSettings() { - return new ValueTask( - httpResponseUtil.NoBody(inRaidController.GetInRaidConfig().RaidMenuSettings) - ); + return new ValueTask(httpResponseUtil.NoBody(inRaidController.GetInRaidConfig().RaidMenuSettings)); } /// /// Handle singleplayer/scav/traitorscavhostile /// /// - public ValueTask GetTraitorScavHostileChance( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public ValueTask GetTraitorScavHostileChance(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.NoBody(inRaidController.GetTraitorScavHostileChance(url, sessionID)) - ); + return new ValueTask(httpResponseUtil.NoBody(inRaidController.GetTraitorScavHostileChance(url, sessionID))); } /// @@ -73,8 +61,6 @@ public class InraidCallbacks(InRaidController inRaidController, HttpResponseUtil /// public ValueTask GetBossTypes(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.NoBody(inRaidController.GetBossTypes(url, sessionID)) - ); + return new ValueTask(httpResponseUtil.NoBody(inRaidController.GetBossTypes(url, sessionID))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs index bd1c7512..789dc328 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/InsuranceCallbacks.cs @@ -12,11 +12,8 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnUpdateOrder.InsuranceCallbacks)] -public class InsuranceCallbacks( - InsuranceController insuranceController, - HttpResponseUtil httpResponseUtil, - ConfigServer configServer -) : IOnUpdate +public class InsuranceCallbacks(InsuranceController insuranceController, HttpResponseUtil httpResponseUtil, ConfigServer configServer) + : IOnUpdate { private readonly InsuranceConfig _insuranceConfig = configServer.GetConfig(); @@ -39,15 +36,9 @@ public class InsuranceCallbacks( /// /// Session/player id /// - public ValueTask GetInsuranceCost( - string url, - GetInsuranceCostRequestData info, - MongoId sessionID - ) + public ValueTask GetInsuranceCost(string url, GetInsuranceCostRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(insuranceController.Cost(info, sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(insuranceController.Cost(info, sessionID))); } /// @@ -57,11 +48,7 @@ public class InsuranceCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse Insure( - PmcData pmcData, - InsureRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse Insure(PmcData pmcData, InsureRequestData info, MongoId sessionID) { return insuranceController.Insure(pmcData, info, sessionID); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs index 22ba98f2..215f5a30 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs @@ -9,10 +9,7 @@ using SPTarkov.Server.Core.Models.Eft.Quests; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class InventoryCallbacks( - InventoryController inventoryController, - QuestController questController -) +public class InventoryCallbacks(InventoryController inventoryController, QuestController questController) { /// /// Handle client/game/profile/items/moving Move event @@ -114,11 +111,7 @@ public class InventoryCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse SwapItem( - PmcData pmcData, - InventorySwapRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse SwapItem(PmcData pmcData, InventorySwapRequestData info, MongoId sessionID) { return inventoryController.SwapItem(pmcData, info, sessionID); } @@ -129,11 +122,7 @@ public class InventoryCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse FoldItem( - PmcData pmcData, - InventoryFoldRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse FoldItem(PmcData pmcData, InventoryFoldRequestData info, MongoId sessionID) { return inventoryController.FoldItem(pmcData, info, sessionID); } @@ -144,11 +133,7 @@ public class InventoryCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse ToggleItem( - PmcData pmcData, - InventoryToggleRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse ToggleItem(PmcData pmcData, InventoryToggleRequestData info, MongoId sessionID) { return inventoryController.ToggleItem(pmcData, info, sessionID); } @@ -159,11 +144,7 @@ public class InventoryCallbacks( /// /// Session/Player id /// - public ItemEventRouterResponse TagItem( - PmcData pmcData, - InventoryTagRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse TagItem(PmcData pmcData, InventoryTagRequestData request, MongoId sessionId) { return inventoryController.TagItem(pmcData, request, sessionId); } @@ -229,11 +210,7 @@ public class InventoryCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse ReadEncyclopedia( - PmcData pmcData, - InventoryReadEncyclopediaRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse ReadEncyclopedia(PmcData pmcData, InventoryReadEncyclopediaRequestData info, MongoId sessionID) { return inventoryController.ReadEncyclopedia(pmcData, info, sessionID); } @@ -376,12 +353,7 @@ public class InventoryCallbacks( /// Session/player id /// Client response /// - public ItemEventRouterResponse FailQuest( - PmcData pmcData, - FailQuestRequestData info, - MongoId sessionID, - ItemEventRouterResponse output - ) + public ItemEventRouterResponse FailQuest(PmcData pmcData, FailQuestRequestData info, MongoId sessionID, ItemEventRouterResponse output) { questController.FailQuest(pmcData, info, sessionID, output); return output; @@ -394,12 +366,7 @@ public class InventoryCallbacks( /// Session/player id /// Client response /// - public ItemEventRouterResponse PinOrLock( - PmcData pmcData, - PinOrLockItemRequest info, - MongoId sessionID, - ItemEventRouterResponse output - ) + public ItemEventRouterResponse PinOrLock(PmcData pmcData, PinOrLockItemRequest info, MongoId sessionID, ItemEventRouterResponse output) { inventoryController.PinOrLock(pmcData, info, sessionID, output); return output; diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/ItemEventCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/ItemEventCallbacks.cs index 15958510..475c5630 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/ItemEventCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/ItemEventCallbacks.cs @@ -10,19 +10,11 @@ namespace SPTarkov.Server.Core.Callbacks; [Injectable] public class ItemEventCallbacks(HttpResponseUtil httpResponseUtil, ItemEventRouter itemEventRouter) { - public async ValueTask HandleEvents( - string url, - ItemEventRouterRequest info, - MongoId sessionID - ) + public async ValueTask HandleEvents(string url, ItemEventRouterRequest info, MongoId sessionID) { var eventResponse = await itemEventRouter.HandleEvents(info, sessionID); var result = IsCriticalError(eventResponse.Warnings) - ? httpResponseUtil.GetBody( - eventResponse, - GetErrorCode(eventResponse.Warnings), - eventResponse.Warnings[0].ErrorMessage - ) + ? httpResponseUtil.GetBody(eventResponse, GetErrorCode(eventResponse.Warnings), eventResponse.Warnings[0].ErrorMessage) : httpResponseUtil.GetBody(eventResponse); return result; @@ -41,10 +33,7 @@ public class ItemEventCallbacks(HttpResponseUtil httpResponseUtil, ItemEventRout } // List of non-critical error codes, we return true if any error NOT included is passed in - var nonCriticalErrorCodes = new HashSet - { - BackendErrorCodes.NotEnoughSpace, - }; + var nonCriticalErrorCodes = new HashSet { BackendErrorCodes.NotEnoughSpace }; foreach (var warning in warnings) { diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs index 46879a23..91ef86b6 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs @@ -74,26 +74,16 @@ public class LauncherCallbacks( public ValueTask GetCompatibleTarkovVersion() { - return new ValueTask( - httpResponseUtil.NoBody(launcherController.GetCompatibleTarkovVersion()) - ); + return new ValueTask(httpResponseUtil.NoBody(launcherController.GetCompatibleTarkovVersion())); } public ValueTask GetLoadedServerMods() { - return new ValueTask( - httpResponseUtil.NoBody(launcherController.GetLoadedServerMods()) - ); + return new ValueTask(httpResponseUtil.NoBody(launcherController.GetLoadedServerMods())); } - public ValueTask GetServerModsProfileUsed( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public ValueTask GetServerModsProfileUsed(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.NoBody(launcherController.GetServerModsProfileUsed(sessionID)) - ); + return new ValueTask(httpResponseUtil.NoBody(launcherController.GetServerModsProfileUsed(sessionID))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs index f287240d..9a3e2505 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs @@ -16,29 +16,17 @@ public class LauncherV2Callbacks( { public ValueTask Ping() { - return new ValueTask( - httpResponseUtil.NoBody( - new LauncherV2PingResponse { Response = launcherV2Controller.Ping() } - ) - ); + return new ValueTask(httpResponseUtil.NoBody(new LauncherV2PingResponse { Response = launcherV2Controller.Ping() })); } public ValueTask Types() { - return new ValueTask( - httpResponseUtil.NoBody( - new LauncherV2TypesResponse { Response = launcherV2Controller.Types() } - ) - ); + return new ValueTask(httpResponseUtil.NoBody(new LauncherV2TypesResponse { Response = launcherV2Controller.Types() })); } public ValueTask Login(LoginRequestData info) { - return new ValueTask( - httpResponseUtil.NoBody( - new LauncherV2LoginResponse { Response = launcherV2Controller.Login(info) } - ) - ); + return new ValueTask(httpResponseUtil.NoBody(new LauncherV2LoginResponse { Response = launcherV2Controller.Login(info) })); } public async ValueTask Register(RegisterData info) @@ -94,31 +82,20 @@ public class LauncherV2Callbacks( public ValueTask Mods() { - return new ValueTask( - httpResponseUtil.NoBody( - new LauncherV2ModsResponse { Response = launcherV2Controller.LoadedMods() } - ) - ); + return new ValueTask(httpResponseUtil.NoBody(new LauncherV2ModsResponse { Response = launcherV2Controller.LoadedMods() })); } public ValueTask Profiles() { return new ValueTask( - httpResponseUtil.NoBody( - new LauncherV2ProfilesResponse { Response = profileController.GetMiniProfiles() } - ) + httpResponseUtil.NoBody(new LauncherV2ProfilesResponse { Response = profileController.GetMiniProfiles() }) ); } public ValueTask Profile(MongoId sessionId) { return new ValueTask( - httpResponseUtil.NoBody( - new LauncherV2ProfileResponse - { - Response = launcherV2Controller.GetProfile(sessionId), - } - ) + httpResponseUtil.NoBody(new LauncherV2ProfileResponse { Response = launcherV2Controller.GetProfile(sessionId) }) ); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/LocationCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/LocationCallbacks.cs index 99243047..66ca3ce9 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/LocationCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/LocationCallbacks.cs @@ -8,10 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class LocationCallbacks( - HttpResponseUtil httpResponseUtil, - LocationController locationController -) +public class LocationCallbacks(HttpResponseUtil httpResponseUtil, LocationController locationController) { /// /// Handle client/locations @@ -19,23 +16,15 @@ public class LocationCallbacks( /// public ValueTask GetLocationData(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(locationController.GenerateAll(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(locationController.GenerateAll(sessionID))); } /// /// Handle client/airdrop/loot /// /// - public ValueTask GetAirdropLoot( - string url, - GetAirdropLootRequest info, - MongoId sessionID - ) + public ValueTask GetAirdropLoot(string url, GetAirdropLootRequest info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(locationController.GetAirDropLoot(info)) - ); + return new ValueTask(httpResponseUtil.GetBody(locationController.GetAirDropLoot(info))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs index b91ca136..896740d9 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs @@ -10,11 +10,7 @@ using static SPTarkov.Server.Core.Services.MatchLocationService; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class MatchCallbacks( - HttpResponseUtil httpResponseUtil, - MatchController matchController, - DatabaseService databaseService -) +public class MatchCallbacks(HttpResponseUtil httpResponseUtil, MatchController matchController, DatabaseService databaseService) { /// /// Handle client/match/updatePing @@ -55,9 +51,7 @@ public class MatchCallbacks( /// public ValueTask GroupCurrent(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(new MatchGroupCurrentResponse { Squad = [] }) - ); + return new ValueTask(httpResponseUtil.GetBody(new MatchGroupCurrentResponse { Squad = [] })); } /// @@ -82,11 +76,7 @@ public class MatchCallbacks( /// Handle client/match/group/invite/send /// /// - public ValueTask SendGroupInvite( - string url, - MatchGroupInviteSendRequest info, - MongoId sessionID - ) + public ValueTask SendGroupInvite(string url, MatchGroupInviteSendRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody("2427943f23698ay9f2863735")); } @@ -107,11 +97,7 @@ public class MatchCallbacks( /// /// Session/player id /// - public ValueTask DeclineGroupInvite( - string url, - RequestIdRequest info, - MongoId sessionID - ) + public ValueTask DeclineGroupInvite(string url, RequestIdRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } @@ -135,11 +121,7 @@ public class MatchCallbacks( /// /// Session/player id /// - public ValueTask TransferGroup( - string url, - MatchGroupTransferRequest info, - MongoId sessionID - ) + public ValueTask TransferGroup(string url, MatchGroupTransferRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } @@ -166,11 +148,7 @@ public class MatchCallbacks( /// Handle client/analytics/event-disconnect /// /// - public ValueTask EventDisconnect( - string url, - PutMetricsRequestData request, - MongoId sessionId - ) + public ValueTask EventDisconnect(string url, PutMetricsRequestData request, MongoId sessionId) { return new ValueTask(httpResponseUtil.NullResponse()); } @@ -190,9 +168,7 @@ public class MatchCallbacks( /// public ValueTask JoinMatch(string url, MatchGroupJoinRequest request, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(matchController.JoinMatch(request, sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(matchController.JoinMatch(request, sessionID))); } /// @@ -209,15 +185,9 @@ public class MatchCallbacks( /// Handle client/match/group/status /// /// - public ValueTask GetGroupStatus( - string url, - MatchGroupStatusRequest info, - MongoId sessionID - ) + public ValueTask GetGroupStatus(string url, MatchGroupStatusRequest info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(matchController.GetGroupStatus(info)) - ); + return new ValueTask(httpResponseUtil.GetBody(matchController.GetGroupStatus(info))); } /// @@ -243,11 +213,7 @@ public class MatchCallbacks( /// Handle client/match/group/player/remove /// /// - public ValueTask RemovePlayerFromGroup( - string url, - MatchGroupPlayerRemoveRequest info, - MongoId sessionID - ) + public ValueTask RemovePlayerFromGroup(string url, MatchGroupPlayerRemoveRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(true)); } @@ -256,26 +222,16 @@ public class MatchCallbacks( /// Handle client/match/local/start /// /// - public ValueTask StartLocalRaid( - string url, - StartLocalRaidRequestData info, - MongoId sessionID - ) + public ValueTask StartLocalRaid(string url, StartLocalRaidRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(matchController.StartLocalRaid(sessionID, info)) - ); + return new ValueTask(httpResponseUtil.GetBody(matchController.StartLocalRaid(sessionID, info))); } /// /// Handle client/match/local/end /// /// - public ValueTask EndLocalRaid( - string url, - EndLocalRaidRequestData info, - MongoId sessionID - ) + public ValueTask EndLocalRaid(string url, EndLocalRaidRequestData info, MongoId sessionID) { matchController.EndLocalRaid(sessionID, info); return new ValueTask(httpResponseUtil.NullResponse()); @@ -285,11 +241,7 @@ public class MatchCallbacks( /// Handle client/raid/configuration /// /// - public ValueTask GetRaidConfiguration( - string url, - GetRaidConfigurationRequestData info, - MongoId sessionID - ) + public ValueTask GetRaidConfiguration(string url, GetRaidConfigurationRequestData info, MongoId sessionID) { matchController.ConfigureOfflineRaid(info, sessionID); return new ValueTask(httpResponseUtil.NullResponse()); @@ -302,11 +254,7 @@ public class MatchCallbacks( /// /// Session/player id /// - public ValueTask GetConfigurationByProfile( - string url, - GetRaidConfigurationRequestData info, - MongoId sessionID - ) + public ValueTask GetConfigurationByProfile(string url, GetRaidConfigurationRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } @@ -335,11 +283,7 @@ public class MatchCallbacks( /// /// Handle client/match/group/start_game /// - public Task StartGameAsGroupLeader( - string url, - MatchGroupStartGameRequest? request, - MongoId? sessionId - ) + public Task StartGameAsGroupLeader(string url, MatchGroupStartGameRequest? request, MongoId? sessionId) { // returns a ProfileStatusResponse object throw new NotImplementedException(); diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/NoteCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/NoteCallbacks.cs index 5997ef7e..9acfad36 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/NoteCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/NoteCallbacks.cs @@ -17,11 +17,7 @@ public class NoteCallbacks(NoteController noteController) /// Add note request /// Session/player id /// ItemEventRouterResponse - public ItemEventRouterResponse AddNote( - PmcData pmcData, - NoteActionRequest request, - MongoId sessionID - ) + public ItemEventRouterResponse AddNote(PmcData pmcData, NoteActionRequest request, MongoId sessionID) { return noteController.AddNote(pmcData, request, sessionID); } @@ -33,11 +29,7 @@ public class NoteCallbacks(NoteController noteController) /// Edit note request /// Session/player id /// ItemEventRouterResponse - public ItemEventRouterResponse EditNote( - PmcData pmcData, - NoteActionRequest request, - MongoId sessionID - ) + public ItemEventRouterResponse EditNote(PmcData pmcData, NoteActionRequest request, MongoId sessionID) { return noteController.EditNote(pmcData, request, sessionID); } @@ -49,11 +41,7 @@ public class NoteCallbacks(NoteController noteController) /// Delete note request /// Session/player id /// ItemEventRouterResponse - public ItemEventRouterResponse DeleteNote( - PmcData pmcData, - NoteActionRequest request, - MongoId sessionID - ) + public ItemEventRouterResponse DeleteNote(PmcData pmcData, NoteActionRequest request, MongoId sessionID) { return noteController.DeleteNote(pmcData, request, sessionID); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/NotifierCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/NotifierCallbacks.cs index 5efd9e83..2a943a06 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/NotifierCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/NotifierCallbacks.cs @@ -36,9 +36,7 @@ public class NotifierCallbacks( */ notifierController .NotifyAsync(tmpSessionID) - .ContinueWith(messages => - messages.Result.Select(message => string.Join("\n", jsonUtil.Serialize(message))) - ) + .ContinueWith(messages => messages.Result.Select(message => string.Join("\n", jsonUtil.Serialize(message)))) .ContinueWith(text => httpServerHelper.SendTextJson(resp, text.Result)); } @@ -57,15 +55,9 @@ public class NotifierCallbacks( /// Handle client/notifier/channel/create /// /// - public ValueTask CreateNotifierChannel( - string url, - EmptyRequestData _, - MongoId sessionID - ) + public ValueTask CreateNotifierChannel(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(notifierController.GetChannel(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(notifierController.GetChannel(sessionID))); } /// @@ -74,9 +66,7 @@ public class NotifierCallbacks( /// public ValueTask SelectProfile(string url, UIDRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(new SelectProfileResponse { Status = "ok" }) - ); + return new ValueTask(httpResponseUtil.GetBody(new SelectProfileResponse { Status = "ok" })); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs index 1449c1ee..3dc67ac1 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs @@ -8,10 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class PrestigeCallbacks( - HttpResponseUtil httpResponseUtil, - PrestigeController prestigeController -) +public class PrestigeCallbacks(HttpResponseUtil httpResponseUtil, PrestigeController prestigeController) { /// /// Handle client/prestige/list @@ -22,9 +19,7 @@ public class PrestigeCallbacks( /// public ValueTask GetPrestige(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(prestigeController.GetPrestige(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(prestigeController.GetPrestige(sessionID))); } /// @@ -34,11 +29,7 @@ public class PrestigeCallbacks( /// /// Session/player id /// - public async ValueTask ObtainPrestige( - string url, - ObtainPrestigeRequestList info, - MongoId sessionID - ) + public async ValueTask ObtainPrestige(string url, ObtainPrestigeRequestList info, MongoId sessionID) { await prestigeController.ObtainPrestige(sessionID, info); diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs index a1bdd69c..e89ea40d 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs @@ -23,11 +23,7 @@ public class ProfileCallbacks( /// Handle client/game/profile/create /// /// - public async ValueTask CreateProfile( - string url, - ProfileCreateRequestData info, - MongoId sessionID - ) + public async ValueTask CreateProfile(string url, ProfileCreateRequestData info, MongoId sessionID) { var id = await profileController.CreateProfile(info, sessionID); return httpResponse.GetBody(new CreateProfileResponse { UserId = id }); @@ -40,9 +36,7 @@ public class ProfileCallbacks( /// public ValueTask GetProfileData(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponse.GetBody(profileController.GetCompleteProfile(sessionID)) - ); + return new ValueTask(httpResponse.GetBody(profileController.GetCompleteProfile(sessionID))); } /// @@ -53,22 +47,14 @@ public class ProfileCallbacks( /// public ValueTask RegenerateScav(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponse.GetBody( - new List { profileController.GeneratePlayerScav(sessionID) } - ) - ); + return new ValueTask(httpResponse.GetBody(new List { profileController.GeneratePlayerScav(sessionID) })); } /// /// Handle client/game/profile/voice/change event /// /// - public ValueTask ChangeVoice( - string url, - ProfileChangeVoiceRequestData info, - MongoId sessionID - ) + public ValueTask ChangeVoice(string url, ProfileChangeVoiceRequestData info, MongoId sessionID) { profileController.ChangeVoice(info, sessionID); return new ValueTask(httpResponse.NullResponse()); @@ -79,35 +65,19 @@ public class ProfileCallbacks( /// Client allows player to adjust their profile name /// /// Client response as string - public ValueTask ChangeNickname( - string url, - ProfileChangeNicknameRequestData info, - MongoId sessionId - ) + public ValueTask ChangeNickname(string url, ProfileChangeNicknameRequestData info, MongoId sessionId) { var output = profileController.ChangeNickname(info, sessionId); return output switch { NicknameValidationResult.Taken => new ValueTask( - httpResponse.GetBody( - null, - BackendErrorCodes.NicknameNotUnique, - $"{BackendErrorCodes.NicknameNotUnique} - " - ) + httpResponse.GetBody(null, BackendErrorCodes.NicknameNotUnique, $"{BackendErrorCodes.NicknameNotUnique} - ") ), NicknameValidationResult.Short => new ValueTask( - httpResponse.GetBody( - null, - BackendErrorCodes.NicknameNotValid, - $"{BackendErrorCodes.NicknameNotValid} - " - ) - ), - _ => new ValueTask( - httpResponse.GetBody( - new { status = 0, NicknameChangeDate = timeUtil.GetTimeStamp() } - ) + httpResponse.GetBody(null, BackendErrorCodes.NicknameNotValid, $"{BackendErrorCodes.NicknameNotValid} - ") ), + _ => new ValueTask(httpResponse.GetBody(new { status = 0, NicknameChangeDate = timeUtil.GetTimeStamp() })), }; } @@ -115,27 +85,15 @@ public class ProfileCallbacks( /// Handle client/game/profile/nickname/validate /// /// Client response as string - public ValueTask ValidateNickname( - string url, - ValidateNicknameRequestData info, - MongoId sessionId - ) + public ValueTask ValidateNickname(string url, ValidateNicknameRequestData info, MongoId sessionId) { return profileController.ValidateNickname(info, sessionId) switch { NicknameValidationResult.Taken => new ValueTask( - httpResponse.GetBody( - null, - BackendErrorCodes.NicknameNotUnique, - $"{BackendErrorCodes.NicknameNotUnique} - " - ) + httpResponse.GetBody(null, BackendErrorCodes.NicknameNotUnique, $"{BackendErrorCodes.NicknameNotUnique} - ") ), NicknameValidationResult.Short => new ValueTask( - httpResponse.GetBody( - null, - BackendErrorCodes.NicknameNotValid, - $"{BackendErrorCodes.NicknameNotValid} - " - ) + httpResponse.GetBody(null, BackendErrorCodes.NicknameNotValid, $"{BackendErrorCodes.NicknameNotValid} - ") ), _ => new ValueTask(httpResponse.GetBody(new { status = "ok" })), }; @@ -164,9 +122,7 @@ public class ProfileCallbacks( /// public ValueTask GetProfileStatus(string url, EmptyRequestData _, MongoId sessionId) { - return new ValueTask( - httpResponse.GetBody(profileController.GetProfileStatus(sessionId)) - ); + return new ValueTask(httpResponse.GetBody(profileController.GetProfileStatus(sessionId))); } /// @@ -174,60 +130,36 @@ public class ProfileCallbacks( /// Called when viewing another players profile /// /// - public ValueTask GetOtherProfile( - string url, - GetOtherProfileRequest request, - MongoId sessionID - ) + public ValueTask GetOtherProfile(string url, GetOtherProfileRequest request, MongoId sessionID) { - return new ValueTask( - httpResponse.GetBody(profileController.GetOtherProfile(sessionID, request)) - ); + return new ValueTask(httpResponse.GetBody(profileController.GetOtherProfile(sessionID, request))); } /// /// Handle client/profile/settings /// /// - public ValueTask GetProfileSettings( - string url, - GetProfileSettingsRequest info, - MongoId sessionID - ) + public ValueTask GetProfileSettings(string url, GetProfileSettingsRequest info, MongoId sessionID) { - return new ValueTask( - httpResponse.GetBody(profileController.SetChosenProfileIcon(sessionID, info)) - ); + return new ValueTask(httpResponse.GetBody(profileController.SetChosenProfileIcon(sessionID, info))); } /// /// Handle client/game/profile/search /// /// - public ValueTask SearchProfiles( - string url, - SearchProfilesRequestData info, - MongoId sessionID - ) + public ValueTask SearchProfiles(string url, SearchProfilesRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponse.GetBody(profileController.SearchProfiles(info, sessionID)) - ); + return new ValueTask(httpResponse.GetBody(profileController.SearchProfiles(info, sessionID))); } /// /// Handle launcher/profile/info /// /// - public ValueTask GetMiniProfile( - string url, - GetMiniProfileRequestData info, - MongoId sessionID - ) + public ValueTask GetMiniProfile(string url, GetMiniProfileRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponse.NoBody(profileController.GetMiniProfile(sessionID)) - ); + return new ValueTask(httpResponse.NoBody(profileController.GetMiniProfile(sessionID))); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/QuestCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/QuestCallbacks.cs index 3d0aec0a..0c3377f0 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/QuestCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/QuestCallbacks.cs @@ -22,11 +22,7 @@ public class QuestCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse ChangeRepeatableQuest( - PmcData pmcData, - RepeatableQuestChangeRequest info, - MongoId sessionID - ) + public ItemEventRouterResponse ChangeRepeatableQuest(PmcData pmcData, RepeatableQuestChangeRequest info, MongoId sessionID) { return repeatableQuestController.ChangeRepeatableQuest(pmcData, info, sessionID); } @@ -38,11 +34,7 @@ public class QuestCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse AcceptQuest( - PmcData pmcData, - AcceptQuestRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse AcceptQuest(PmcData pmcData, AcceptQuestRequestData info, MongoId sessionID) { if (info.Type == "repeatable") { @@ -59,11 +51,7 @@ public class QuestCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse CompleteQuest( - PmcData pmcData, - CompleteQuestRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse CompleteQuest(PmcData pmcData, CompleteQuestRequestData info, MongoId sessionID) { return questController.CompleteQuest(pmcData, info, sessionID); } @@ -75,11 +63,7 @@ public class QuestCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse HandoverQuest( - PmcData pmcData, - HandoverQuestRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse HandoverQuest(PmcData pmcData, HandoverQuestRequestData info, MongoId sessionID) { return questController.HandoverQuest(pmcData, info, sessionID); } @@ -93,9 +77,7 @@ public class QuestCallbacks( /// public ValueTask ListQuests(string url, ListQuestsRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(questController.GetClientQuests(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(questController.GetClientQuests(sessionID))); } /// @@ -107,8 +89,6 @@ public class QuestCallbacks( /// public ValueTask ActivityPeriods(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(repeatableQuestController.GetClientRepeatableQuests(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(repeatableQuestController.GetClientRepeatableQuests(sessionID))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs index 9c8641ea..f870e82f 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs @@ -62,9 +62,7 @@ public class RagfairCallbacks( /// public ValueTask Search(string url, SearchRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(ragfairController.GetOffers(sessionID, info)) - ); + return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetOffers(sessionID, info))); } /// @@ -74,15 +72,9 @@ public class RagfairCallbacks( /// /// Session/player id /// - public ValueTask GetMarketPrice( - string url, - GetMarketPriceRequestData info, - MongoId sessionID - ) + public ValueTask GetMarketPrice(string url, GetMarketPriceRequestData info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(ragfairController.GetItemMinAvgMaxFleaPriceValues(info)) - ); + return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetItemMinAvgMaxFleaPriceValues(info))); } /// @@ -92,11 +84,7 @@ public class RagfairCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse AddOffer( - PmcData pmcData, - AddOfferRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse AddOffer(PmcData pmcData, AddOfferRequestData info, MongoId sessionID) { return ragfairController.AddPlayerOffer(pmcData, info, sessionID); } @@ -108,11 +96,7 @@ public class RagfairCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse RemoveOffer( - PmcData pmcData, - RemoveOfferRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse RemoveOffer(PmcData pmcData, RemoveOfferRequestData info, MongoId sessionID) { return ragfairController.FlagOfferForRemoval(info.OfferId, sessionID); } @@ -124,11 +108,7 @@ public class RagfairCallbacks( /// /// Session/player id /// - public ItemEventRouterResponse ExtendOffer( - PmcData pmcData, - ExtendOfferRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse ExtendOffer(PmcData pmcData, ExtendOfferRequestData info, MongoId sessionID) { return ragfairController.ExtendOffer(info, sessionID); } @@ -143,9 +123,7 @@ public class RagfairCallbacks( /// public ValueTask GetFleaPrices(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(ragfairController.GetAllFleaPrices()) - ); + return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetAllFleaPrices())); } /// @@ -155,20 +133,12 @@ public class RagfairCallbacks( /// /// Session/player id /// - public ValueTask SendReport( - string url, - SendRagfairReportRequestData info, - MongoId sessionID - ) + public ValueTask SendReport(string url, SendRagfairReportRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } - public ValueTask StorePlayerOfferTaxAmount( - string url, - StorePlayerOfferTaxAmountRequestData info, - MongoId sessionID - ) + public ValueTask StorePlayerOfferTaxAmount(string url, StorePlayerOfferTaxAmountRequestData info, MongoId sessionID) { ragfairTaxService.StoreClientOfferTaxValue(sessionID, info); return new ValueTask(httpResponseUtil.NullResponse()); @@ -181,14 +151,8 @@ public class RagfairCallbacks( /// /// Session/player id /// - public ValueTask GetFleaOfferById( - string url, - GetRagfairOfferByIdRequest info, - MongoId sessionID - ) + public ValueTask GetFleaOfferById(string url, GetRagfairOfferByIdRequest info, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(ragfairController.GetOfferByInternalId(sessionID, info)) - ); + return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetOfferByInternalId(sessionID, info))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/RepairCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/RepairCallbacks.cs index 42e1c8ab..4042924f 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/RepairCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/RepairCallbacks.cs @@ -18,11 +18,7 @@ public class RepairCallbacks(RepairController _repairController) /// /// Session/player id /// - public ItemEventRouterResponse TraderRepair( - PmcData pmcData, - TraderRepairActionDataRequest info, - MongoId sessionID - ) + public ItemEventRouterResponse TraderRepair(PmcData pmcData, TraderRepairActionDataRequest info, MongoId sessionID) { return _repairController.TraderRepair(sessionID, info, pmcData); } @@ -35,11 +31,7 @@ public class RepairCallbacks(RepairController _repairController) /// /// Session/player id /// - public ItemEventRouterResponse Repair( - PmcData pmcData, - RepairActionDataRequest info, - MongoId sessionID - ) + public ItemEventRouterResponse Repair(PmcData pmcData, RepairActionDataRequest info, MongoId sessionID) { return _repairController.RepairWithKit(sessionID, info, pmcData); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs index 0e8c95d6..ed6d1abe 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs @@ -7,11 +7,7 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnLoadOrder.SaveCallbacks)] -public class SaveCallbacks( - SaveServer saveServer, - ConfigServer configServer, - BackupService backupService -) : IOnLoad, IOnUpdate +public class SaveCallbacks(SaveServer saveServer, ConfigServer configServer, BackupService backupService) : IOnLoad, IOnUpdate { private readonly CoreConfig _coreConfig = configServer.GetConfig(); diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/TradeCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/TradeCallbacks.cs index 3a7e7ea3..e62ce756 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/TradeCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/TradeCallbacks.cs @@ -17,11 +17,7 @@ public class TradeCallbacks(TradeController tradeController) /// /// Session/player id /// - public ItemEventRouterResponse ProcessTrade( - PmcData pmcData, - ProcessBaseTradeRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse ProcessTrade(PmcData pmcData, ProcessBaseTradeRequestData info, MongoId sessionID) { return tradeController.ConfirmTrading(pmcData, info, sessionID); } @@ -33,11 +29,7 @@ public class TradeCallbacks(TradeController tradeController) /// /// Session/player id /// - public ItemEventRouterResponse ProcessRagfairTrade( - PmcData pmcData, - ProcessRagfairTradeRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse ProcessRagfairTrade(PmcData pmcData, ProcessRagfairTradeRequestData info, MongoId sessionID) { return tradeController.ConfirmRagfairTrading(pmcData, info, sessionID); } @@ -49,11 +41,7 @@ public class TradeCallbacks(TradeController tradeController) /// /// Session/player id /// - public ItemEventRouterResponse SellAllFromSavage( - PmcData pmcData, - SellScavItemsToFenceRequestData info, - MongoId sessionID - ) + public ItemEventRouterResponse SellAllFromSavage(PmcData pmcData, SellScavItemsToFenceRequestData info, MongoId sessionID) { return tradeController.SellScavItemsToFence(pmcData, info, sessionID); } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs index fed8f376..ca72e726 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/TraderCallbacks.cs @@ -10,11 +10,9 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnLoadOrder.TraderCallbacks)] -public class TraderCallbacks( - HttpResponseUtil httpResponseUtil, - TraderController traderController, - ConfigServer configServer -) : IOnLoad, IOnUpdate +public class TraderCallbacks(HttpResponseUtil httpResponseUtil, TraderController traderController, ConfigServer configServer) + : IOnLoad, + IOnUpdate { private readonly TraderConfig _traderConfig = configServer.GetConfig(); @@ -36,9 +34,7 @@ public class TraderCallbacks( /// public ValueTask GetTraderSettings(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(traderController.GetAllTraders(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(traderController.GetAllTraders(sessionID))); } /// @@ -47,9 +43,7 @@ public class TraderCallbacks( public ValueTask GetTrader(string url, EmptyRequestData _, MongoId sessionID) { var traderID = url.Replace("/client/trading/api/getTrader/", ""); - return new ValueTask( - httpResponseUtil.GetBody(traderController.GetTrader(sessionID, traderID)) - ); + return new ValueTask(httpResponseUtil.GetBody(traderController.GetTrader(sessionID, traderID))); } /// @@ -59,9 +53,7 @@ public class TraderCallbacks( public ValueTask GetAssort(string url, EmptyRequestData _, MongoId sessionID) { var traderID = url.Replace("/client/trading/api/getTraderAssort/", ""); - return new ValueTask( - httpResponseUtil.GetBody(traderController.GetAssort(sessionID, traderID)) - ); + return new ValueTask(httpResponseUtil.GetBody(traderController.GetAssort(sessionID, traderID))); } /// diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/WeatherCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/WeatherCallbacks.cs index 7711b73f..0cb70660 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/WeatherCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/WeatherCallbacks.cs @@ -7,10 +7,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] -public class WeatherCallbacks( - HttpResponseUtil httpResponseUtil, - WeatherController weatherController -) +public class WeatherCallbacks(HttpResponseUtil httpResponseUtil, WeatherController weatherController) { /// /// Handle client/weather @@ -33,8 +30,6 @@ public class WeatherCallbacks( /// public ValueTask GetLocalWeather(string url, EmptyRequestData _, MongoId sessionID) { - return new ValueTask( - httpResponseUtil.GetBody(weatherController.GenerateLocal(sessionID)) - ); + return new ValueTask(httpResponseUtil.GetBody(weatherController.GenerateLocal(sessionID))); } } diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/WishlistCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/WishlistCallbacks.cs index 211385f3..3874805f 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/WishlistCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/WishlistCallbacks.cs @@ -17,11 +17,7 @@ public class WishlistCallbacks(WishlistController wishlistController) /// /// Session/player id /// - public ItemEventRouterResponse AddToWishlist( - PmcData pmcData, - AddToWishlistRequest info, - MongoId sessionID - ) + public ItemEventRouterResponse AddToWishlist(PmcData pmcData, AddToWishlistRequest info, MongoId sessionID) { return wishlistController.AddToWishList(pmcData, info, sessionID); } @@ -33,11 +29,7 @@ public class WishlistCallbacks(WishlistController wishlistController) /// /// Session/player id /// - public ItemEventRouterResponse RemoveFromWishlist( - PmcData pmcData, - RemoveFromWishlistRequest info, - MongoId sessionID - ) + public ItemEventRouterResponse RemoveFromWishlist(PmcData pmcData, RemoveFromWishlistRequest info, MongoId sessionID) { return wishlistController.RemoveFromWishList(pmcData, info, sessionID); } @@ -49,11 +41,7 @@ public class WishlistCallbacks(WishlistController wishlistController) /// /// Session/player id /// - public ItemEventRouterResponse ChangeWishlistItemCategory( - PmcData pmcData, - ChangeWishlistItemCategoryRequest info, - MongoId sessionID - ) + public ItemEventRouterResponse ChangeWishlistItemCategory(PmcData pmcData, ChangeWishlistItemCategoryRequest info, MongoId sessionID) { return wishlistController.ChangeWishListItemCategory(pmcData, info, sessionID); } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/AchievementController.cs b/Libraries/SPTarkov.Server.Core/Controllers/AchievementController.cs index e4506e48..625fedb8 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/AchievementController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/AchievementController.cs @@ -9,11 +9,7 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Controllers; [Injectable] -public class AchievementController( - ProfileHelper profileHelper, - DatabaseService databaseService, - ConfigServer configServer -) +public class AchievementController(ProfileHelper profileHelper, DatabaseService databaseService, ConfigServer configServer) { protected readonly CoreConfig coreConfig = configServer.GetConfig(); @@ -37,11 +33,7 @@ public class AchievementController( var stats = new Dictionary(); var profiles = profileHelper .GetProfiles() - .Where(kvp => - !coreConfig.Features.AchievementProfileIdBlacklist.Contains( - kvp.Value.ProfileInfo.ProfileId - ) - ) + .Where(kvp => !coreConfig.Features.AchievementProfileIdBlacklist.Contains(kvp.Value.ProfileInfo.ProfileId)) .ToDictionary(); var achievements = databaseService.GetAchievements(); @@ -70,8 +62,7 @@ public class AchievementController( var percentage = 0; if (profiles.Count > 0) { - percentage = (int) - Math.Round((double)profilesHaveAchievement / profiles.Count * 100); + percentage = (int)Math.Round((double)profilesHaveAchievement / profiles.Count * 100); } stats.Add(achievementId, percentage); diff --git a/Libraries/SPTarkov.Server.Core/Controllers/BotController.cs b/Libraries/SPTarkov.Server.Core/Controllers/BotController.cs index 3a0100f6..85580647 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/BotController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/BotController.cs @@ -51,9 +51,7 @@ public class BotController( { if (!_botConfig.PresetBatch.TryGetValue(type, out var limit)) { - _logger.Warning( - _serverLocalisationService.GetText("bot-bot_preset_count_value_missing", type) - ); + _logger.Warning(_serverLocalisationService.GetText("bot-bot_preset_count_value_missing", type)); return 10; } @@ -80,38 +78,23 @@ public class BotController( /// difficulty level server requested settings for /// OPTIONAL - should raid settings chosen pre-raid be ignored /// Difficulty object - public DifficultyCategories GetBotDifficulty( - MongoId sessionId, - string type, - string diffLevel, - bool ignoreRaidSettings = false - ) + public DifficultyCategories GetBotDifficulty(MongoId sessionId, string type, string diffLevel, bool ignoreRaidSettings = false) { var difficulty = diffLevel.ToLowerInvariant(); - var raidConfig = _profileActivityService - .GetProfileActivityRaidData(sessionId) - .RaidConfiguration; + var raidConfig = _profileActivityService.GetProfileActivityRaidData(sessionId).RaidConfiguration; if (!(raidConfig != null || ignoreRaidSettings)) { - _logger.Error( - _serverLocalisationService.GetText( - "bot-missing_application_context", - "RAID_CONFIGURATION" - ) - ); + _logger.Error(_serverLocalisationService.GetText("bot-missing_application_context", "RAID_CONFIGURATION")); } // Check value chosen in pre-raid difficulty dropdown // If value is not 'asonline', change requested difficulty to be what was chosen in dropdown - var botDifficultyDropDownValue = - raidConfig?.WavesSettings?.BotDifficulty?.ToString().ToLowerInvariant() ?? "asonline"; + var botDifficultyDropDownValue = raidConfig?.WavesSettings?.BotDifficulty?.ToString().ToLowerInvariant() ?? "asonline"; if (botDifficultyDropDownValue != "asonline") { - difficulty = _botDifficultyHelper.ConvertBotDifficultyDropdownToBotDifficulty( - botDifficultyDropDownValue - ); + difficulty = _botDifficultyHelper.ConvertBotDifficultyDropdownToBotDifficulty(botDifficultyDropDownValue); } var botDb = _databaseService.GetBots(); @@ -147,9 +130,7 @@ public class BotController( result[botTypeLower] = result[Roles.Assault]; if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Unable to find bot: {botTypeLower} in db, copying: '{Roles.Assault}'" - ); + _logger.Debug($"Unable to find bot: {botTypeLower} in db, copying: '{Roles.Assault}'"); } continue; @@ -158,9 +139,7 @@ public class BotController( if (botDetails?.BotDifficulty is null) { // Bot has no difficulty values, skip - _logger.Warning( - $"Unable to find bot: {botTypeLower} difficulty values in db, skipping" - ); + _logger.Warning($"Unable to find bot: {botTypeLower} difficulty values in db, skipping"); continue; } @@ -174,11 +153,7 @@ public class BotController( } // Store all difficulty values in dict keyed by difficulty type e.g. easy/normal/hard/impossible - result[botNameKey] - .TryAdd( - difficultyName, - GetBotDifficulty(string.Empty, botNameKey, difficultyName, true) - ); + result[botNameKey].TryAdd(difficultyName, GetBotDifficulty(string.Empty, botNameKey, difficultyName, true)); } } @@ -205,17 +180,11 @@ public class BotController( /// Player generating bots /// Session/Player id /// List of generated bots - protected List GenerateBotWaves( - GenerateBotsRequestData request, - PmcData? pmcProfile, - MongoId sessionId - ) + protected List GenerateBotWaves(GenerateBotsRequestData request, PmcData? pmcProfile, MongoId sessionId) { var generatedBotList = new List(); var raidSettings = GetMostRecentRaidSettings(sessionId); - var allPmcsHaveSameNameAsPlayer = _randomUtil.GetChance100( - _pmcConfig.AllPMCsHavePlayerNameWithRandomPrefixChance - ); + var allPmcsHaveSameNameAsPlayer = _randomUtil.GetChance100(_pmcConfig.AllPMCsHavePlayerNameWithRandomPrefixChance); var stopwatch = Stopwatch.StartNew(); // Map conditions to promises for bot generation @@ -232,12 +201,7 @@ public class BotController( raidSettings ); - GenerateBotWave( - condition, - botWaveGenerationDetails, - generatedBotList, - sessionId - ); + GenerateBotWave(condition, botWaveGenerationDetails, generatedBotList, sessionId); }) ) .ToArray() @@ -247,9 +211,7 @@ public class BotController( if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Took {stopwatch.ElapsedMilliseconds}ms to GenerateMultipleBotsAndCache()" - ); + _logger.Debug($"Took {stopwatch.ElapsedMilliseconds}ms to GenerateMultipleBotsAndCache()"); } return generatedBotList; @@ -270,17 +232,12 @@ public class BotController( MongoId sessionId ) { - var isEventBot = generateRequest.Role?.Contains( - "event", - StringComparison.OrdinalIgnoreCase - ); + var isEventBot = generateRequest.Role?.Contains("event", StringComparison.OrdinalIgnoreCase); if (isEventBot.GetValueOrDefault(false)) { // Add eventRole data + reassign role property to be base type botGenerationDetails.EventRole = generateRequest.Role; - botGenerationDetails.Role = _seasonalEventService.GetBaseRoleForEventBot( - botGenerationDetails.EventRole - ); + botGenerationDetails.Role = _seasonalEventService.GetBaseRoleForEventBot(botGenerationDetails.EventRole); } var role = botGenerationDetails.EventRole ?? botGenerationDetails.Role; @@ -308,16 +265,11 @@ public class BotController( try { - bot = _botGenerator.PrepareAndGenerateBot( - sessionId, - _cloner.Clone(botGenerationDetails) - ); + bot = _botGenerator.PrepareAndGenerateBot(sessionId, _cloner.Clone(botGenerationDetails)); } catch (Exception e) { - _logger.Error( - $"Failed to generate bot: {botGenerationDetails.Role} #{i + 1}: {e.Message} {e.StackTrace}" - ); + _logger.Error($"Failed to generate bot: {botGenerationDetails.Role} #{i + 1}: {e.Message} {e.StackTrace}"); return; } @@ -353,17 +305,11 @@ public class BotController( /// GetRaidConfigurationRequestData if it exists protected GetRaidConfigurationRequestData? GetMostRecentRaidSettings(MongoId sessionId) { - var raidConfiguration = _profileActivityService - .GetProfileActivityRaidData(sessionId) - ?.RaidConfiguration; + var raidConfiguration = _profileActivityService.GetProfileActivityRaidData(sessionId)?.RaidConfiguration; if (raidConfiguration is null) { - _logger.Warning( - _serverLocalisationService.GetText( - "bot-unable_to_load_raid_settings_from_appcontext" - ) - ); + _logger.Warning(_serverLocalisationService.GetText("bot-unable_to_load_raid_settings_from_appcontext")); } return raidConfiguration; @@ -376,10 +322,7 @@ public class BotController( /// MinMax values protected MinMax GetPmcLevelRangeForMap(string? location) { - return _pmcConfig.LocationSpecificPmcLevelOverride!.GetValueOrDefault( - location?.ToLowerInvariant() ?? "", - null - ); + return _pmcConfig.LocationSpecificPmcLevelOverride!.GetValueOrDefault(location?.ToLowerInvariant() ?? "", null); } /// @@ -402,18 +345,13 @@ public class BotController( return new BotGenerationDetails { IsPmc = generateAsPmc, - Side = generateAsPmc - ? _botHelper.GetPmcSideByRole(condition.Role ?? string.Empty) - : "Savage", + Side = generateAsPmc ? _botHelper.GetPmcSideByRole(condition.Role ?? string.Empty) : "Savage", Role = condition.Role, PlayerLevel = pmcProfile?.Info?.Level ?? 1, PlayerName = pmcProfile?.Info?.Nickname, BotRelativeLevelDeltaMax = _pmcConfig.BotRelativeLevelDeltaMax, BotRelativeLevelDeltaMin = _pmcConfig.BotRelativeLevelDeltaMin, - BotCountToGenerate = Math.Max( - GetBotPresetGenerationLimit(condition.Role), - condition.Limit - ), // Choose largest between value passed in from request vs what's in bot.config + BotCountToGenerate = Math.Max(GetBotPresetGenerationLimit(condition.Role), condition.Limit), // Choose largest between value passed in from request vs what's in bot.config BotDifficulty = condition.Difficulty, LocationSpecificPmcLevelOverride = GetPmcLevelRangeForMap(raidSettings?.Location), // Min/max levels for PMCs to generate within IsPlayerScav = false, @@ -437,12 +375,7 @@ public class BotController( if (location == "default") { - _logger.Warning( - _serverLocalisationService.GetText( - "bot-no_bot_cap_found_for_location", - location.ToLowerInvariant() - ) - ); + _logger.Warning(_serverLocalisationService.GetText("bot-no_bot_cap_found_for_location", location.ToLowerInvariant())); } return maxCap; diff --git a/Libraries/SPTarkov.Server.Core/Controllers/BuildController.cs b/Libraries/SPTarkov.Server.Core/Controllers/BuildController.cs index 688b595f..d5474e87 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/BuildController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/BuildController.cs @@ -41,32 +41,24 @@ public class BuildController( }; // Ensure the secure container in the default presets match what the player has equipped - var defaultEquipmentPresetsClone = cloner - .Clone(databaseService.GetTemplates().DefaultEquipmentPresets) - .ToList(); + var defaultEquipmentPresetsClone = cloner.Clone(databaseService.GetTemplates().DefaultEquipmentPresets).ToList(); // Get players secure container - var playerSecureContainer = - profile.CharacterData?.PmcData?.Inventory?.Items?.FirstOrDefault(x => - x.SlotId == secureContainerSlotId - ); + var playerSecureContainer = profile.CharacterData?.PmcData?.Inventory?.Items?.FirstOrDefault(x => + x.SlotId == secureContainerSlotId + ); var firstDefaultItemsSecureContainer = defaultEquipmentPresetsClone .FirstOrDefault() ?.Items?.FirstOrDefault(x => x.SlotId == secureContainerSlotId); - if ( - playerSecureContainer is not null - && playerSecureContainer.Template != firstDefaultItemsSecureContainer?.Template - ) + if (playerSecureContainer is not null && playerSecureContainer.Template != firstDefaultItemsSecureContainer?.Template) // Default equipment presets' secure container tpl doesn't match players secure container tpl { foreach (var defaultPreset in defaultEquipmentPresetsClone) { // Find presets secure container - var secureContainer = defaultPreset.Items?.FirstOrDefault(item => - item.SlotId == secureContainerSlotId - ); + var secureContainer = defaultPreset.Items?.FirstOrDefault(item => item.SlotId == secureContainerSlotId); if (secureContainer is not null) { secureContainer.Template = playerSecureContainer.Template; @@ -133,9 +125,7 @@ public class BuildController( var profile = profileHelper.GetFullProfile(sessionID); var pmcData = profile.CharacterData.PmcData; - var existingSavedEquipmentBuilds = saveServer - .GetProfile(sessionID) - .UserBuildData.EquipmentBuilds; + var existingSavedEquipmentBuilds = saveServer.GetProfile(sessionID).UserBuildData.EquipmentBuilds; // Replace duplicate ID's. The first item is the base item. // Root ID and the base item ID need to match. @@ -150,9 +140,7 @@ public class BuildController( Items = request.Items.ToList(), }; - var existingBuild = existingSavedEquipmentBuilds?.FirstOrDefault(build => - build.Name == request.Name || build.Id == request.Id - ); + var existingBuild = existingSavedEquipmentBuilds?.FirstOrDefault(build => build.Name == request.Name || build.Id == request.Id); if (existingBuild is not null) { // Already exists, replace @@ -198,9 +186,7 @@ public class BuildController( profile.UserBuildData.MagazineBuilds ??= []; // Check if template with desired name already exists and remove it - var magazineBuildToRemove = profile.UserBuildData.MagazineBuilds.FirstOrDefault(item => - item.Name == request.Name - ); + var magazineBuildToRemove = profile.UserBuildData.MagazineBuilds.FirstOrDefault(item => item.Name == request.Name); if (magazineBuildToRemove is not null) { profile.UserBuildData.MagazineBuilds.Remove(magazineBuildToRemove); @@ -224,9 +210,7 @@ public class BuildController( var magazineBuilds = profile.UserBuildData.MagazineBuilds; // Check for id in weapon array first - var matchingWeaponBuild = weaponBuilds.FirstOrDefault(weaponBuild => - weaponBuild.Id == idToRemove - ); + var matchingWeaponBuild = weaponBuilds.FirstOrDefault(weaponBuild => weaponBuild.Id == idToRemove); if (matchingWeaponBuild is not null) { weaponBuilds.Remove(matchingWeaponBuild); @@ -235,9 +219,7 @@ public class BuildController( } // Id not found in weapons, try equipment - var matchingEquipmentBuild = equipmentBuilds.FirstOrDefault(equipmentBuild => - equipmentBuild.Id == idToRemove - ); + var matchingEquipmentBuild = equipmentBuilds.FirstOrDefault(equipmentBuild => equipmentBuild.Id == idToRemove); if (matchingEquipmentBuild is not null) { equipmentBuilds.Remove(matchingEquipmentBuild); @@ -246,9 +228,7 @@ public class BuildController( } // Id not found in weapons/equipment, try mags - var matchingMagazineBuild = magazineBuilds.FirstOrDefault(magBuild => - magBuild.Id == idToRemove - ); + var matchingMagazineBuild = magazineBuilds.FirstOrDefault(magBuild => magBuild.Id == idToRemove); if (matchingMagazineBuild is not null) { magazineBuilds.Remove(matchingMagazineBuild); @@ -257,8 +237,6 @@ public class BuildController( } // Not found in weapons,equipment or magazines, not good - logger.Error( - serverLocalisationService.GetText("build-unable_to_delete_preset", idToRemove) - ); + logger.Error(serverLocalisationService.GetText("build-unable_to_delete_preset", idToRemove)); } } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/CustomizationController.cs b/Libraries/SPTarkov.Server.Core/Controllers/CustomizationController.cs index 85bcbfff..b1d30ec3 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/CustomizationController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/CustomizationController.cs @@ -42,18 +42,12 @@ public class CustomizationController( var matchingSuits = suits?.Where(s => clothing.ContainsKey(s.SuiteId)); matchingSuits = matchingSuits?.Where(s => - clothing[s.SuiteId]?.Properties?.Side?.Contains(pmcData?.Info?.Side ?? string.Empty) - ?? false + clothing[s.SuiteId]?.Properties?.Side?.Contains(pmcData?.Info?.Side ?? string.Empty) ?? false ); if (matchingSuits == null) { - throw new Exception( - serverLocalisationService.GetText( - "customisation-unable_to_get_trader_suits", - traderId - ) - ); + throw new Exception(serverLocalisationService.GetText("customisation-unable_to_get_trader_suits", traderId)); } return matchingSuits.ToList(); @@ -67,23 +61,14 @@ public class CustomizationController( /// Request object /// Session id /// ItemEventRouterResponse - public ItemEventRouterResponse BuyCustomisation( - PmcData pmcData, - BuyClothingRequestData buyClothingRequest, - MongoId sessionId - ) + public ItemEventRouterResponse BuyCustomisation(PmcData pmcData, BuyClothingRequestData buyClothingRequest, MongoId sessionId) { var output = eventOutputHolder.GetOutput(sessionId); var traderOffer = GetTraderClothingOffer(sessionId, buyClothingRequest.Offer); if (traderOffer is null) { - logger.Error( - serverLocalisationService.GetText( - "customisation-unable_to_find_suit_by_id", - buyClothingRequest.Offer - ) - ); + logger.Error(serverLocalisationService.GetText("customisation-unable_to_find_suit_by_id", buyClothingRequest.Offer)); return output; } @@ -130,9 +115,7 @@ public class CustomizationController( var fullProfile = profileHelper.GetFullProfile(sessionId); // Check if clothing can be found by id - return fullProfile.CustomisationUnlocks.Exists(customisation => - Equals(customisation.Id, suitId) - ); + return fullProfile.CustomisationUnlocks.Exists(customisation => Equals(customisation.Id, suitId)); } /// @@ -146,12 +129,7 @@ public class CustomizationController( var foundSuit = GetAllTraderSuits(sessionId).FirstOrDefault(s => s.Id == offerId); if (foundSuit is null) { - logger.Error( - serverLocalisationService.GetText( - "customisation-unable_to_find_suit_with_id", - offerId - ) - ); + logger.Error(serverLocalisationService.GetText("customisation-unable_to_find_suit_with_id", offerId)); } return foundSuit; @@ -180,14 +158,7 @@ public class CustomizationController( { var options = new ProcessBuyTradeRequestData { - SchemeItems = - [ - new IdWithCount - { - Count = inventoryItemToProcess.Count.Value, - Id = inventoryItemToProcess.Id, - }, - ], + SchemeItems = [new IdWithCount { Count = inventoryItemToProcess.Count.Value, Id = inventoryItemToProcess.Id }], TransactionId = Traders.RAGMAN, Action = "BuyCustomization", Type = "", @@ -212,10 +183,7 @@ public class CustomizationController( foreach (var (traderId, trader) in traders) { - if ( - trader.Base?.CustomizationSeller is not null - && trader.Base.CustomizationSeller.Value - ) + if (trader.Base?.CustomizationSeller is not null && trader.Base.CustomizationSeller.Value) { result.AddRange(GetTraderSuits(traderId, sessionId)); } @@ -241,9 +209,7 @@ public class CustomizationController( /// public List GetCustomisationStorage(MongoId sessionId) { - var customisationResultsClone = cloner.Clone( - databaseService.GetTemplates().CustomisationStorage - ); + var customisationResultsClone = cloner.Clone(databaseService.GetTemplates().CustomisationStorage); var profile = profileHelper.GetFullProfile(sessionId); if (profile is null) @@ -263,11 +229,7 @@ public class CustomizationController( /// /// Players PMC profile /// ItemEventRouterResponse - public ItemEventRouterResponse SetCustomisation( - MongoId sessionId, - CustomizationSetRequest request, - PmcData pmcData - ) + public ItemEventRouterResponse SetCustomisation(MongoId sessionId, CustomizationSetRequest request, PmcData pmcData) { foreach (var customisation in request.Customizations) { diff --git a/Libraries/SPTarkov.Server.Core/Controllers/DialogueController.cs b/Libraries/SPTarkov.Server.Core/Controllers/DialogueController.cs index 08e696d7..997b32d6 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/DialogueController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/DialogueController.cs @@ -38,12 +38,7 @@ public class DialogueController( { if (_dialogueChatBots.Any(cb => cb.GetChatBot().Id == chatBot.GetChatBot().Id)) { - logger.Error( - serverLocalisationService.GetText( - "dialog-chatbot_id_already_exists", - chatBot.GetChatBot().Id - ) - ); + logger.Error(serverLocalisationService.GetText("dialog-chatbot_id_already_exists", chatBot.GetChatBot().Id)); } _dialogueChatBots.Add(chatBot); @@ -190,11 +185,7 @@ public class DialogueController( /// What type of message is being sent /// Player id /// UserDialogInfo list - public virtual List GetDialogueUsers( - Dialogue? dialog, - MessageType? messageType, - MongoId sessionId - ) + public virtual List GetDialogueUsers(Dialogue? dialog, MessageType? messageType, MongoId sessionId) { var profile = saveServer.GetProfile(sessionId); @@ -202,9 +193,7 @@ public class DialogueController( if ( messageType == MessageType.UserMessage && dialog?.Users is not null - && dialog.Users.All(userDialog => - userDialog.Id != profile.CharacterData?.PmcData?.SessionId - ) + && dialog.Users.All(userDialog => userDialog.Id != profile.CharacterData?.PmcData?.SessionId) ) { dialog.Users.Add( @@ -218,11 +207,7 @@ public class DialogueController( Nickname = profile.CharacterData?.PmcData?.Info?.Nickname, Side = profile.CharacterData?.PmcData?.Info?.Side, MemberCategory = profile.CharacterData?.PmcData?.Info?.MemberCategory, - SelectedMemberCategory = profile - .CharacterData - ?.PmcData - ?.Info - ?.SelectedMemberCategory, + SelectedMemberCategory = profile.CharacterData?.PmcData?.Info?.SelectedMemberCategory, }, } ); @@ -240,10 +225,7 @@ public class DialogueController( /// Get dialog request /// Session id /// GetMailDialogViewResponseData object - public virtual GetMailDialogViewResponseData GenerateDialogueView( - GetMailDialogViewRequestData request, - MongoId sessionId - ) + public virtual GetMailDialogViewResponseData GenerateDialogueView(GetMailDialogViewRequestData request, MongoId sessionId) { var dialogueId = request.DialogId; var fullProfile = saveServer.GetProfile(sessionId); @@ -279,18 +261,11 @@ public class DialogueController( /// Player profile /// get dialog request /// Dialogue - protected Dialogue GetDialogByIdFromProfile( - SptProfile profile, - GetMailDialogViewRequestData request - ) + protected Dialogue GetDialogByIdFromProfile(SptProfile profile, GetMailDialogViewRequestData request) { - if ( - profile.DialogueRecords is null - || profile.DialogueRecords.ContainsKey(request.DialogId!) - ) + if (profile.DialogueRecords is null || profile.DialogueRecords.ContainsKey(request.DialogId!)) { - return profile.DialogueRecords?[request.DialogId!] - ?? throw new NullReferenceException(); + return profile.DialogueRecords?[request.DialogId!] ?? throw new NullReferenceException(); } profile.DialogueRecords[request.DialogId!] = new Dialogue @@ -310,9 +285,7 @@ public class DialogueController( var dialogue = profile.DialogueRecords[request.DialogId!]; dialogue.Users = []; - var chatBot = _dialogueChatBots.FirstOrDefault(cb => - cb.GetChatBot().Id == request.DialogId - ); + var chatBot = _dialogueChatBots.FirstOrDefault(cb => cb.GetChatBot().Id == request.DialogId); if (chatBot is null) { @@ -331,10 +304,7 @@ public class DialogueController( /// Player profile /// The participants of the mail /// UserDialogInfo list - protected List GetProfilesForMail( - SptProfile fullProfile, - List? userDialogs - ) + protected List GetProfilesForMail(SptProfile fullProfile, List? userDialogs) { List result = []; if (userDialogs is null) @@ -383,10 +353,7 @@ public class DialogueController( var activeMessages = GetActiveMessagesFromDialog(sessionId, dialogueId); foreach (var message in activeMessages) { - if ( - message.HasRewards.GetValueOrDefault(false) - && !message.RewardCollected.GetValueOrDefault(false) - ) + if (message.HasRewards.GetValueOrDefault(false) && !message.RewardCollected.GetValueOrDefault(false)) { newAttachmentCount++; } @@ -436,12 +403,7 @@ public class DialogueController( var profile = saveServer.GetProfile(sessionId); if (!profile.DialogueRecords.Remove(dialogueId)) { - logger.Error( - serverLocalisationService.GetText( - "dialogue-unable_to_find_in_profile", - new { sessionId, dialogueId } - ) - ); + logger.Error(serverLocalisationService.GetText("dialogue-unable_to_find_in_profile", new { sessionId, dialogueId })); } } @@ -456,12 +418,7 @@ public class DialogueController( var dialog = dialogueHelper.GetDialogsForProfile(sessionId).GetValueOrDefault(dialogueId); if (dialog is null) { - logger.Error( - serverLocalisationService.GetText( - "dialogue-unable_to_find_in_profile", - new { sessionId, dialogueId } - ) - ); + logger.Error(serverLocalisationService.GetText("dialogue-unable_to_find_in_profile", new { sessionId, dialogueId })); return; } @@ -480,12 +437,7 @@ public class DialogueController( var dialogs = dialogueHelper.GetDialogsForProfile(sessionId); if (dialogs.Any() != true) { - logger.Error( - serverLocalisationService.GetText( - "dialogue-unable_to_find_dialogs_in_profile", - new { sessionId } - ) - ); + logger.Error(serverLocalisationService.GetText("dialogue-unable_to_find_dialogs_in_profile", new { sessionId })); return; } @@ -504,10 +456,7 @@ public class DialogueController( /// Dialog to get mail attachments from /// Session id /// GetAllAttachmentsResponse or null if dialogue doesn't exist - public virtual GetAllAttachmentsResponse? GetAllAttachments( - string dialogueId, - MongoId sessionId - ) + public virtual GetAllAttachmentsResponse? GetAllAttachments(string dialogueId, MongoId sessionId) { var dialogs = dialogueHelper.GetDialogsForProfile(sessionId); var dialog = dialogs.TryGetValue(dialogueId, out var dialogInfo); @@ -538,16 +487,11 @@ public class DialogueController( /// Session/Player id /// /// - public virtual async ValueTask SendMessage( - MongoId sessionId, - SendMessageRequest request - ) + public virtual async ValueTask SendMessage(MongoId sessionId, SendMessageRequest request) { mailSendService.SendPlayerMessageToNpc(sessionId, request.DialogId, request.Text); - var chatBot = _dialogueChatBots.FirstOrDefault(cb => - cb.GetChatBot().Id == request.DialogId - ); + var chatBot = _dialogueChatBots.FirstOrDefault(cb => cb.GetChatBot().Id == request.DialogId); if (chatBot is not null) { @@ -619,10 +563,7 @@ public class DialogueController( /// Session/player id /// Sent friend request /// - public virtual FriendRequestSendResponse SendFriendRequest( - MongoId sessionID, - FriendRequestData request - ) + public virtual FriendRequestSendResponse SendFriendRequest(MongoId sessionID, FriendRequestData request) { // To avoid needing to jump between profiles, auto-accept all friend requests var friendProfile = profileHelper.GetFullProfile(request.To.Value); @@ -647,9 +588,7 @@ public class DialogueController( var notification = new WsFriendsListAccept { EventType = NotificationEventType.friendListRequestAccept, - Profile = profileHelper.GetChatRoomMemberFromPmcProfile( - friendProfile.CharacterData.PmcData - ), + Profile = profileHelper.GetChatRoomMemberFromPmcProfile(friendProfile.CharacterData.PmcData), }; notificationSendHelper.SendMessage(sessionID, notification); }, @@ -687,9 +626,7 @@ public class DialogueController( var profile = saveServer.GetProfile(sessionId); if (!profile.DialogueRecords.TryGetValue(request.DialogId, out var dialogToClear)) { - logger.Warning( - $"unable to clear messages from dialog: {request.DialogId} as it cannot be found in profile: {sessionId}" - ); + logger.Warning($"unable to clear messages from dialog: {request.DialogId} as it cannot be found in profile: {sessionId}"); return; } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/GameController.cs b/Libraries/SPTarkov.Server.Core/Controllers/GameController.cs index aa8d6f47..28f15055 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/GameController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/GameController.cs @@ -77,14 +77,8 @@ public class GameController( return; } - fullProfile.CharacterData!.PmcData!.WishList ??= new DictionaryOrList( - new Dictionary(), - [] - ); - fullProfile.CharacterData.ScavData!.WishList ??= new DictionaryOrList( - new Dictionary(), - [] - ); + fullProfile.CharacterData!.PmcData!.WishList ??= new DictionaryOrList(new Dictionary(), []); + fullProfile.CharacterData.ScavData!.WishList ??= new DictionaryOrList(new Dictionary(), []); if (fullProfile.DialogueRecords is not null) { @@ -93,9 +87,7 @@ public class GameController( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Started game with session {sessionId} {fullProfile.ProfileInfo?.Username}" - ); + logger.Debug($"Started game with session {sessionId} {fullProfile.ProfileInfo?.Username}"); } var pmcProfile = fullProfile.CharacterData.PmcData; @@ -122,20 +114,12 @@ public class GameController( if (pmcProfile.Hideout is not null) { - profileFixerService.AddMissingHideoutBonusesToProfile( - pmcProfile, - databaseService.GetHideout().Areas - ); + profileFixerService.AddMissingHideoutBonusesToProfile(pmcProfile, databaseService.GetHideout().Areas); hideoutHelper.SetHideoutImprovementsToCompleted(pmcProfile); pmcProfile.UnlockHideoutWallInProfile(); // Handle if player has been inactive for a long time, catch up on hideout update before the user goes to his hideout - if ( - !profileActivityService.ActiveWithinLastMinutes( - sessionId, - _hideoutConfig.UpdateProfileHideoutWhenActiveWithinMinutes - ) - ) + if (!profileActivityService.ActiveWithinLastMinutes(sessionId, _hideoutConfig.UpdateProfileHideoutWhenActiveWithinMinutes)) { hideoutHelper.UpdatePlayerHideout(sessionId); } @@ -170,11 +154,8 @@ public class GameController( { var profile = profileHelper.GetPmcProfile(sessionId); var gameTime = - profile - ?.Stats?.Eft?.OverallCounters?.Items?.FirstOrDefault(c => - c.Key!.Contains("LifeTime") && c.Key.Contains("Pmc") - ) - ?.Value ?? 0D; + profile?.Stats?.Eft?.OverallCounters?.Items?.FirstOrDefault(c => c.Key!.Contains("LifeTime") && c.Key.Contains("Pmc"))?.Value + ?? 0D; var config = new GameConfigResponse { @@ -213,11 +194,7 @@ public class GameController( /// public GameModeResponse GetGameMode(MongoId sessionId, GameModeRequestData requestData) { - return new GameModeResponse - { - GameMode = "pve", - BackendUrl = httpServerHelper.GetBackendUrl(), - }; + return new GameModeResponse { GameMode = "pve", BackendUrl = httpServerHelper.GetBackendUrl() }; } /// @@ -247,11 +224,7 @@ public class GameController( /// public CheckVersionResponse GetValidGameVersion(MongoId sessionId) { - return new CheckVersionResponse - { - IsValid = true, - LatestVersion = _coreConfig.CompatibleTarkovVersion, - }; + return new CheckVersionResponse { IsValid = true, LatestVersion = _coreConfig.CompatibleTarkovVersion }; } /// @@ -294,9 +267,7 @@ public class GameController( var botReloadSkill = pmcProfile.GetSkillFromProfile(SkillTypes.BotReload); if (botReloadSkill?.Progress > 0) { - logger.Warning( - serverLocalisationService.GetText("server_start_player_active_botreload_skill") - ); + logger.Warning(serverLocalisationService.GetText("server_start_player_active_botreload_skill")); } } @@ -338,9 +309,7 @@ public class GameController( if (pmcProfile.Health?.Energy?.Current - pmcProfile.Health?.Energy?.Maximum <= _deviation) { // Set new value, whatever is smallest - pmcProfile.Health!.Energy!.Current += Math.Round( - energyRegenPerHour * (diffSeconds!.Value / 3600) - ); + pmcProfile.Health!.Energy!.Current += Math.Round(energyRegenPerHour * (diffSeconds!.Value / 3600)); if (pmcProfile.Health.Energy.Current > pmcProfile.Health.Energy.Maximum) { pmcProfile.Health.Energy.Current = pmcProfile.Health.Energy.Maximum; @@ -348,14 +317,9 @@ public class GameController( } // Player has hydration deficit - if ( - pmcProfile.Health?.Hydration?.Current - pmcProfile.Health?.Hydration?.Maximum - <= _deviation - ) + if (pmcProfile.Health?.Hydration?.Current - pmcProfile.Health?.Hydration?.Maximum <= _deviation) { - pmcProfile.Health!.Hydration!.Current += Math.Round( - hydrationRegenPerHour * (diffSeconds!.Value / 3600) - ); + pmcProfile.Health!.Hydration!.Current += Math.Round(hydrationRegenPerHour * (diffSeconds!.Value / 3600)); if (pmcProfile.Health.Hydration.Current > pmcProfile.Health.Hydration.Maximum) { pmcProfile.Health.Hydration.Current = pmcProfile.Health.Hydration.Maximum; @@ -375,15 +339,9 @@ public class GameController( /// Player /// /// - protected void DecreaseBodyPartEffectTimes( - PmcData pmcProfile, - double hpRegenPerHour, - double diffSeconds - ) + protected void DecreaseBodyPartEffectTimes(PmcData pmcProfile, double hpRegenPerHour, double diffSeconds) { - foreach ( - var bodyPart in pmcProfile.Health!.BodyParts!.Select(bodyPartKvP => bodyPartKvP.Value) - ) + foreach (var bodyPart in pmcProfile.Health!.BodyParts!.Select(bodyPartKvP => bodyPartKvP.Value)) { // Check part hp if (bodyPart.Health!.Current < bodyPart.Health.Maximum) @@ -456,11 +414,7 @@ public class GameController( /// protected void SendMechanicGiftsToNewProfile(PmcData pmcProfile) { - giftService.SendGiftWithSilentReceivedCheck( - "MechanicGiftDay1", - pmcProfile.SessionId.Value, - 1 - ); + giftService.SendGiftWithSilentReceivedCheck("MechanicGiftDay1", pmcProfile.SessionId.Value, 1); } /// @@ -475,9 +429,7 @@ public class GameController( { if ( fullProfile.SptData.Mods.Any(m => - m.Author == mod.ModMetadata.Author - && m.Version == mod.ModMetadata.Version - && m.Name == mod.ModMetadata.Name + m.Author == mod.ModMetadata.Author && m.Version == mod.ModMetadata.Version && m.Name == mod.ModMetadata.Name ) ) { @@ -554,9 +506,7 @@ public class GameController( if (logger.IsLogEnabled(LogLevel.Debug)) { logger.Debug($"Profile made with: {fullProfile.SptData?.Version}"); - logger.Debug( - $"Server version: {ProgramStatics.SPT_VERSION() ?? _coreConfig.SptVersion} {ProgramStatics.COMMIT()}" - ); + logger.Debug($"Server version: {ProgramStatics.SPT_VERSION() ?? _coreConfig.SptVersion} {ProgramStatics.COMMIT()}"); logger.Debug($"Debug enabled: {ProgramStatics.DEBUG()}"); logger.Debug($"Mods enabled: {ProgramStatics.MODS()}"); } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs b/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs index e248fd57..6c007b1f 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/HealthController.cs @@ -34,24 +34,15 @@ public class HealthController( /// Healing request /// Player id /// ItemEventRouterResponse - public ItemEventRouterResponse OffRaidHeal( - PmcData pmcData, - OffraidHealRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse OffRaidHeal(PmcData pmcData, OffraidHealRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); // Update medkit used (hpresource) - var healingItemToUse = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == request.Item - ); + var healingItemToUse = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == request.Item); if (healingItemToUse is null) { - var errorMessage = serverLocalisationService.GetText( - "health-healing_item_not_found", - request.Item - ); + var errorMessage = serverLocalisationService.GetText("health-healing_item_not_found", request.Item); logger.Error(errorMessage); return httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -67,9 +58,7 @@ public class HealthController( else { // Get max healing from db - var maxHp = itemHelper - .GetItem(healingItemToUse.Template) - .Value.Properties.MaxHpResource; + var maxHp = itemHelper.GetItem(healingItemToUse.Template).Value.Properties.MaxHpResource; healingItemToUse.Upd.MedKit = new UpdMedKit { HpResource = maxHp - request.Count }; // Subtract amout used from max // request.count appears to take into account healing effects removed, e.g. bleeds // Salewa heals limb for 20 and fixes light bleed = (20+45 = 65) @@ -87,9 +76,7 @@ public class HealthController( var bodyPartToHeal = pmcData.Health.BodyParts.GetValueOrDefault(request.Part); if (bodyPartToHeal is null) { - logger.Warning( - $"Player: {sessionID} Tried to heal a non-existent body part: {request.Part}" - ); + logger.Warning($"Player: {sessionID} Tried to heal a non-existent body part: {request.Part}"); return output; } @@ -112,12 +99,7 @@ public class HealthController( } // Check if healing item removes the effect on limb - if ( - !healItemEffectDetails.TryGetValue( - effect, - out var matchingEffectFromHealingItem - ) - ) + if (!healItemEffectDetails.TryGetValue(effect, out var matchingEffectFromHealingItem)) // Healing item doesn't have matching effect, it doesn't remove the effect { continue; @@ -149,11 +131,7 @@ public class HealthController( /// Eat request /// Session id /// ItemEventRouterResponse - public ItemEventRouterResponse OffRaidEat( - PmcData pmcData, - OffraidEatRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse OffRaidEat(PmcData pmcData, OffraidEatRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); var resourceLeft = 0d; @@ -164,16 +142,11 @@ public class HealthController( { return httpResponseUtil.AppendErrorToOutput( output, - serverLocalisationService.GetText( - "health-unable_to_find_item_to_consume", - request.Item - ) + serverLocalisationService.GetText("health-unable_to_find_item_to_consume", request.Item) ); } - var consumedItemMaxResource = itemHelper - .GetItem(itemToConsume.Template) - .Value.Properties.MaxResource; + var consumedItemMaxResource = itemHelper.GetItem(itemToConsume.Template).Value.Properties.MaxResource; if (consumedItemMaxResource > 1) { // Ensure item has a upd object @@ -181,10 +154,7 @@ public class HealthController( if (itemToConsume.Upd.FoodDrink is null) { - itemToConsume.Upd.FoodDrink = new UpdFoodDrink - { - HpPercent = consumedItemMaxResource - request.Count, - }; + itemToConsume.Upd.FoodDrink = new UpdFoodDrink { HpPercent = consumedItemMaxResource - request.Count }; } else { @@ -210,21 +180,14 @@ public class HealthController( switch (key) { case HealthFactor.Hydration: - ApplyEdibleEffect( - pmcData.Health.Hydration, - effectProps, - foodIsSingleUse, - request - ); + ApplyEdibleEffect(pmcData.Health.Hydration, effectProps, foodIsSingleUse, request); break; case HealthFactor.Energy: ApplyEdibleEffect(pmcData.Health.Energy, effectProps, foodIsSingleUse, request); break; default: - logger.Warning( - $"Unhandled effect after consuming: {itemToConsume.Template}, {key}" - ); + logger.Warning($"Unhandled effect after consuming: {itemToConsume.Template}, {key}"); break; } } @@ -279,11 +242,7 @@ public class HealthController( /// Request data from client /// Session id /// - public ItemEventRouterResponse HealthTreatment( - PmcData pmcData, - HealthTreatmentRequestData healthTreatmentRequest, - MongoId sessionID - ) + public ItemEventRouterResponse HealthTreatment(PmcData pmcData, HealthTreatmentRequestData healthTreatmentRequest, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); var payMoneyRequest = new ProcessBuyTradeRequestData diff --git a/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs b/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs index 3cf1638c..f0df6ac1 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/HideoutController.cs @@ -44,9 +44,7 @@ public class HideoutController( ConfigServer configServer ) { - public static readonly MongoId NameTaskConditionCountersCraftingId = new( - "673f5d6fdd6ed700c703afdc" - ); + public static readonly MongoId NameTaskConditionCountersCraftingId = new("673f5d6fdd6ed700c703afdc"); protected readonly FrozenSet _areasWithResources = [ @@ -66,19 +64,12 @@ public class HideoutController( /// Start upgrade request /// Session/player id /// Client response - public void StartUpgrade( - PmcData pmcData, - HideoutUpgradeRequestData request, - MongoId sessionID, - ItemEventRouterResponse output - ) + public void StartUpgrade(PmcData pmcData, HideoutUpgradeRequestData request, MongoId sessionID, ItemEventRouterResponse output) { var items = request .Items.Select(reqItem => { - var item = pmcData.Inventory.Items.FirstOrDefault(invItem => - invItem.Id == reqItem.Id - ); + var item = pmcData.Inventory.Items.FirstOrDefault(invItem => invItem.Id == reqItem.Id); return new { inventoryItem = item, requestedItem = reqItem }; }) .ToList(); @@ -88,12 +79,7 @@ public class HideoutController( { if (item.inventoryItem is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_item_in_inventory", - item.requestedItem.Id - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_item_in_inventory", item.requestedItem.Id)); httpResponseUtil.AppendErrorToOutput(output); return; @@ -115,38 +101,25 @@ public class HideoutController( } // Construction time management - var profileHideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == request.AreaType - ); + var profileHideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == request.AreaType); if (profileHideoutArea is null) { - logger.Error( - serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType)); httpResponseUtil.AppendErrorToOutput(output); return; } - var hideoutDataDb = databaseService - .GetTables() - .Hideout.Areas.FirstOrDefault(area => area.Type == request.AreaType); + var hideoutDataDb = databaseService.GetTables().Hideout.Areas.FirstOrDefault(area => area.Type == request.AreaType); if (hideoutDataDb is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_area_in_database", - request.AreaType - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area_in_database", request.AreaType)); httpResponseUtil.AppendErrorToOutput(output); return; } - var ctime = hideoutDataDb - .Stages[(profileHideoutArea.Level + 1).ToString()] - .ConstructionTime; + var ctime = hideoutDataDb.Stages[(profileHideoutArea.Level + 1).ToString()].ConstructionTime; if (ctime > 0) { if (profileHelper.IsDeveloperAccount(sessionID)) @@ -179,14 +152,10 @@ public class HideoutController( var hideout = databaseService.GetHideout(); var globals = databaseService.GetGlobals(); - var profileHideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == request.AreaType - ); + var profileHideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == request.AreaType); if (profileHideoutArea is null) { - logger.Error( - serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType)); httpResponseUtil.AppendErrorToOutput(output); return; @@ -197,33 +166,19 @@ public class HideoutController( profileHideoutArea.CompleteTime = 0; profileHideoutArea.Constructing = false; - var hideoutData = hideout.Areas.FirstOrDefault(area => - area.Type == profileHideoutArea.Type - ); + var hideoutData = hideout.Areas.FirstOrDefault(area => area.Type == profileHideoutArea.Type); if (hideoutData is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_area_in_database", - request.AreaType - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area_in_database", request.AreaType)); httpResponseUtil.AppendErrorToOutput(output); return; } // Apply bonuses - if ( - !hideoutData.Stages.TryGetValue( - profileHideoutArea.Level.ToString(), - out var hideoutStage - ) - ) + if (!hideoutData.Stages.TryGetValue(profileHideoutArea.Level.ToString(), out var hideoutStage)) { - logger.Error( - $"Stage level: {profileHideoutArea.Level} not found for area: {request.AreaType}" - ); + logger.Error($"Stage level: {profileHideoutArea.Level} not found for area: {request.AreaType}"); return; } @@ -239,21 +194,11 @@ public class HideoutController( // Upgrade includes a container improvement/addition if (!string.IsNullOrEmpty(hideoutStage.Container)) { - AddContainerImprovementToProfile( - output, - sessionID, - pmcData, - profileHideoutArea, - hideoutData, - hideoutStage - ); + AddContainerImprovementToProfile(output, sessionID, pmcData, profileHideoutArea, hideoutData, hideoutStage); } // Upgrading water collector / med station - if ( - profileHideoutArea.Type == HideoutAreas.WaterCollector - || profileHideoutArea.Type == HideoutAreas.MedStation - ) + if (profileHideoutArea.Type == HideoutAreas.WaterCollector || profileHideoutArea.Type == HideoutAreas.MedStation) { SetWallVisibleIfPrereqsMet(pmcData); } @@ -278,17 +223,11 @@ public class HideoutController( /// Player profile protected void SetWallVisibleIfPrereqsMet(PmcData pmcData) { - var medStation = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.MedStation - ); - var waterCollector = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.WaterCollector - ); + var medStation = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.MedStation); + var waterCollector = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.WaterCollector); if (medStation?.Level >= 1 && waterCollector?.Level >= 1) { - var wall = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.EmergencyWall - ); + var wall = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.EmergencyWall); if (wall?.Level == 0) { wall.Level = 3; @@ -319,12 +258,7 @@ public class HideoutController( var keyForHideoutAreaStash = ((int)dbHideoutArea.Type).ToString(); if (!pmcData.Inventory.HideoutAreaStashes.ContainsKey(keyForHideoutAreaStash)) { - if ( - !pmcData.Inventory.HideoutAreaStashes.TryAdd( - keyForHideoutAreaStash, - dbHideoutArea.Id - ) - ) + if (!pmcData.Inventory.HideoutAreaStashes.TryAdd(keyForHideoutAreaStash, dbHideoutArea.Id)) { logger.Error($"Unable to add key: {dbHideoutArea.Type} to HideoutAreaStashes"); } @@ -337,27 +271,13 @@ public class HideoutController( if (dbHideoutArea.Type == HideoutAreas.EquipmentPresetsStand) // Can have multiple 'standx' children depending on upgrade level { - AddMissingPresetStandItemsToProfile( - sessionId, - hideoutStage, - pmcData, - dbHideoutArea, - output - ); + AddMissingPresetStandItemsToProfile(sessionId, hideoutStage, pmcData, dbHideoutArea, output); } - AddContainerUpgradeToClientOutput( - sessionId, - keyForHideoutAreaStash, - dbHideoutArea, - hideoutStage, - output - ); + AddContainerUpgradeToClientOutput(sessionId, keyForHideoutAreaStash, dbHideoutArea, hideoutStage, output); // Some hideout areas (Gun stand) have child areas linked to it - var childDbArea = databaseService - .GetHideout() - .Areas.FirstOrDefault(area => area.ParentArea == dbHideoutArea.Id); + var childDbArea = databaseService.GetHideout().Areas.FirstOrDefault(area => area.ParentArea == dbHideoutArea.Id); if (childDbArea is null) { // No child db area, we're complete @@ -372,23 +292,14 @@ public class HideoutController( } // Set child area level to same as parent area - pmcData - .Hideout.Areas.FirstOrDefault(hideoutArea => hideoutArea.Type == childDbArea.Type) - .Level = pmcData + pmcData.Hideout.Areas.FirstOrDefault(hideoutArea => hideoutArea.Type == childDbArea.Type).Level = pmcData .Hideout.Areas.FirstOrDefault(area => area.Type == profileParentHideoutArea.Type) .Level; // Add/upgrade stash item in player inventory - if ( - !childDbArea.Stages.TryGetValue( - profileParentHideoutArea.Level.ToString(), - out var childDbAreaStage - ) - ) + if (!childDbArea.Stages.TryGetValue(profileParentHideoutArea.Level.ToString(), out var childDbAreaStage)) { - logger.Error( - $"Unable to find stage: {profileParentHideoutArea.Level} of area: {dbHideoutArea.Id}" - ); + logger.Error($"Unable to find stage: {profileParentHideoutArea.Level} of area: {dbHideoutArea.Id}"); return; } @@ -396,13 +307,7 @@ public class HideoutController( AddUpdateInventoryItemToProfile(sessionId, pmcData, childDbArea, childDbAreaStage); // Inform client of the changes - AddContainerUpgradeToClientOutput( - sessionId, - childAreaTypeKey, - childDbArea, - childDbAreaStage, - output - ); + AddContainerUpgradeToClientOutput(sessionId, childAreaTypeKey, childDbArea, childDbAreaStage, output); } /// @@ -412,16 +317,9 @@ public class HideoutController( /// Players PMC profile /// Hideout area from db being upgraded /// Stage area upgraded to - protected void AddUpdateInventoryItemToProfile( - MongoId sessionId, - PmcData pmcData, - HideoutArea dbHideoutArea, - Stage hideoutStage - ) + protected void AddUpdateInventoryItemToProfile(MongoId sessionId, PmcData pmcData, HideoutArea dbHideoutArea, Stage hideoutStage) { - var existingInventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == dbHideoutArea.Id - ); + var existingInventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == dbHideoutArea.Id); if (existingInventoryItem is not null) { // Update existing items container tpl to point to new id (tpl) @@ -431,11 +329,7 @@ public class HideoutController( } // Add new item as none exists (don't inform client of newContainerItem, will be done in `profileChanges.changedHideoutStashes`) - var newContainerItem = new Item - { - Id = dbHideoutArea.Id, - Template = hideoutStage.Container.Value, - }; + var newContainerItem = new Item { Id = dbHideoutArea.Id, Template = hideoutStage.Container.Value }; pmcData.Inventory.Items.Add(newContainerItem); } @@ -456,12 +350,14 @@ public class HideoutController( ) { // Ensure ChangedHideoutStashes isn't null - output.ProfileChanges[sessionId].ChangedHideoutStashes ??= - new Dictionary(); + output.ProfileChanges[sessionId].ChangedHideoutStashes ??= new Dictionary(); // Inform client of changes - output.ProfileChanges[sessionId].ChangedHideoutStashes[changedHideoutStashesKey] = - new HideoutStashItem { Id = hideoutDbData.Id, Template = hideoutStage.Container }; + output.ProfileChanges[sessionId].ChangedHideoutStashes[changedHideoutStashesKey] = new HideoutStashItem + { + Id = hideoutDbData.Id, + Template = hideoutStage.Container, + }; } /// @@ -482,9 +378,7 @@ public class HideoutController( var itemsToAdd = addItemToHideoutRequest.Items.Select(kvp => { - var item = pmcData.Inventory.Items.FirstOrDefault(invItem => - invItem.Id == kvp.Value.Id - ); + var item = pmcData.Inventory.Items.FirstOrDefault(invItem => invItem.Id == kvp.Value.Id); return new { inventoryItem = item, @@ -493,17 +387,10 @@ public class HideoutController( }; }); - var hideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == addItemToHideoutRequest.AreaType - ); + var hideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == addItemToHideoutRequest.AreaType); if (hideoutArea is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_area_in_database", - addItemToHideoutRequest.AreaType - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area_in_database", addItemToHideoutRequest.AreaType)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -522,9 +409,7 @@ public class HideoutController( // Add item to area.slots var destinationLocationIndex = int.Parse(item.slot); - var hideoutSlotIndex = hideoutArea.Slots.FindIndex(slot => - slot.LocationIndex == destinationLocationIndex - ); + var hideoutSlotIndex = hideoutArea.Slots.FindIndex(slot => slot.LocationIndex == destinationLocationIndex); if (hideoutSlotIndex == -1) { logger.Error( @@ -560,33 +445,20 @@ public class HideoutController( /// Take item out of area request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse TakeItemsFromAreaSlots( - PmcData pmcData, - HideoutTakeItemOutRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse TakeItemsFromAreaSlots(PmcData pmcData, HideoutTakeItemOutRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); - var hideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == request.AreaType - ); + var hideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == request.AreaType); if (hideoutArea is null) { - logger.Error( - serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType)); return httpResponseUtil.AppendErrorToOutput(output); } if (hideoutArea.Slots is null || hideoutArea.Slots.Count == 0) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_item_to_remove_from_area", - hideoutArea.Type - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_item_to_remove_from_area", hideoutArea.Type)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -600,12 +472,7 @@ public class HideoutController( return response; } - throw new Exception( - serverLocalisationService.GetText( - "hideout-unhandled_remove_item_from_area_request", - hideoutArea.Type - ) - ); + throw new Exception(serverLocalisationService.GetText("hideout-unhandled_remove_item_from_area_request", hideoutArea.Type)); } /// @@ -636,9 +503,7 @@ public class HideoutController( } // Assume only one item in slot - var itemToReturn = hideoutArea - .Slots?.FirstOrDefault(slot => slot.LocationIndex == slotIndexToRemove) - ?.Items?.FirstOrDefault(); + var itemToReturn = hideoutArea.Slots?.FirstOrDefault(slot => slot.LocationIndex == slotIndexToRemove)?.Items?.FirstOrDefault(); if (itemToReturn is null) { logger.Error( @@ -665,9 +530,7 @@ public class HideoutController( } // Remove items from slot, keep locationIndex object - var hideoutSlotIndex = hideoutArea.Slots.FindIndex(slot => - slot.LocationIndex == slotIndexToRemove - ); + var hideoutSlotIndex = hideoutArea.Slots.FindIndex(slot => slot.LocationIndex == slotIndexToRemove); hideoutArea.Slots[hideoutSlotIndex].Items = null; return output; @@ -681,25 +544,17 @@ public class HideoutController( /// Toggle area request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse ToggleArea( - PmcData pmcData, - HideoutToggleAreaRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ToggleArea(PmcData pmcData, HideoutToggleAreaRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); // Force a production update (occur before area is toggled as it could be generator and doing it after generator enabled would cause incorrect calculaton of production progress) hideoutHelper.UpdatePlayerHideout(sessionID); - var hideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == request.AreaType - ); + var hideoutArea = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == request.AreaType); if (hideoutArea is null) { - logger.Error( - serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -725,14 +580,10 @@ public class HideoutController( hideoutHelper.RegisterProduction(pmcData, request, sessionID); // Find the recipe of the production - var recipe = databaseService - .GetHideout() - .Production.Recipes.FirstOrDefault(production => production.Id == request.RecipeId); + var recipe = databaseService.GetHideout().Production.Recipes.FirstOrDefault(production => production.Id == request.RecipeId); // Find the actual amount of items we need to remove because body can send weird data - var recipeRequirementsClone = cloner.Clone( - recipe.Requirements.Where(r => r.Type == "Item" || r.Type == "Tool") - ); + var recipeRequirementsClone = cloner.Clone(recipe.Requirements.Where(r => r.Type == "Item" || r.Type == "Tool")); List itemsToDelete = []; var output = eventOutputHolder.GetOutput(sessionID); @@ -742,9 +593,7 @@ public class HideoutController( foreach (var itemToDelete in itemsToDelete) { var itemToCheck = pmcData.Inventory.Items.FirstOrDefault(i => i.Id == itemToDelete.Id); - var requirement = recipeRequirementsClone.FirstOrDefault(requirement => - requirement.TemplateId == itemToCheck.Template - ); + var requirement = recipeRequirementsClone.FirstOrDefault(requirement => requirement.TemplateId == itemToCheck.Template); // Handle tools not having a `count`, but always only requiring 1 var requiredCount = requirement.Count ?? 1; @@ -753,13 +602,7 @@ public class HideoutController( continue; } - inventoryHelper.RemoveItemByCount( - pmcData, - itemToDelete.Id, - requiredCount, - sessionID, - output - ); + inventoryHelper.RemoveItemByCount(pmcData, itemToDelete.Id, requiredCount, sessionID, output); // Tools don't have a count if (requirement.Type != "Tool") @@ -779,19 +622,13 @@ public class HideoutController( /// /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse ScavCaseProductionStart( - PmcData pmcData, - HideoutScavCaseStartRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ScavCaseProductionStart(PmcData pmcData, HideoutScavCaseStartRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); foreach (var requestedItem in request.Items) { - var inventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == requestedItem.Id - ); + var inventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == requestedItem.Id); if (inventoryItem is null) { logger.Error( @@ -803,10 +640,7 @@ public class HideoutController( return httpResponseUtil.AppendErrorToOutput(output); } - if ( - inventoryItem.Upd?.StackObjectsCount is not null - && inventoryItem.Upd.StackObjectsCount > requestedItem.Count - ) + if (inventoryItem.Upd?.StackObjectsCount is not null && inventoryItem.Upd.StackObjectsCount > requestedItem.Count) { inventoryItem.Upd.StackObjectsCount -= requestedItem.Count; } @@ -816,17 +650,10 @@ public class HideoutController( } } - var recipe = databaseService - .GetHideout() - .Production?.ScavRecipes?.FirstOrDefault(r => r.Id == request.RecipeId); + var recipe = databaseService.GetHideout().Production?.ScavRecipes?.FirstOrDefault(r => r.Id == request.RecipeId); if (recipe is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_scav_case_recipie_in_database", - request.RecipeId - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_scav_case_recipie_in_database", request.RecipeId)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -840,9 +667,7 @@ public class HideoutController( pmcData, recipe.ProductionTime ?? 0, SkillTypes.Crafting, - databaseService - .GetGlobals() - .Configuration.SkillsSettings.Crafting.CraftTimeReductionPerLevel + databaseService.GetGlobals().Configuration.SkillsSettings.Crafting.CraftTimeReductionPerLevel ); var modifiedScavCaseTime = GetScavCaseTime(pmcData, adjustedCraftTime); @@ -900,11 +725,7 @@ public class HideoutController( /// Remove production from area request /// Session/Player id /// - public ItemEventRouterResponse TakeProduction( - PmcData pmcData, - HideoutTakeProductionRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse TakeProduction(PmcData pmcData, HideoutTakeProductionRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); var hideoutDb = databaseService.GetHideout(); @@ -926,9 +747,7 @@ public class HideoutController( return output; } - var scavCase = hideoutDb.Production.ScavRecipes.FirstOrDefault(r => - r.Id == request.RecipeId - ); + var scavCase = hideoutDb.Production.ScavRecipes.FirstOrDefault(r => r.Id == request.RecipeId); if (scavCase is not null) { HandleScavCase(sessionID, pmcData, request, output); @@ -936,12 +755,7 @@ public class HideoutController( return output; } - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_production_in_profile_by_recipie_id", - request.RecipeId - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_production_in_profile_by_recipie_id", request.RecipeId)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -986,19 +800,11 @@ public class HideoutController( // If we're unable to find the production, send an error to the client if (prodId is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_production_in_profile_by_recipie_id", - request.RecipeId - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_production_in_profile_by_recipie_id", request.RecipeId)); httpResponseUtil.AppendErrorToOutput( output, - serverLocalisationService.GetText( - "hideout-unable_to_find_production_in_profile_by_recipie_id", - request.RecipeId - ) + serverLocalisationService.GetText("hideout-unable_to_find_production_in_profile_by_recipie_id", request.RecipeId) ); return; @@ -1029,10 +835,7 @@ public class HideoutController( { itemHelper.AddUpdObjectToItem(reward.FirstOrDefault()); - reward.FirstOrDefault().Upd.RecodableComponent = new UpdRecodableComponent - { - IsEncoded = true, - }; + reward.FirstOrDefault().Upd.RecodableComponent = new UpdRecodableComponent { IsEncoded = true }; } } @@ -1061,9 +864,7 @@ public class HideoutController( if (totalCraftingHours / _hideoutConfig.HoursForSkillCrafting >= 1) { // Spent enough time crafting to get a bonus xp multiplier - var multiplierCrafting = Math.Floor( - totalCraftingHours.Value / _hideoutConfig.HoursForSkillCrafting - ); + var multiplierCrafting = Math.Floor(totalCraftingHours.Value / _hideoutConfig.HoursForSkillCrafting); craftingExpAmount += (int)(1 * multiplierCrafting); totalCraftingHours -= _hideoutConfig.HoursForSkillCrafting * multiplierCrafting; } @@ -1136,11 +937,7 @@ public class HideoutController( var intellectAmountToGive = 0.5 * Math.Round((double)(craftingExpAmount / 15)); if (intellectAmountToGive > 0) { - profileHelper.AddSkillPointsToPlayer( - pmcData, - SkillTypes.Intellect, - intellectAmountToGive - ); + profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Intellect, intellectAmountToGive); } } @@ -1157,11 +954,7 @@ public class HideoutController( // production.json is set to if (recipe.Continuous.GetValueOrDefault(false)) { - hideoutProduction.ProductionTime = hideoutHelper.GetAdjustedCraftTimeWithSkills( - pmcData, - recipe.Id, - true - ); + hideoutProduction.ProductionTime = hideoutHelper.GetAdjustedCraftTimeWithSkills(pmcData, recipe.Id, true); } // Flag normal (not continuous) crafts as complete @@ -1177,11 +970,7 @@ public class HideoutController( /// /// /// Reward is a preset - protected void HandleStackableState( - HideoutProduction recipe, - List> itemAndChildrenToSendToPlayer, - bool rewardIsPreset - ) + protected void HandleStackableState(HideoutProduction recipe, List> itemAndChildrenToSendToPlayer, bool rewardIsPreset) { var rewardIsStackable = itemHelper.IsItemTplStackable(recipe.EndProduct); if (rewardIsStackable.GetValueOrDefault(false)) @@ -1206,9 +995,7 @@ public class HideoutController( // Add the first reward item to array when not a preset (first preset added above earlier) if (!rewardIsPreset) { - itemAndChildrenToSendToPlayer.Add( - [new Item { Id = new MongoId(), Template = recipe.EndProduct }] - ); + itemAndChildrenToSendToPlayer.Add([new Item { Id = new MongoId(), Template = recipe.EndProduct }]); } // Add multiple of item if recipe requests it @@ -1216,10 +1003,7 @@ public class HideoutController( var countOfItemsToReward = recipe.Count; for (var index = 1; index < countOfItemsToReward; index++) { - var firstItemWithChildrenClone = cloner - .Clone(itemAndChildrenToSendToPlayer.FirstOrDefault()) - .ReplaceIDs() - .ToList(); + var firstItemWithChildrenClone = cloner.Clone(itemAndChildrenToSendToPlayer.FirstOrDefault()).ReplaceIDs().ToList(); itemAndChildrenToSendToPlayer.AddRange([firstItemWithChildrenClone]); } @@ -1249,10 +1033,7 @@ public class HideoutController( /// Profile to get counter from /// Recipe being crafted /// TaskConditionCounter - protected TaskConditionCounter GetCustomSptHoursCraftingTaskConditionCounter( - PmcData pmcData, - HideoutProduction recipe - ) + protected TaskConditionCounter GetCustomSptHoursCraftingTaskConditionCounter(PmcData pmcData, HideoutProduction recipe) { // Add if doesn't exist pmcData.TaskConditionCounters.TryAdd( @@ -1297,12 +1078,7 @@ public class HideoutController( if (prodId == null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_production_in_profile_by_recipie_id", - request.RecipeId - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_production_in_profile_by_recipie_id", request.RecipeId)); httpResponseUtil.AppendErrorToOutput(output); @@ -1344,12 +1120,7 @@ public class HideoutController( /// Players PMC profile /// QTE result object /// Client response - public void HandleQTEEventOutcome( - MongoId sessionId, - PmcData pmcData, - HandleQTEEventRequestData request, - ItemEventRouterResponse output - ) + public void HandleQTEEventOutcome(MongoId sessionId, PmcData pmcData, HandleQTEEventRequestData request, ItemEventRouterResponse output) { // { // "Action": "HideoutQuickTimeEvent", @@ -1368,22 +1139,14 @@ public class HideoutController( if (outcome) { // Success - pmcData.Health.Energy.Current += relevantQte - .Results[QteEffectType.singleSuccessEffect] - .Energy; - pmcData.Health.Hydration.Current += relevantQte - .Results[QteEffectType.singleSuccessEffect] - .Hydration; + pmcData.Health.Energy.Current += relevantQte.Results[QteEffectType.singleSuccessEffect].Energy; + pmcData.Health.Hydration.Current += relevantQte.Results[QteEffectType.singleSuccessEffect].Hydration; } else { // Failed - pmcData.Health.Energy.Current += relevantQte - .Results[QteEffectType.singleFailEffect] - .Energy; - pmcData.Health.Hydration.Current += relevantQte - .Results[QteEffectType.singleFailEffect] - .Hydration; + pmcData.Health.Energy.Current += relevantQte.Results[QteEffectType.singleFailEffect].Energy; + pmcData.Health.Hydration.Current += relevantQte.Results[QteEffectType.singleFailEffect].Hydration; } } @@ -1408,21 +1171,17 @@ public class HideoutController( protected void HandleMusclePain(PmcData pmcData, QteResult finishEffect) { var hasMildPain = pmcData.Health.BodyParts["Chest"].Effects?.ContainsKey("MildMusclePain"); - var hasSeverePain = pmcData - .Health.BodyParts["Chest"] - .Effects?.ContainsKey("SevereMusclePain"); + var hasSeverePain = pmcData.Health.BodyParts["Chest"].Effects?.ContainsKey("SevereMusclePain"); // Has no muscle pain at all, add mild if (!hasMildPain.GetValueOrDefault(false) && !hasSeverePain.GetValueOrDefault(false)) { // Nullguard - pmcData.Health.BodyParts["Chest"].Effects ??= - new Dictionary(); - pmcData.Health.BodyParts["Chest"].Effects["MildMusclePain"] = - new BodyPartEffectProperties - { - Time = finishEffect.RewardEffects.FirstOrDefault().Time, // TODO - remove hard coded access, get value properly - }; + pmcData.Health.BodyParts["Chest"].Effects ??= new Dictionary(); + pmcData.Health.BodyParts["Chest"].Effects["MildMusclePain"] = new BodyPartEffectProperties + { + Time = finishEffect.RewardEffects.FirstOrDefault().Time, // TODO - remove hard coded access, get value properly + }; return; } @@ -1432,11 +1191,10 @@ public class HideoutController( // Already has mild pain, remove mild and add severe pmcData.Health.BodyParts["Chest"].Effects.Remove("MildMusclePain"); - pmcData.Health.BodyParts["Chest"].Effects["SevereMusclePain"] = - new BodyPartEffectProperties - { - Time = finishEffect.RewardEffects.FirstOrDefault().Time, - }; + pmcData.Health.BodyParts["Chest"].Effects["SevereMusclePain"] = new BodyPartEffectProperties + { + Time = finishEffect.RewardEffects.FirstOrDefault().Time, + }; } } @@ -1446,26 +1204,18 @@ public class HideoutController( /// Session/Player id /// Players PMC profile /// shooting range score request> - public void RecordShootingRangePoints( - MongoId sessionId, - PmcData pmcData, - RecordShootingRangePoints request - ) + public void RecordShootingRangePoints(MongoId sessionId, PmcData pmcData, RecordShootingRangePoints request) { const string shootingRangeKey = "ShootingRangePoints"; var overallCounterItems = pmcData.Stats.Eft.OverallCounters.Items; // Find counter by key - var shootingRangeHighScore = overallCounterItems.FirstOrDefault(counter => - counter.Key.Contains(shootingRangeKey) - ); + var shootingRangeHighScore = overallCounterItems.FirstOrDefault(counter => counter.Key.Contains(shootingRangeKey)); if (shootingRangeHighScore is null) { // Counter not found, add blank one overallCounterItems.Add(new CounterKeyValue { Key = [shootingRangeKey], Value = 0 }); - shootingRangeHighScore = overallCounterItems.FirstOrDefault(counter => - counter.Key.Contains(shootingRangeKey) - ); + shootingRangeHighScore = overallCounterItems.FirstOrDefault(counter => counter.Key.Contains(shootingRangeKey)); } shootingRangeHighScore.Value = request.Points; @@ -1478,11 +1228,7 @@ public class HideoutController( /// Players PMC profile /// Improve area request /// ItemEventRouterResponse - public ItemEventRouterResponse ImproveArea( - MongoId sessionId, - PmcData pmcData, - HideoutImproveAreaRequestData request - ) + public ItemEventRouterResponse ImproveArea(MongoId sessionId, PmcData pmcData, HideoutImproveAreaRequestData request) { var output = eventOutputHolder.GetOutput(sessionId); @@ -1498,12 +1244,7 @@ public class HideoutController( { if (item.inventoryItem is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_item_in_inventory", - item.requestedItem.Id - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_item_in_inventory", item.requestedItem.Id)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -1522,28 +1263,17 @@ public class HideoutController( } } - var profileHideoutArea = pmcData.Hideout.Areas.FirstOrDefault(x => - x.Type == request.AreaType - ); + var profileHideoutArea = pmcData.Hideout.Areas.FirstOrDefault(x => x.Type == request.AreaType); if (profileHideoutArea is null) { - logger.Error( - serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area", request.AreaType)); return httpResponseUtil.AppendErrorToOutput(output); } - var hideoutDbData = databaseService - .GetHideout() - .Areas.FirstOrDefault(area => area.Type == request.AreaType); + var hideoutDbData = databaseService.GetHideout().Areas.FirstOrDefault(area => area.Type == request.AreaType); if (hideoutDbData is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-unable_to_find_area_in_database", - request.AreaType - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-unable_to_find_area_in_database", request.AreaType)); return httpResponseUtil.AppendErrorToOutput(output); } @@ -1577,11 +1307,7 @@ public class HideoutController( /// Players PMC profile /// Cancel production request data /// ItemEventRouterResponse - public ItemEventRouterResponse CancelProduction( - MongoId sessionId, - PmcData pmcData, - HideoutCancelProductionRequestData request - ) + public ItemEventRouterResponse CancelProduction(MongoId sessionId, PmcData pmcData, HideoutCancelProductionRequestData request) { var output = eventOutputHolder.GetOutput(sessionId); @@ -1647,21 +1373,15 @@ public class HideoutController( { var output = eventOutputHolder.GetOutput(sessionId); - var itemDetails = databaseService - .GetHideout() - .Customisation.Globals.FirstOrDefault(cust => cust.Id == request.OfferId); + var itemDetails = databaseService.GetHideout().Customisation.Globals.FirstOrDefault(cust => cust.Id == request.OfferId); if (itemDetails is null) { - logger.Error( - $"Unable to find customisation: {request.OfferId} in db, cannot apply to hideout" - ); + logger.Error($"Unable to find customisation: {request.OfferId} in db, cannot apply to hideout"); return output; } - pmcData.Hideout.Customization[GetHideoutCustomisationType(itemDetails.Type)] = itemDetails - .ItemId - .Value; + pmcData.Hideout.Customization[GetHideoutCustomisationType(itemDetails.Type)] = itemDetails.ItemId.Value; return output; } @@ -1734,9 +1454,7 @@ public class HideoutController( { Id = new MongoId(), Template = pmcData - .Inventory.Items.FirstOrDefault(item => - item.SlotId == "Pockets" && item.ParentId == pmcData.Inventory.Equipment - ) + .Inventory.Items.FirstOrDefault(item => item.SlotId == "Pockets" && item.ParentId == pmcData.Inventory.Equipment) .Template, // Same pocket tpl as players profile (unheard get bigger, matching pockets etc) ParentId = standId, SlotId = "Pockets", @@ -1763,9 +1481,7 @@ public class HideoutController( { if (request.Poses is null) { - logger.Warning( - "this really shouldnt be possible, but a request has come in with a pose change without poses" - ); + logger.Warning("this really shouldnt be possible, but a request has come in with a pose change without poses"); return eventOutputHolder.GetOutput(sessionId); } @@ -1800,10 +1516,7 @@ public class HideoutController( { if ( profile.CharacterData.PmcData.Hideout is not null - && profileActivityService.ActiveWithinLastMinutes( - sessionId, - _hideoutConfig.UpdateProfileHideoutWhenActiveWithinMinutes - ) + && profileActivityService.ActiveWithinLastMinutes(sessionId, _hideoutConfig.UpdateProfileHideoutWhenActiveWithinMinutes) ) { hideoutHelper.UpdatePlayerHideout(sessionId); diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InRaidController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InRaidController.cs index c44bbd13..a1d2bd91 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InRaidController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InRaidController.cs @@ -36,10 +36,7 @@ public class InRaidController( /// /// /// Session/Player id - public void SavePostRaidProfileForScav( - ScavSaveRequestData offRaidProfileData, - MongoId sessionId - ) + public void SavePostRaidProfileForScav(ScavSaveRequestData offRaidProfileData, MongoId sessionId) { var serverScavProfile = profileHelper.GetScavProfile(sessionId); diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs index 7abeb754..572bf61f 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs @@ -90,9 +90,7 @@ public class InsuranceController( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Found {profileInsuranceDetails.Count} insurance packages in profile {sessionId}" - ); + logger.Debug($"Found {profileInsuranceDetails.Count} insurance packages in profile {sessionId}"); } } @@ -171,9 +169,7 @@ public class InsuranceController( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Removed processed insurance package. Remaining packages: {profile.InsuranceList.Count}" - ); + logger.Debug($"Removed processed insurance package. Remaining packages: {profile.InsuranceList.Count}"); } } @@ -190,11 +186,7 @@ public class InsuranceController( // Populate a Map object of items for quick lookup by their ID and use it to populate a Map of main-parent items // and each of their attachments. For example, a gun mapped to each of its attachments. var itemsMap = insured.Items.GenerateItemsMap(); - var parentAttachmentsMap = PopulateParentAttachmentsMap( - rootItemParentId, - insured, - itemsMap - ); + var parentAttachmentsMap = PopulateParentAttachmentsMap(rootItemParentId, insured, itemsMap); // Check to see if any regular items are present. var hasRegularItems = itemsMap.Values.Any(item => !itemHelper.IsAttachmentAttached(item)); @@ -278,11 +270,7 @@ public class InsuranceController( logger.Warning( serverLocalisationService.GetText( "insurance-unable_to_find_attachment_in_db", - new - { - insuredItemId = insuredItem.Id, - insuredItemTpl = insuredItem.Template, - } + new { insuredItemId = insuredItem.Id, insuredItemTpl = insuredItem.Template } ) ); @@ -384,11 +372,7 @@ public class InsuranceController( /// Insurance object containing the items to evaluate /// Hashset to keep track of items marked for deletion /// Dictionary containing parent item IDs to arrays of their attachment items - protected void ProcessRegularItems( - Insurance insured, - HashSet toDelete, - Dictionary> parentAttachmentsMap - ) + protected void ProcessRegularItems(Insurance insured, HashSet toDelete, Dictionary> parentAttachmentsMap) { foreach (var insuredItem in insured.Items) { @@ -471,35 +455,23 @@ public class InsuranceController( /// Array of attachment items to sort, filter, and roll /// ID of the trader to that has ensured these items /// array that accumulates the IDs of the items to be deleted - protected void ProcessAttachmentByParent( - IEnumerable attachments, - MongoId traderId, - HashSet toDelete - ) + protected void ProcessAttachmentByParent(IEnumerable attachments, MongoId traderId, HashSet toDelete) { // Create dict of item ids + their flea/handbook price (highest is chosen) var weightedAttachmentByPrice = WeightAttachmentsByPrice(attachments); // Get how many attachments we want to pull off parent - var countOfAttachmentsToRemove = GetAttachmentCountToRemove( - weightedAttachmentByPrice, - traderId - ); + var countOfAttachmentsToRemove = GetAttachmentCountToRemove(weightedAttachmentByPrice, traderId); // Create prob array and add all attachments with rouble price as the weight var attachmentsProbabilityArray = new ProbabilityObjectArray(cloner); foreach (var (itemTpl, price) in weightedAttachmentByPrice) { - attachmentsProbabilityArray.Add( - new ProbabilityObject(itemTpl, price, null) - ); + attachmentsProbabilityArray.Add(new ProbabilityObject(itemTpl, price, null)); } // Draw x attachments from weighted array to remove from parent, remove from pool after being picked - var attachmentIdsToRemove = attachmentsProbabilityArray.Draw( - (int)countOfAttachmentsToRemove, - false - ); + var attachmentIdsToRemove = attachmentsProbabilityArray.Draw((int)countOfAttachmentsToRemove, false); foreach (var attachmentId in attachmentIdsToRemove) { toDelete.Add(attachmentId); @@ -570,10 +542,7 @@ public class InsuranceController( /// Dict of item Tpls and their rouble price /// Trader the attachment is insured against /// Attachment count to remove - protected double GetAttachmentCountToRemove( - Dictionary weightedAttachmentByPrice, - MongoId traderId - ) + protected double GetAttachmentCountToRemove(Dictionary weightedAttachmentByPrice, MongoId traderId) { const int removeCount = 0; @@ -584,9 +553,7 @@ public class InsuranceController( // Get attachments count above or equal to price set in config return weightedAttachmentByPrice - .Where(attachment => - attachment.Value >= _insuranceConfig.MinAttachmentRoublePriceToBeTaken - ) + .Where(attachment => attachment.Value >= _insuranceConfig.MinAttachmentRoublePriceToBeTaken) .Count(_ => RollForDelete(traderId) ?? false); } @@ -625,12 +592,7 @@ public class InsuranceController( else if (insurance.Items?.Count == 0) // Not labs and no items to return { - if ( - traderDialogMessages.TryGetValue( - "insuranceFailed", - out var insuranceFailedTemplates - ) - ) + if (traderDialogMessages.TryGetValue("insuranceFailed", out var insuranceFailedTemplates)) { insurance.MessageTemplateId = randomUtil.GetArrayValue(insuranceFailedTemplates); } @@ -656,11 +618,8 @@ public class InsuranceController( /// protected bool IsMapLabsAndInsuranceDisabled(Insurance insurance, string labsId = "laboratory") { - return string.Equals( - insurance.SystemData?.Location, - labsId, - StringComparison.OrdinalIgnoreCase - ) && !(databaseService.GetLocation(labsId)?.Base?.Insurance ?? false); + return string.Equals(insurance.SystemData?.Location, labsId, StringComparison.OrdinalIgnoreCase) + && !(databaseService.GetLocation(labsId)?.Base?.Insurance ?? false); } /// @@ -669,16 +628,10 @@ public class InsuranceController( /// The insured items to process /// OPTIONAL - id of labyrinth location /// - protected bool IsMapLabyrinthAndInsuranceDisabled( - Insurance insurance, - string labyrinthId = "labyrinth" - ) + protected bool IsMapLabyrinthAndInsuranceDisabled(Insurance insurance, string labyrinthId = "labyrinth") { - return string.Equals( - insurance.SystemData?.Location, - labyrinthId, - StringComparison.OrdinalIgnoreCase - ) && !(databaseService.GetLocation(labyrinthId)?.Base?.Insurance ?? false); + return string.Equals(insurance.SystemData?.Location, labyrinthId, StringComparison.OrdinalIgnoreCase) + && !(databaseService.GetLocation(labyrinthId)?.Base?.Insurance ?? false); } /// @@ -686,10 +639,7 @@ public class InsuranceController( /// /// /// - protected void HandleLabsInsurance( - Dictionary?> traderDialogMessages, - Insurance insurance - ) + protected void HandleLabsInsurance(Dictionary?> traderDialogMessages, Insurance insurance) { // Use labs specific messages if available, otherwise use default if (!traderDialogMessages.TryGetValue("insuranceFailedLabs", out var responseMessageIds)) @@ -708,17 +658,9 @@ public class InsuranceController( /// /// /// - protected void HandleLabyrinthInsurance( - Dictionary?> traderDialogMessages, - Insurance insurance - ) + protected void HandleLabyrinthInsurance(Dictionary?> traderDialogMessages, Insurance insurance) { - if ( - !traderDialogMessages.TryGetValue( - "insuranceFailedLabyrinth", - out var responseMessageIds - ) - ) + if (!traderDialogMessages.TryGetValue("insuranceFailedLabyrinth", out var responseMessageIds)) { traderDialogMessages.TryGetValue("insuranceFailed", out responseMessageIds); } @@ -751,15 +693,11 @@ public class InsuranceController( var roll = returnChance >= traderReturnChance; // Log the roll with as much detail as possible. - var itemName = insuredItem is not null - ? $"{itemHelper.GetItemName(insuredItem.Template)}" - : ""; + var itemName = insuredItem is not null ? $"{itemHelper.GetItemName(insuredItem.Template)}" : ""; var status = roll ? "Delete" : "Keep"; if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Rolling {itemName} with {trader} - Return {traderReturnChance}% - Roll: {returnChance} - Status: {status}" - ); + logger.Debug($"Rolling {itemName} with {trader} - Return {traderReturnChance}% - Roll: {returnChance} - Status: {status}"); } return roll; @@ -772,11 +710,7 @@ public class InsuranceController( /// Insurance request /// Session/Player id /// ItemEventRouterResponse object to send to client - public ItemEventRouterResponse Insure( - PmcData pmcData, - InsureRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse Insure(PmcData pmcData, InsureRequestData request, MongoId sessionId) { var output = eventOutputHolder.GetOutput(sessionId); var itemsToInsureCount = request.Items.Count; @@ -792,11 +726,7 @@ public class InsuranceController( new IdWithCount { Id = Money.ROUBLES, // TODO: update to handle different currencies - Count = insuranceService.GetRoublePriceToInsureItemWithTrader( - pmcData, - inventoryItemsHash[key], - request.TransactionId - ), + Count = insuranceService.GetRoublePriceToInsureItemWithTrader(pmcData, inventoryItemsHash[key], request.TransactionId), } ); } @@ -824,9 +754,7 @@ public class InsuranceController( foreach (var key in request.Items) { var inventoryItem = inventoryItemsHash.GetValueOrDefault(key); - pmcData.InsuredItems.Add( - new InsuredItem { TId = request.TransactionId, ItemId = inventoryItem.Id } - ); + pmcData.InsuredItems.Add(new InsuredItem { TId = request.TransactionId, ItemId = inventoryItem.Id }); // If Item is Helmet or Body Armour -> Handle insurance of soft inserts if (itemHelper.ArmorItemHasRemovableOrSoftInsertSlots(inventoryItem.Template)) { @@ -834,11 +762,7 @@ public class InsuranceController( } } - profileHelper.AddSkillPointsToPlayer( - pmcData, - SkillTypes.Charisma, - itemsToInsureCount * 0.01 - ); + profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Charisma, itemsToInsureCount * 0.01); return output; } @@ -849,15 +773,10 @@ public class InsuranceController( /// Armor item to be insured /// Players PMC profile /// Insurance request data - public void InsureSoftInserts( - Item itemWithSoftInserts, - PmcData pmcData, - InsureRequestData request - ) + public void InsureSoftInserts(Item itemWithSoftInserts, PmcData pmcData, InsureRequestData request) { var softInsertSlots = pmcData.Inventory.Items.Where(item => - item.ParentId == itemWithSoftInserts.Id - && itemHelper.IsSoftInsertId(item.SlotId.ToLowerInvariant()) + item.ParentId == itemWithSoftInserts.Id && itemHelper.IsSoftInsertId(item.SlotId.ToLowerInvariant()) ); foreach (var softInsertSlot in softInsertSlots) @@ -867,9 +786,7 @@ public class InsuranceController( logger.Debug($"SoftInsertSlots: {softInsertSlot.SlotId}"); } - pmcData.InsuredItems.Add( - new InsuredItem { TId = request.TransactionId, ItemId = softInsertSlot.Id } - ); + pmcData.InsuredItems.Add(new InsuredItem { TId = request.TransactionId, ItemId = softInsertSlot.Id }); } } @@ -900,9 +817,7 @@ public class InsuranceController( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Item with id: {itemId} missing from player inventory, skipping" - ); + logger.Debug($"Item with id: {itemId} missing from player inventory, skipping"); } continue; @@ -911,11 +826,7 @@ public class InsuranceController( if ( !traderItems.TryAdd( inventoryItem.Template, - insuranceService.GetRoublePriceToInsureItemWithTrader( - pmcData, - inventoryItem, - traderId - ) + insuranceService.GetRoublePriceToInsureItemWithTrader(pmcData, inventoryItem, traderId) ) ) { diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs index d4aa2524..252fdf12 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs @@ -44,12 +44,7 @@ public class InventoryController( /// Move request data /// Session/Player id /// Client response - public void MoveItem( - PmcData pmcData, - InventoryMoveRequestData moveRequest, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void MoveItem(PmcData pmcData, InventoryMoveRequestData moveRequest, MongoId sessionId, ItemEventRouterResponse output) { if (output.Warnings?.Count > 0) { @@ -57,27 +52,18 @@ public class InventoryController( } // Changes made to result apply to character inventory - var ownerInventoryItems = inventoryHelper.GetOwnerInventoryItems( - moveRequest, - moveRequest.Item.Value, - sessionId - ); + var ownerInventoryItems = inventoryHelper.GetOwnerInventoryItems(moveRequest, moveRequest.Item.Value, sessionId); if (ownerInventoryItems.SameInventory.GetValueOrDefault(false)) { // Don't move items from trader to profile, this can happen when editing a traders preset weapons - if ( - moveRequest.FromOwner?.Type == "Trader" - && !ownerInventoryItems.IsMail.GetValueOrDefault(false) - ) + if (moveRequest.FromOwner?.Type == "Trader" && !ownerInventoryItems.IsMail.GetValueOrDefault(false)) { AppendTraderExploitErrorResponse(output); return; } // Check for item in inventory before allowing internal transfer - var originalItemLocation = ownerInventoryItems.From?.FirstOrDefault(item => - item.Id == moveRequest.Item - ); + var originalItemLocation = ownerInventoryItems.From?.FirstOrDefault(item => item.Id == moveRequest.Item); if (originalItemLocation is null) { // Internal item move but item never existed, possible dupe glitch @@ -87,12 +73,7 @@ public class InventoryController( var originalLocationSlotId = originalItemLocation.SlotId; - var moveResult = inventoryHelper.MoveItemInternal( - pmcData, - ownerInventoryItems.From ?? [], - moveRequest, - out var errorMessage - ); + var moveResult = inventoryHelper.MoveItemInternal(pmcData, ownerInventoryItems.From ?? [], moveRequest, out var errorMessage); if (!moveResult) { httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -103,14 +84,8 @@ public class InventoryController( if ( moveRequest.To?.Container != null && ( - moveRequest.To.Container.StartsWith( - "dogtag", - StringComparison.OrdinalIgnoreCase - ) - || originalLocationSlotId.StartsWith( - "dogtag", - StringComparison.OrdinalIgnoreCase - ) + moveRequest.To.Container.StartsWith("dogtag", StringComparison.OrdinalIgnoreCase) + || originalLocationSlotId.StartsWith("dogtag", StringComparison.OrdinalIgnoreCase) ) ) { @@ -119,11 +94,7 @@ public class InventoryController( } else { - inventoryHelper.MoveItemToProfile( - ownerInventoryItems.From ?? [], - ownerInventoryItems.To ?? [], - moveRequest - ); + inventoryHelper.MoveItemToProfile(ownerInventoryItems.From ?? [], ownerInventoryItems.To ?? [], moveRequest); } } @@ -148,21 +119,12 @@ public class InventoryController( /// Pin/Lock request data /// Session/Player id /// Client response - public void PinOrLock( - PmcData pmcData, - PinOrLockItemRequest request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void PinOrLock(PmcData pmcData, PinOrLockItemRequest request, MongoId sessionId, ItemEventRouterResponse output) { - var itemToAdjust = pmcData.Inventory!.Items!.FirstOrDefault(item => - item.Id == request.Item - ); + var itemToAdjust = pmcData.Inventory!.Items!.FirstOrDefault(item => item.Id == request.Item); if (itemToAdjust is null) { - logger.Error( - $"Unable find item: {request.Item.Value.ToString()} to: {request.State} on player: {sessionId} to: " - ); + logger.Error($"Unable find item: {request.Item.Value.ToString()} to: {request.State} on player: {sessionId} to: "); return; } @@ -192,11 +154,7 @@ public class InventoryController( /// Players PMC profile /// /// Session/Player id - public void RedeemProfileReward( - PmcData pmcData, - RedeemProfileRequestData request, - MongoId sessionId - ) + public void RedeemProfileReward(PmcData pmcData, RedeemProfileRequestData request, MongoId sessionId) { var fullProfile = profileHelper.GetFullProfile(sessionId); foreach (var rewardEvent in request.Events) @@ -204,28 +162,20 @@ public class InventoryController( // Hard coded to `SYSTEM` for now // TODO: make this dynamic var dialog = fullProfile.DialogueRecords["59e7125688a45068a6249071"]; - var mail = dialog.Messages.FirstOrDefault(message => - message.Id == rewardEvent.MessageId - ); - var mailEvent = mail.ProfileChangeEvents.FirstOrDefault(changeEvent => - changeEvent.Id == rewardEvent.EventId - ); + var mail = dialog.Messages.FirstOrDefault(message => message.Id == rewardEvent.MessageId); + var mailEvent = mail.ProfileChangeEvents.FirstOrDefault(changeEvent => changeEvent.Id == rewardEvent.EventId); switch (mailEvent.Type) { case "TraderSalesSum": pmcData.TradersInfo[mailEvent.Entity].SalesSum = mailEvent.Value; traderHelper.LevelUp(mailEvent.Entity, pmcData); - logger.Success( - $"Set trader {mailEvent.Entity}: Sales Sum to: {mailEvent.Value}" - ); + logger.Success($"Set trader {mailEvent.Entity}: Sales Sum to: {mailEvent.Value}"); break; case "TraderStanding": pmcData.TradersInfo[mailEvent.Entity].Standing = mailEvent.Value; traderHelper.LevelUp(mailEvent.Entity, pmcData); - logger.Success( - $"Set trader {mailEvent.Entity}: Standing to: {mailEvent.Value}" - ); + logger.Success($"Set trader {mailEvent.Entity}: Standing to: {mailEvent.Value}"); break; case "ProfileLevel": pmcData.Info.Experience = (int)mailEvent.Value.Value; @@ -235,9 +185,7 @@ public class InventoryController( break; case "SkillPoints": { - var profileSkill = pmcData.Skills.Common.FirstOrDefault(x => - x.Id == Enum.Parse(mailEvent.Entity) - ); + var profileSkill = pmcData.Skills.Common.FirstOrDefault(x => x.Id == Enum.Parse(mailEvent.Entity)); if (profileSkill is null) { logger.Warning($"Unable to find skill with name: {mailEvent.Entity}"); @@ -250,10 +198,7 @@ public class InventoryController( } case "ExamineAllItems": { - var itemIds = databaseService - .GetItems() - .Where(x => x.Value.Type != "Node") - .Select(x => x.Key); + var itemIds = databaseService.GetItems().Where(x => x.Value.Type != "Node").Select(x => x.Key); FlagItemsAsInspectedAndRewardXp(itemIds, fullProfile); logger.Success($"Flagged {itemIds.Count()} items as examined"); @@ -276,9 +221,7 @@ public class InventoryController( var newValue = mailEvent.Value; var hideoutAreaType = Enum.Parse(areaName ?? "NotSet"); - var desiredArea = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == hideoutAreaType - ); + var desiredArea = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == hideoutAreaType); if (desiredArea is not null) { desiredArea.Level = (int?)newValue; @@ -299,43 +242,27 @@ public class InventoryController( /// /// Inspected item tpls /// Profile to add xp to - protected void FlagItemsAsInspectedAndRewardXp( - IEnumerable itemTpls, - SptProfile fullProfile - ) + protected void FlagItemsAsInspectedAndRewardXp(IEnumerable itemTpls, SptProfile fullProfile) { foreach (var itemTpl in itemTpls) { var item = itemHelper.GetItem(itemTpl); if (!item.Key) { - logger.Warning( - serverLocalisationService.GetText( - "inventory-unable_to_inspect_item_not_in_db", - itemTpl - ) - ); + logger.Warning(serverLocalisationService.GetText("inventory-unable_to_inspect_item_not_in_db", itemTpl)); return; } - fullProfile.CharacterData.PmcData.Info.Experience += item.Value - .Properties - .ExamineExperience; + fullProfile.CharacterData.PmcData.Info.Experience += item.Value.Properties.ExamineExperience; fullProfile.CharacterData.PmcData.Encyclopedia[itemTpl] = false; - fullProfile.CharacterData.ScavData.Info.Experience += item.Value - .Properties - .ExamineExperience; + fullProfile.CharacterData.ScavData.Info.Experience += item.Value.Properties.ExamineExperience; fullProfile.CharacterData.ScavData.Encyclopedia[itemTpl] = false; } // TODO: update this with correct calculation using values from globals json - profileHelper.AddSkillPointsToPlayer( - fullProfile.CharacterData.PmcData, - SkillTypes.Intellect, - 0.05 * itemTpls.Count() - ); + profileHelper.AddSkillPointsToPlayer(fullProfile.CharacterData.PmcData, SkillTypes.Intellect, 0.05 * itemTpls.Count()); } /// @@ -379,14 +306,10 @@ public class InventoryController( } else { - var rewardContainerDetails = inventoryHelper.GetRandomLootContainerRewardDetails( - openedItem.Template - ); + var rewardContainerDetails = inventoryHelper.GetRandomLootContainerRewardDetails(openedItem.Template); if (rewardContainerDetails?.RewardCount == null) { - logger.Error( - $"Unable to add loot to container: {openedItem.Template}, no rewards found" - ); + logger.Error($"Unable to add loot to container: {openedItem.Template}, no rewards found"); } else { @@ -427,12 +350,7 @@ public class InventoryController( /// Edit marker request /// Session/Player id /// Client response - public void EditMapMarker( - PmcData pmcData, - InventoryEditMarkerRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void EditMapMarker(PmcData pmcData, InventoryEditMarkerRequestData request, MongoId sessionId, ItemEventRouterResponse output) { var mapItem = mapMarkerService.EditMarkerOnMap(pmcData, request); @@ -480,26 +398,14 @@ public class InventoryController( /// Add marker request /// Session/Player id /// Client response - public void SortInventory( - PmcData pmcData, - InventorySortRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void SortInventory(PmcData pmcData, InventorySortRequestData request, MongoId sessionId, ItemEventRouterResponse output) { foreach (var change in request.ChangedItems) { - var inventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == change.Id - ); + var inventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == change.Id); if (inventoryItem is null) { - logger.Error( - serverLocalisationService.GetText( - "inventory-unable_to_sort_inventory_restart_game", - change.Id - ) - ); + logger.Error(serverLocalisationService.GetText("inventory-unable_to_sort_inventory_restart_game", change.Id)); continue; } @@ -517,11 +423,7 @@ public class InventoryController( /// /// Session/Player id /// - public ItemEventRouterResponse ReadEncyclopedia( - PmcData pmcData, - InventoryReadEncyclopediaRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse ReadEncyclopedia(PmcData pmcData, InventoryReadEncyclopediaRequestData request, MongoId sessionId) { foreach (var id in request.Ids) { @@ -538,12 +440,7 @@ public class InventoryController( /// Examine item request /// Session/Player id /// Client response - public void ExamineItem( - PmcData pmcData, - InventoryExamineRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void ExamineItem(PmcData pmcData, InventoryExamineRequestData request, MongoId sessionId, ItemEventRouterResponse output) { MongoId? itemId = null; if (request.FromOwner is not null) @@ -554,12 +451,7 @@ public class InventoryController( } catch { - logger.Error( - serverLocalisationService.GetText( - "inventory-examine_item_does_not_exist", - request.ItemId - ) - ); + logger.Error(serverLocalisationService.GetText("inventory-examine_item_does_not_exist", request.ItemId)); } } @@ -605,10 +497,7 @@ public class InventoryController( if (request.FromOwner.Id == Traders.FENCE) // Get tpl from fence assorts { - return fenceService - .GetRawFenceAssorts() - .Items.FirstOrDefault(x => x.Id == request.ItemId) - ?.Template; + return fenceService.GetRawFenceAssorts().Items.FirstOrDefault(x => x.Id == request.ItemId)?.Template; } if (request.FromOwner.Type == "Trader") @@ -632,22 +521,17 @@ public class InventoryController( // Try alternate way of getting offer if first approach fails var offer = - ragfairOfferService.GetOfferByOfferId(request.ItemId) - ?? ragfairOfferService.GetOfferByOfferId(request.FromOwner.Id.Value); + ragfairOfferService.GetOfferByOfferId(request.ItemId) ?? ragfairOfferService.GetOfferByOfferId(request.FromOwner.Id.Value); // Try find examine item inside offer items array - var matchingItem = offer.Items.FirstOrDefault(offerItem => - offerItem.Id == request.ItemId - ); + var matchingItem = offer.Items.FirstOrDefault(offerItem => offerItem.Id == request.ItemId); if (matchingItem is not null) { return matchingItem.Template; } // Unable to find item in database or ragfair - logger.Warning( - serverLocalisationService.GetText("inventory-unable_to_find_item", request.ItemId) - ); + logger.Warning(serverLocalisationService.GetText("inventory-unable_to_find_item", request.ItemId)); } // get hideout item @@ -662,9 +546,7 @@ public class InventoryController( // all mail the player has var mail = profileHelper.GetFullProfile(sessionId).DialogueRecords; // per trader/person mail - var dialogue = mail.FirstOrDefault(x => - x.Value.Messages.Any(m => m.Id == request.FromOwner.Id) - ); + var dialogue = mail.FirstOrDefault(x => x.Value.Messages.Any(m => m.Id == request.FromOwner.Id)); // check each message from that trader/person for messages that match the ID we got var message = dialogue.Value.Messages.FirstOrDefault(m => m.Id == request.FromOwner.Id); // get the Id given and get the Template ID from that @@ -689,12 +571,7 @@ public class InventoryController( /// /// Session/Player id /// Client response - public void UnBindItem( - PmcData pmcData, - InventoryBindRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void UnBindItem(PmcData pmcData, InventoryBindRequestData request, MongoId sessionId, ItemEventRouterResponse output) { // Remove kvp from requested fast panel index @@ -710,12 +587,7 @@ public class InventoryController( /// /// Session/Player id /// Client response - public void BindItem( - PmcData pmcData, - InventoryBindRequestData bindRequest, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void BindItem(PmcData pmcData, InventoryBindRequestData bindRequest, MongoId sessionId, ItemEventRouterResponse output) { // Remove link pmcData.Inventory.FastPanel.Remove(bindRequest.Index); @@ -731,18 +603,12 @@ public class InventoryController( /// /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse TagItem( - PmcData pmcData, - InventoryTagRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse TagItem(PmcData pmcData, InventoryTagRequestData request, MongoId sessionId) { var itemToTag = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == request.Item); if (itemToTag is null) { - logger.Warning( - $"Unable to tag item: {request.Item} as it cannot be found in player {sessionId} inventory" - ); + logger.Warning($"Unable to tag item: {request.Item} as it cannot be found in player {sessionId} inventory"); return new ItemEventRouterResponse { Warnings = [] }; } @@ -762,11 +628,7 @@ public class InventoryController( /// Toggle request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse ToggleItem( - PmcData pmcData, - InventoryToggleRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse ToggleItem(PmcData pmcData, InventoryToggleRequestData request, MongoId sessionId) { // May need to reassign to scav profile var playerData = pmcData; @@ -782,10 +644,7 @@ public class InventoryController( { itemHelper.AddUpdObjectToItem( itemToToggle, - serverLocalisationService.GetText( - "inventory-item_to_toggle_missing_upd", - itemToToggle.Id - ) + serverLocalisationService.GetText("inventory-item_to_toggle_missing_upd", itemToToggle.Id) ); itemToToggle.Upd.Togglable = new UpdTogglable { On = request.Value }; @@ -793,12 +652,7 @@ public class InventoryController( return eventOutputHolder.GetOutput(sessionId); } - logger.Warning( - serverLocalisationService.GetText( - "inventory-unable_to_toggle_item_not_found", - request.Item - ) - ); + logger.Warning(serverLocalisationService.GetText("inventory-unable_to_toggle_item_not_found", request.Item)); return new ItemEventRouterResponse { Warnings = [] }; } @@ -810,11 +664,7 @@ public class InventoryController( /// Fold item request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse FoldItem( - PmcData pmcData, - InventoryFoldRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse FoldItem(PmcData pmcData, InventoryFoldRequestData request, MongoId sessionId) { // May need to reassign to scav profile var playerData = pmcData; @@ -829,12 +679,7 @@ public class InventoryController( if (itemToFold is null) { // Item not found - logger.Warning( - serverLocalisationService.GetText( - "inventory-unable_to_fold_item_not_found_in_inventory", - request.Item - ) - ); + logger.Warning(serverLocalisationService.GetText("inventory-unable_to_fold_item_not_found_in_inventory", request.Item)); return new ItemEventRouterResponse { Warnings = [] }; } @@ -856,11 +701,7 @@ public class InventoryController( /// Swap item request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse SwapItem( - PmcData pmcData, - InventorySwapRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse SwapItem(PmcData pmcData, InventorySwapRequestData request, MongoId sessionId) { // During post-raid scav transfer, the swap may be in the scav inventory var playerData = pmcData; @@ -917,19 +758,10 @@ public class InventoryController( /// Transfer item request /// Session/Player id /// Client response - public void TransferItem( - PmcData pmcData, - InventoryTransferRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void TransferItem(PmcData pmcData, InventoryTransferRequestData request, MongoId sessionId, ItemEventRouterResponse output) { // TODO - check GetOwnerInventoryItems() call still works - var inventoryItems = inventoryHelper.GetOwnerInventoryItems( - request, - request.Item, - sessionId - ); + var inventoryItems = inventoryHelper.GetOwnerInventoryItems(request, request.Item, sessionId); var sourceItem = inventoryItems.From.FirstOrDefault(item => item.Id == request.Item); var destinationItem = inventoryItems.To.FirstOrDefault(item => item.Id == request.With); @@ -981,26 +813,16 @@ public class InventoryController( /// Merge stacks request /// Session/Player id /// Client response - public void MergeItem( - PmcData pmcData, - InventoryMergeRequestData request, - MongoId sessionID, - ItemEventRouterResponse output - ) + public void MergeItem(PmcData pmcData, InventoryMergeRequestData request, MongoId sessionID, ItemEventRouterResponse output) { // Changes made to result apply to character inventory - var inventoryItems = inventoryHelper.GetOwnerInventoryItems( - request, - request.Item, - sessionID - ); + var inventoryItems = inventoryHelper.GetOwnerInventoryItems(request, request.Item, sessionID); // Get source item (can be from player or trader or mail) var sourceItem = inventoryItems.From.FirstOrDefault(x => x.Id == request.Item); if (sourceItem is null) { - var errorMessage = - $"Unable to merge stacks as source item: {request.With} cannot be found"; + var errorMessage = $"Unable to merge stacks as source item: {request.With} cannot be found"; logger.Error(errorMessage); httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -1012,8 +834,7 @@ public class InventoryController( var destinationItem = inventoryItems.To.FirstOrDefault(x => x.Id == request.With); if (destinationItem is null) { - var errorMessage = - $"Unable to merge stacks as destination item: {request.With} cannot be found"; + var errorMessage = $"Unable to merge stacks as destination item: {request.With} cannot be found"; logger.Error(errorMessage); httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -1038,24 +859,18 @@ public class InventoryController( } // Remove FiR status from destination stack when source stack has no FiR but destination does - if ( - !sourceItem.Upd.SpawnedInSession.GetValueOrDefault(false) - && destinationItem.Upd.SpawnedInSession.GetValueOrDefault(false) - ) + if (!sourceItem.Upd.SpawnedInSession.GetValueOrDefault(false) && destinationItem.Upd.SpawnedInSession.GetValueOrDefault(false)) { destinationItem.Upd.SpawnedInSession = false; } destinationItem.Upd.StackObjectsCount += sourceItem.Upd.StackObjectsCount; // Add source stackcount to destination - output - .ProfileChanges[sessionID] - .Items.DeletedItems.Add(new DeletedItem { Id = sourceItem.Id }); // Inform client source item being deleted + output.ProfileChanges[sessionID].Items.DeletedItems.Add(new DeletedItem { Id = sourceItem.Id }); // Inform client source item being deleted var indexOfItemToRemove = inventoryItems.From.FindIndex(x => x.Id == sourceItem.Id); if (indexOfItemToRemove == -1) { - var errorMessage = - $"Unable to find item: {sourceItem.Id} to remove from sender inventory"; + var errorMessage = $"Unable to find item: {sourceItem.Id} to remove from sender inventory"; logger.Error(errorMessage); httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -1073,19 +888,10 @@ public class InventoryController( /// Split stack request /// Session/Player id /// Client response - public void SplitItem( - PmcData pmcData, - InventorySplitRequestData request, - MongoId sessionID, - ItemEventRouterResponse output - ) + public void SplitItem(PmcData pmcData, InventorySplitRequestData request, MongoId sessionID, ItemEventRouterResponse output) { // Changes made to result apply to character inventory - var inventoryItems = inventoryHelper.GetOwnerInventoryItems( - request, - request.NewItem.Value, - sessionID - ); + var inventoryItems = inventoryHelper.GetOwnerInventoryItems(request, request.NewItem.Value, sessionID); // Handle cartridge edge-case if (request.Container.Location is null && request.Container.ContainerName == "cartridges") @@ -1098,8 +904,7 @@ public class InventoryController( var itemToSplit = inventoryItems.From.FirstOrDefault(x => x.Id == request.SplitItem); if (itemToSplit is null) { - var errorMessage = - $"Unable to split stack as source item: {request.SplitItem} cannot be found"; + var errorMessage = $"Unable to split stack as source item: {request.SplitItem} cannot be found"; logger.Error(errorMessage); httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -1148,12 +953,7 @@ public class InventoryController( /// Discard item request /// Session/Player id /// Client response - public void DiscardItem( - PmcData pmcData, - InventoryRemoveRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void DiscardItem(PmcData pmcData, InventoryRemoveRequestData request, MongoId sessionId, ItemEventRouterResponse output) { if (request.FromOwner?.Type == "Mail") { diff --git a/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs b/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs index f7e1f926..d74e00a4 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs @@ -38,9 +38,7 @@ public class LauncherController( // Get all possible profile types + filter out any that are blacklisted var profileTemplates = databaseService .GetProfileTemplates() - .Where(profile => - !_coreConfig.Features.CreateNewProfileTypesBlacklist.Contains(profile.Key) - ) + .Where(profile => !_coreConfig.Features.CreateNewProfileTypesBlacklist.Contains(profile.Key)) .ToDictionary(); return new ConnectResponse @@ -57,17 +55,12 @@ public class LauncherController( /// /// Profiles to get descriptions of /// Dictionary of profile types with related descriptive text - protected Dictionary GetProfileDescriptions( - Dictionary profileTemplates - ) + protected Dictionary GetProfileDescriptions(Dictionary profileTemplates) { var result = new Dictionary(); foreach (var (profileKey, profile) in profileTemplates) { - result.TryAdd( - profileKey, - serverLocalisationService.GetText(profile.DescriptionLocaleKey) - ); + result.TryAdd(profileKey, serverLocalisationService.GetText(profile.DescriptionLocaleKey)); } return result; @@ -79,9 +72,7 @@ public class LauncherController( /// public Info? Find(MongoId sessionId) { - return saveServer.GetProfiles().TryGetValue(sessionId, out var profile) - ? profile.ProfileInfo - : null; + return saveServer.GetProfiles().TryGetValue(sessionId, out var profile) ? profile.ProfileInfo : null; } /// @@ -215,10 +206,7 @@ public class LauncherController( /// Dictionary of mod name and mod details public Dictionary GetLoadedServerMods() { - return loadedMods.ToDictionary( - sptMod => sptMod.ModMetadata?.Name ?? "UNKNOWN MOD", - sptMod => sptMod.ModMetadata - ); + return loadedMods.ToDictionary(sptMod => sptMod.ModMetadata?.Name ?? "UNKNOWN MOD", sptMod => sptMod.ModMetadata); } /// diff --git a/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs b/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs index 9e7f3628..a85f95a1 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs @@ -47,10 +47,7 @@ public class LauncherV2Controller( foreach (var (templateName, template) in dbProfiles) { - result.TryAdd( - templateName, - serverLocalisationService.GetText(template.DescriptionLocaleKey) - ); + result.TryAdd(templateName, serverLocalisationService.GetText(template.DescriptionLocaleKey)); } return result; @@ -149,10 +146,7 @@ public class LauncherV2Controller( /// public Dictionary LoadedMods() { - return loadedMods.ToDictionary( - sptMod => sptMod.ModMetadata.Name, - sptMod => sptMod.ModMetadata - ); + return loadedMods.ToDictionary(sptMod => sptMod.ModMetadata.Name, sptMod => sptMod.ModMetadata); } /// @@ -187,10 +181,7 @@ public class LauncherV2Controller( { foreach (var (sessionId, profile) in saveServer.GetProfiles()) { - if ( - info.Username == profile.ProfileInfo!.Username - && info.Password == profile.ProfileInfo.Password - ) + if (info.Username == profile.ProfileInfo!.Username && info.Password == profile.ProfileInfo.Password) { return sessionId; } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/LocationController.cs b/Libraries/SPTarkov.Server.Core/Controllers/LocationController.cs index 155ad376..775bee31 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/LocationController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/LocationController.cs @@ -10,11 +10,7 @@ using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel; namespace SPTarkov.Server.Core.Controllers; [Injectable] -public class LocationController( - ISptLogger logger, - DatabaseService databaseService, - AirdropService airdropService -) +public class LocationController(ISptLogger logger, DatabaseService databaseService, AirdropService airdropService) { /// /// Handle client/locations @@ -49,11 +45,7 @@ public class LocationController( locationResult.Add(mapBase.IdField, mapBase); } - return new LocationsGenerateAllResponse - { - Locations = locationResult, - Paths = locationsFromDb.Base!.Paths, - }; + return new LocationsGenerateAllResponse { Locations = locationResult, Paths = locationsFromDb.Base!.Paths }; } /// diff --git a/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs b/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs index 8bff75fe..74ac524d 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs @@ -104,9 +104,7 @@ public class MatchController( // Set pmcs to difficulty set in pre-raid screen if override in bot config isnt enabled if (!_pmcConfig.UseDifficultyOverride) { - _pmcConfig.Difficulty = ConvertDifficultyDropdownIntoBotDifficulty( - request.WavesSettings.BotDifficulty.ToString() - ); + _pmcConfig.Difficulty = ConvertDifficultyDropdownIntoBotDifficulty(request.WavesSettings.BotDifficulty.ToString()); } } @@ -132,10 +130,7 @@ public class MatchController( /// Session/Player id /// Start raid request /// StartLocalRaidResponseData - public StartLocalRaidResponseData StartLocalRaid( - MongoId sessionId, - StartLocalRaidRequestData request - ) + public StartLocalRaidResponseData StartLocalRaid(MongoId sessionId, StartLocalRaidRequestData request) { return locationLifecycleService.StartLocalRaid(sessionId, request); } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/NoteController.cs b/Libraries/SPTarkov.Server.Core/Controllers/NoteController.cs index 4ae2a6c0..d651b522 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/NoteController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/NoteController.cs @@ -16,11 +16,7 @@ public class NoteController(EventOutputHolder eventOutputHolder) /// Add note request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse AddNote( - PmcData pmcData, - NoteActionRequest request, - MongoId sessionId - ) + public ItemEventRouterResponse AddNote(PmcData pmcData, NoteActionRequest request, MongoId sessionId) { var newNote = new Note { Time = request.Note.Time, Text = request.Note.Text }; pmcData.Notes.DataNotes.Add(newNote); @@ -34,11 +30,7 @@ public class NoteController(EventOutputHolder eventOutputHolder) /// Edit note request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse EditNote( - PmcData pmcData, - NoteActionRequest request, - MongoId sessionId - ) + public ItemEventRouterResponse EditNote(PmcData pmcData, NoteActionRequest request, MongoId sessionId) { var noteToEdit = pmcData.Notes.DataNotes[request.Index!.Value]; noteToEdit.Time = request.Note.Time; @@ -53,11 +45,7 @@ public class NoteController(EventOutputHolder eventOutputHolder) /// Delete note request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse DeleteNote( - PmcData pmcData, - NoteActionRequest request, - MongoId sessionId - ) + public ItemEventRouterResponse DeleteNote(PmcData pmcData, NoteActionRequest request, MongoId sessionId) { pmcData.Notes?.DataNotes?.RemoveAt(request.Index!.Value); diff --git a/Libraries/SPTarkov.Server.Core/Controllers/NotifierController.cs b/Libraries/SPTarkov.Server.Core/Controllers/NotifierController.cs index 3d2b5510..7a66e3d3 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/NotifierController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/NotifierController.cs @@ -8,11 +8,7 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Controllers; [Injectable] -public class NotifierController( - HttpServerHelper httpServerHelper, - NotifierHelper notifierHelper, - NotificationService notificationService -) +public class NotifierController(HttpServerHelper httpServerHelper, NotifierHelper notifierHelper, NotificationService notificationService) { protected const int PollInterval = 300; protected const int Timeout = 15000; diff --git a/Libraries/SPTarkov.Server.Core/Controllers/PresetController.cs b/Libraries/SPTarkov.Server.Core/Controllers/PresetController.cs index ff62af6c..16d553a4 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/PresetController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/PresetController.cs @@ -8,11 +8,7 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Controllers; [Injectable] -public class PresetController( - ISptLogger logger, - PresetHelper presetHelper, - DatabaseService databaseService -) +public class PresetController(ISptLogger logger, PresetHelper presetHelper, DatabaseService databaseService) { /// /// Keyed by item tpl, value = collection of preset ids diff --git a/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs b/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs index 24741c8a..d8268d2c 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs @@ -44,9 +44,7 @@ public class ProfileController( var profile = saveServer.GetProfile(sessionId); if (profile?.CharacterData == null) { - throw new Exception( - $"Unable to find character data for id: {sessionId}. Profile may be corrupt" - ); + throw new Exception($"Unable to find character data for id: {sessionId}. Profile may be corrupt"); } var pmc = profile.CharacterData.PmcData; @@ -82,8 +80,7 @@ public class ProfileController( Side = pmc.Info.Side, CurrentLevel = pmc.Info.Level, CurrentExperience = pmc.Info.Experience ?? 0, - PreviousExperience = - currentLevel == 0 ? 0 : profileHelper.GetExperience(currentLevel.Value), + PreviousExperience = currentLevel == 0 ? 0 : profileHelper.GetExperience(currentLevel.Value), NextLevel = xpToNextLevel, MaxLevel = maxLvl, Edition = profile.ProfileInfo?.Edition ?? "", @@ -127,10 +124,7 @@ public class ProfileController( /// Create profile request /// Player id /// Player id - public virtual async ValueTask CreateProfile( - ProfileCreateRequestData request, - MongoId sessionId - ) + public virtual async ValueTask CreateProfile(ProfileCreateRequestData request, MongoId sessionId) { return await createProfileService.CreateProfile(sessionId, request); } @@ -152,10 +146,7 @@ public class ProfileController( /// Validate nickname request /// Session/Player id /// - public virtual NicknameValidationResult ValidateNickname( - ValidateNicknameRequestData request, - MongoId sessionId - ) + public virtual NicknameValidationResult ValidateNickname(ValidateNicknameRequestData request, MongoId sessionId) { if (request.Nickname?.Length < 3) { @@ -177,15 +168,9 @@ public class ProfileController( /// Change nickname request /// Player id /// - public virtual NicknameValidationResult ChangeNickname( - ProfileChangeNicknameRequestData request, - MongoId sessionId - ) + public virtual NicknameValidationResult ChangeNickname(ProfileChangeNicknameRequestData request, MongoId sessionId) { - var output = ValidateNickname( - new ValidateNicknameRequestData { Nickname = request.Nickname }, - sessionId - ); + var output = ValidateNickname(new ValidateNicknameRequestData { Nickname = request.Nickname }, sessionId); if (output == NicknameValidationResult.Valid) { @@ -215,10 +200,7 @@ public class ProfileController( /// Search profiles request /// Player id /// Found profiles - public virtual List SearchProfiles( - SearchProfilesRequestData request, - MongoId sessionID - ) + public virtual List SearchProfiles(SearchProfilesRequestData request, MongoId sessionID) { var result = new List(); @@ -228,10 +210,7 @@ public class ProfileController( foreach (var profile in allProfiles) { var pmcProfile = profile?.CharacterData?.PmcData; - if ( - !pmcProfile?.Info?.LowerNickname?.Contains(request.Nickname.ToLowerInvariant()) - ?? false - ) + if (!pmcProfile?.Info?.LowerNickname?.Contains(request.Nickname.ToLowerInvariant()) ?? false) { continue; } @@ -285,21 +264,13 @@ public class ProfileController( /// Session/Player id /// Get other profile request /// GetOtherProfileResponse - public virtual GetOtherProfileResponse GetOtherProfile( - MongoId sessionId, - GetOtherProfileRequest request - ) + public virtual GetOtherProfileResponse GetOtherProfile(MongoId sessionId, GetOtherProfileRequest request) { // Find the profile by the account ID, fall back to the current player if we can't find the account var profileToView = profileHelper.GetFullProfileByAccountId(request.AccountId); - if ( - profileToView?.CharacterData?.PmcData is null - || profileToView.CharacterData.ScavData is null - ) + if (profileToView?.CharacterData?.PmcData is null || profileToView.CharacterData.ScavData is null) { - logger.Warning( - $"Unable to get profile: {request.AccountId} to show, falling back to own profile" - ); + logger.Warning($"Unable to get profile: {request.AccountId} to show, falling back to own profile"); profileToView = profileHelper.GetFullProfile(sessionId); } @@ -312,16 +283,12 @@ public class ProfileController( hideoutKeys.Add(profileToViewPmc.Inventory.HideoutCustomizationStashId); // Find hideout items e.g. posters - var hideoutRootItems = profileToViewPmc.Inventory.Items.Where(x => - hideoutKeys.Contains(x.Id) - ); + var hideoutRootItems = profileToViewPmc.Inventory.Items.Where(x => hideoutKeys.Contains(x.Id)); var itemsToReturn = new List(); foreach (var rootItems in hideoutRootItems) { // Check each root items for children and add - var itemWithChildren = profileToViewPmc.Inventory.Items.GetItemWithChildren( - rootItems.Id - ); + var itemWithChildren = profileToViewPmc.Inventory.Items.GetItemWithChildren(rootItems.Id); itemsToReturn.AddRange(itemWithChildren); } @@ -334,9 +301,7 @@ public class ProfileController( Nickname = profileToViewPmc.Info.Nickname, Side = profileToViewPmc.Info.Side, Experience = profileToViewPmc.Info.Experience, - MemberCategory = (int)( - profileToViewPmc.Info.MemberCategory ?? MemberCategory.Default - ), + MemberCategory = (int)(profileToViewPmc.Info.MemberCategory ?? MemberCategory.Default), BannedState = profileToViewPmc.Info.BannedState, BannedUntil = profileToViewPmc.Info.BannedUntil, RegistrationDate = profileToViewPmc.Info.RegistrationDate, @@ -351,11 +316,7 @@ public class ProfileController( Voice = profileToViewPmc.Customization.Voice, }, Skills = profileToViewPmc.Skills, - Equipment = new OtherProfileEquipment - { - Id = profileToViewPmc.Inventory.Equipment, - Items = profileToViewPmc.Inventory.Items, - }, + Equipment = new OtherProfileEquipment { Id = profileToViewPmc.Inventory.Equipment, Items = profileToViewPmc.Inventory.Items }, Achievements = profileToViewPmc.Achievements, FavoriteItems = profileHelper.GetOtherProfileFavorites(profileToViewPmc), PmcStats = new OtherProfileStats diff --git a/Libraries/SPTarkov.Server.Core/Controllers/QuestController.cs b/Libraries/SPTarkov.Server.Core/Controllers/QuestController.cs index 28e3dcf3..5c2482c3 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/QuestController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/QuestController.cs @@ -50,19 +50,13 @@ public class QuestController( /// Quest accepted /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse AcceptQuest( - PmcData pmcData, - AcceptQuestRequestData acceptedQuest, - MongoId sessionID - ) + public ItemEventRouterResponse AcceptQuest(PmcData pmcData, AcceptQuestRequestData acceptedQuest, MongoId sessionID) { var acceptQuestResponse = eventOutputHolder.GetOutput(sessionID); // Does quest exist in profile // Restarting a failed quest can mean quest exists in profile - var existingQuestStatus = pmcData.Quests.FirstOrDefault(x => - x.QId == acceptedQuest.QuestId - ); + var existingQuestStatus = pmcData.Quests.FirstOrDefault(x => x.QId == acceptedQuest.QuestId); if (existingQuestStatus is not null) { // Update existing @@ -74,11 +68,7 @@ public class QuestController( else { // Add new quest to server profile - var newQuest = questHelper.GetQuestReadyForProfile( - pmcData, - QuestStatusEnum.Started, - acceptedQuest - ); + var newQuest = questHelper.GetQuestReadyForProfile(pmcData, QuestStatusEnum.Started, acceptedQuest); pmcData.Quests.Add(newQuest); } @@ -88,18 +78,11 @@ public class QuestController( if (questFromDb.Conditions?.AvailableForFinish is not null) { - AddTaskConditionCountersToProfile( - questFromDb.Conditions.AvailableForFinish, - pmcData, - acceptedQuest.QuestId - ); + AddTaskConditionCountersToProfile(questFromDb.Conditions.AvailableForFinish, pmcData, acceptedQuest.QuestId); } // Get messageId of text to send to player as text message in game - var messageId = questHelper.GetMessageIdForQuestStart( - questFromDb.StartedMessageText, - questFromDb.Description - ); + var messageId = questHelper.GetMessageIdForQuestStart(questFromDb.StartedMessageText, questFromDb.Description); // Apply non-item rewards to profile + return item rewards var startedQuestRewardItems = questRewardHelper.ApplyQuestReward( @@ -117,16 +100,11 @@ public class QuestController( MessageType.QuestStart, messageId, startedQuestRewardItems.ToList(), - timeUtil.GetHoursAsSeconds( - (int)questHelper.GetMailItemRedeemTimeHoursForProfile(pmcData) - ) + timeUtil.GetHoursAsSeconds((int)questHelper.GetMailItemRedeemTimeHoursForProfile(pmcData)) ); // Having accepted new quest, look for newly unlocked quests and inform client of them - var newlyAccessibleQuests = questHelper.GetNewlyAccessibleQuestsWhenStartingQuest( - acceptedQuest.QuestId, - sessionID - ); + var newlyAccessibleQuests = questHelper.GetNewlyAccessibleQuestsWhenStartingQuest(acceptedQuest.QuestId, sessionID); if (newlyAccessibleQuests.Count > 0) { acceptQuestResponse.ProfileChanges[sessionID].Quests.AddRange(newlyAccessibleQuests); @@ -142,17 +120,9 @@ public class QuestController( /// Conditions to iterate over and possibly add to profile /// Players PMC profile /// Quest where conditions originated - protected void AddTaskConditionCountersToProfile( - IEnumerable questConditionsToAdd, - PmcData pmcData, - MongoId questId - ) + protected void AddTaskConditionCountersToProfile(IEnumerable questConditionsToAdd, PmcData pmcData, MongoId questId) { - foreach ( - var condition in questConditionsToAdd.Where(condition => - condition.ConditionType == "SellItemToTrader" - ) - ) + foreach (var condition in questConditionsToAdd.Where(condition => condition.ConditionType == "SellItemToTrader")) { if (pmcData.TaskConditionCounters.TryGetValue(condition.Id, out _)) { @@ -185,11 +155,7 @@ public class QuestController( /// Complete quest request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse CompleteQuest( - PmcData pmcData, - CompleteQuestRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse CompleteQuest(PmcData pmcData, CompleteQuestRequestData request, MongoId sessionId) { return questHelper.CompleteQuest(pmcData, request, sessionId); } @@ -202,11 +168,7 @@ public class QuestController( /// Handover request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse HandoverQuest( - PmcData pmcData, - HandoverQuestRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse HandoverQuest(PmcData pmcData, HandoverQuestRequestData request, MongoId sessionID) { var quest = questHelper.GetQuestFromDb(request.QuestId, pmcData); HashSet handoverQuestTypes = ["HandoverItem", "WeaponAssembly"]; @@ -217,11 +179,7 @@ public class QuestController( // Decrement number of items handed in QuestCondition? handoverRequirements = null; - foreach ( - var condition in quest.Conditions.AvailableForFinish.Where(condition => - condition.Id == request.ConditionId - ) - ) + foreach (var condition in quest.Conditions.AvailableForFinish.Where(condition => condition.Id == request.ConditionId)) { // Not a handover quest type, skip if (!handoverQuestTypes.Contains(condition.ConditionType)) @@ -261,51 +219,26 @@ public class QuestController( if (isItemHandoverQuest && handedInCount == 0) { - return ShowRepeatableQuestInvalidConditionError( - request.QuestId, - request.ConditionId, - output - ); + return ShowRepeatableQuestInvalidConditionError(request.QuestId, request.ConditionId, output); } var totalItemCountToRemove = 0d; foreach (var itemHandover in request.Items) { - var matchingItemInProfile = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == itemHandover.Id - ); - if ( - !( - matchingItemInProfile is not null - && handoverRequirements.Target.List.Contains(matchingItemInProfile.Template) - ) - ) + var matchingItemInProfile = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == itemHandover.Id); + if (!(matchingItemInProfile is not null && handoverRequirements.Target.List.Contains(matchingItemInProfile.Template))) // Item handed in by player doesn't match what was requested { - return ShowQuestItemHandoverMatchError( - request, - matchingItemInProfile, - handoverRequirements, - output - ); + return ShowQuestItemHandoverMatchError(request, matchingItemInProfile, handoverRequirements, output); } // Remove the right quantity of given items - var itemCountToRemove = Math.Min( - itemHandover.Count ?? 0, - handedInCount - totalItemCountToRemove - ); + var itemCountToRemove = Math.Min(itemHandover.Count ?? 0, handedInCount - totalItemCountToRemove); totalItemCountToRemove += itemCountToRemove; if (itemHandover.Count - itemCountToRemove > 0) { // Remove single item with no children - questHelper.ChangeItemStack( - pmcData, - itemHandover.Id, - (int)(itemHandover.Count - itemCountToRemove), - sessionID, - output - ); + questHelper.ChangeItemStack(pmcData, itemHandover.Id, (int)(itemHandover.Count - itemCountToRemove), sessionID, output); // Complete - handedInCount == totalItemCountToRemove if (Math.Abs(totalItemCountToRemove - handedInCount) < 0.01) @@ -316,15 +249,11 @@ public class QuestController( else { // Remove item with children - var toRemove = pmcData - .Inventory.Items.GetItemWithChildrenTpls(itemHandover.Id) - .ToHashSet(); + var toRemove = pmcData.Inventory.Items.GetItemWithChildrenTpls(itemHandover.Id).ToHashSet(); var index = pmcData.Inventory.Items.Count; // Important: don't tell the client to remove the attachments, it will handle it - output - .ProfileChanges[sessionID] - .Items.DeletedItems.Add(new DeletedItem { Id = itemHandover.Id }); + output.ProfileChanges[sessionID].Items.DeletedItems.Add(new DeletedItem { Id = itemHandover.Id }); // Important: loop backward when removing items from the array we're looping on while (index-- > 0) @@ -339,9 +268,7 @@ public class QuestController( // element `location` properties of the parent so they are sequential, while retaining order if (removedItem.Location?.GetType() == typeof(int)) { - var childItems = pmcData.Inventory.Items.GetItemWithChildren( - removedItem.ParentId - ); + var childItems = pmcData.Inventory.Items.GetItemWithChildren(removedItem.ParentId); childItems.RemoveAt(0); // Remove the parent // Sort by the current `location` and update @@ -357,12 +284,7 @@ public class QuestController( } } - UpdateProfileTaskConditionCounterValue( - pmcData, - request.ConditionId, - request.QuestId, - totalItemCountToRemove - ); + UpdateProfileTaskConditionCounterValue(pmcData, request.ConditionId, request.QuestId, totalItemCountToRemove); return output; } @@ -426,12 +348,7 @@ public class QuestController( /// Backend counter id to update /// Quest id counter is associated with /// Value to increment the backend counter with - protected void UpdateProfileTaskConditionCounterValue( - PmcData pmcData, - MongoId conditionId, - MongoId questId, - double counterValue - ) + protected void UpdateProfileTaskConditionCounterValue(PmcData pmcData, MongoId conditionId, MongoId questId, double counterValue) { if (pmcData.TaskConditionCounters.GetValueOrDefault(conditionId) != null) { diff --git a/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs b/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs index d2021003..3278e7f1 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs @@ -62,8 +62,7 @@ public class RagfairController( var pmcProfile = profile.CharacterData.PmcData; if ( pmcProfile.RagfairInfo is not null - && pmcProfile.Info.Level - >= databaseService.GetGlobals().Configuration.RagFair.MinUserLevel + && pmcProfile.Info.Level >= databaseService.GetGlobals().Configuration.RagFair.MinUserLevel ) { ragfairOfferHelper.ProcessOffersOnProfile(sessionId); @@ -91,21 +90,12 @@ public class RagfairController( }; // Get all offers ready for sorting/filtering below - result.Offers = GetOffersForSearchType( - searchRequest, - itemsToAdd, - traderAssorts, - profile.CharacterData.PmcData - ); + result.Offers = GetOffersForSearchType(searchRequest, itemsToAdd, traderAssorts, profile.CharacterData.PmcData); // Client requested a category refresh if (searchRequest.UpdateOfferCount.GetValueOrDefault(false)) { - result.Categories = GetSpecificCategories( - profile.CharacterData.PmcData, - searchRequest, - result.Offers - ); + result.Categories = GetSpecificCategories(profile.CharacterData.PmcData, searchRequest, result.Offers); } // Adjust index value of offers found to start at 0 @@ -217,10 +207,7 @@ public class RagfairController( var assortId = offerRootItem.Id; // No trader found in profile, create a blank record for them - var existsInProfile = !fullProfile.TraderPurchases.TryAdd( - offer.User.Id, - new Dictionary() - ); + var existsInProfile = !fullProfile.TraderPurchases.TryAdd(offer.User.Id, new Dictionary()); if (!existsInProfile) { // Not purchased by player before, use value from assort data @@ -266,16 +253,10 @@ public class RagfairController( /// Client search request data /// Ragfair offers to get categories for /// Record with templates + counts - protected Dictionary GetSpecificCategories( - PmcData pmcProfile, - SearchRequestData searchRequest, - List offers - ) + protected Dictionary GetSpecificCategories(PmcData pmcProfile, SearchRequestData searchRequest, List offers) { // Linked/required search categories - var playerHasFleaUnlocked = - pmcProfile.Info.Level - >= databaseService.GetGlobals().Configuration.RagFair.MinUserLevel; + var playerHasFleaUnlocked = pmcProfile.Info.Level >= databaseService.GetGlobals().Configuration.RagFair.MinUserLevel; List offerPool; if (IsLinkedSearch(searchRequest) || IsRequiredSearch(searchRequest)) { @@ -297,11 +278,7 @@ public class RagfairController( return []; } - return ragfairServer.GetAllActiveCategories( - playerHasFleaUnlocked, - searchRequest, - offerPool - ); + return ragfairServer.GetAllActiveCategories(playerHasFleaUnlocked, searchRequest, offerPool); } /// @@ -342,12 +319,7 @@ public class RagfairController( // Searching for items in preset menu if (searchRequest.BuildCount > 0) { - return ragfairOfferHelper.GetOffersForBuild( - searchRequest, - itemsToAdd, - traderAssorts, - pmcProfile - ); + return ragfairOfferHelper.GetOffersForBuild(searchRequest, itemsToAdd, traderAssorts, pmcProfile); } if (searchRequest.NeededSearchId != null && !searchRequest.NeededSearchId.Value.IsEmpty()) @@ -356,12 +328,7 @@ public class RagfairController( } // Searching for general items - return ragfairOfferHelper.GetValidOffers( - searchRequest, - itemsToAdd, - traderAssorts, - pmcProfile - ); + return ragfairOfferHelper.GetValidOffers(searchRequest, itemsToAdd, traderAssorts, pmcProfile); } /// @@ -370,10 +337,7 @@ public class RagfairController( /// Client request object /// OPTIONAL - Should trader offers be ignored in the calculation /// min/avg/max values for an item based on flea offers available - public GetItemPriceResult GetItemMinAvgMaxFleaPriceValues( - GetMarketPriceRequestData getPriceRequest, - bool ignoreTraderOffers = true - ) + public GetItemPriceResult GetItemMinAvgMaxFleaPriceValues(GetMarketPriceRequestData getPriceRequest, bool ignoreTraderOffers = true) { // Get all items of tpl var offers = ragfairOfferService.GetOffersOfType(getPriceRequest.TemplateId); @@ -411,11 +375,7 @@ public class RagfairController( }; } - protected double GetAveragePriceFromOffers( - IEnumerable offers, - MinMax minMax, - bool ignoreTraderOffers - ) + protected double GetAveragePriceFromOffers(IEnumerable offers, MinMax minMax, bool ignoreTraderOffers) { var sum = 0d; var totalOfferCount = 0; @@ -434,9 +394,7 @@ public class RagfairController( } // Figure out how many items the requirementsCost is applying to, and what the per-item price is - var offerItemCount = offer.SellInOnePiece.GetValueOrDefault(false) - ? offer.Items.First().Upd?.StackObjectsCount ?? 1 - : 1; + var offerItemCount = offer.SellInOnePiece.GetValueOrDefault(false) ? offer.Items.First().Upd?.StackObjectsCount ?? 1 : 1; var perItemPrice = offer.RequirementsCost / offerItemCount; // Handle min/max calculations based on the per-item price @@ -468,30 +426,20 @@ public class RagfairController( /// Flea list creation offer /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse AddPlayerOffer( - PmcData pmcData, - AddOfferRequestData offerRequest, - MongoId sessionID - ) + public ItemEventRouterResponse AddPlayerOffer(PmcData pmcData, AddOfferRequestData offerRequest, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); var fullProfile = profileHelper.GetFullProfile(sessionID); if (!IsValidPlayerOfferRequest(offerRequest)) { - return httpResponseUtil.AppendErrorToOutput( - output, - "Unable to add offer, check server for error" - ); + return httpResponseUtil.AppendErrorToOutput(output, "Unable to add offer, check server for error"); } var typeOfOffer = GetOfferType(offerRequest); if (typeOfOffer == FleaOfferType.UNKNOWN) { - return httpResponseUtil.AppendErrorToOutput( - output, - $"Unknown offer type: {typeOfOffer}, cannot list item on flea" - ); + return httpResponseUtil.AppendErrorToOutput(output, $"Unknown offer type: {typeOfOffer}, cannot list item on flea"); } switch (typeOfOffer) @@ -504,10 +452,7 @@ public class RagfairController( return CreatePackOffer(sessionID, offerRequest, fullProfile, output); case FleaOfferType.UNKNOWN: default: - return httpResponseUtil.AppendErrorToOutput( - output, - $"Unknown offer type: {typeOfOffer}, cannot list item on flea" - ); + return httpResponseUtil.AppendErrorToOutput(output, $"Unknown offer type: {typeOfOffer}, cannot list item on flea"); } } @@ -527,9 +472,7 @@ public class RagfairController( if (offerRequest.Requirements is null) { - logger.Error( - localisationService.GetText("ragfair-unable_to_place_offer_with_no_requirements") - ); + logger.Error(localisationService.GetText("ragfair-unable_to_place_offer_with_no_requirements")); return false; } @@ -613,9 +556,7 @@ public class RagfairController( // Average offer price for single item (or whole weapon) // MUST occur prior to CreatePlayerOffer(), otherwise offer ends up in averages calculation - var averages = GetItemMinAvgMaxFleaPriceValues( - new GetMarketPriceRequestData { TemplateId = firstInventoryItem.Template } - ); + var averages = GetItemMinAvgMaxFleaPriceValues(new GetMarketPriceRequestData { TemplateId = firstInventoryItem.Template }); // Create flea object var offer = CreatePlayerOffer(sessionID, offerRequest.Requirements, inventoryItems, false); @@ -625,12 +566,7 @@ public class RagfairController( // Check for and apply item price modifer if it exists in config var averageOfferPrice = averages.Avg; - if ( - _ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue( - rootOfferItem.Template, - out var itemPriceModifer - ) - ) + if (_ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue(rootOfferItem.Template, out var itemPriceModifer)) { averageOfferPrice *= itemPriceModifer; } @@ -645,11 +581,7 @@ public class RagfairController( var playerListedPriceInRub = CalculateRequirementsPriceInRub(offerRequest.Requirements); // Roll sale chance - var sellChancePercent = ragfairSellHelper.CalculateSellChance( - averageOfferPrice.Value, - playerListedPriceInRub, - qualityMultiplier - ); + var sellChancePercent = ragfairSellHelper.CalculateSellChance(averageOfferPrice.Value, playerListedPriceInRub, qualityMultiplier); // Create array of sell times for items listed offer.SellResults = ragfairSellHelper.RollForSale(sellChancePercent, (int)stackCountTotal); @@ -707,9 +639,7 @@ public class RagfairController( // multi-offers are all the same item, // Get first item and its children and use as template - var firstInventoryItemAndChildren = pmcData.Inventory.Items.GetItemWithChildren( - offerRequest.Items.FirstOrDefault() - ); + var firstInventoryItemAndChildren = pmcData.Inventory.Items.GetItemWithChildren(offerRequest.Items.FirstOrDefault()); // Find items to be listed on flea (+ children) from player inventory var result = GetItemsToListOnFleaFromInventory(pmcData, offerRequest.Items); @@ -729,29 +659,17 @@ public class RagfairController( // Single price for an item // MUST occur prior to CreatePlayerOffer(), otherwise offer ends up in averages calculation - var averages = GetItemMinAvgMaxFleaPriceValues( - new GetMarketPriceRequestData { TemplateId = firstInventoryItem.Template } - ); + var averages = GetItemMinAvgMaxFleaPriceValues(new GetMarketPriceRequestData { TemplateId = firstInventoryItem.Template }); var singleItemPrice = averages.Avg; // Create flea object - var offer = CreatePlayerOffer( - sessionID, - offerRequest.Requirements, - firstInventoryItemAndChildren, - true - ); + var offer = CreatePlayerOffer(sessionID, offerRequest.Requirements, firstInventoryItemAndChildren, true); // This is the item that will be listed on flea, has merged stackObjectCount var newRootOfferItem = offer.Items[0]; // TODO: add logic like single/multi offers to find root item // Check for and apply item price modifer if it exists in config - if ( - _ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue( - newRootOfferItem.Template, - out var itemPriceModifer - ) - ) + if (_ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue(newRootOfferItem.Template, out var itemPriceModifer)) { singleItemPrice *= itemPriceModifer; } @@ -773,11 +691,7 @@ public class RagfairController( ); // Create array of sell times for items listed + sell all at once as it's a pack - offer.SellResults = ragfairSellHelper.RollForSale( - sellChancePercent, - (int)stackCountTotal, - true - ); + offer.SellResults = ragfairSellHelper.RollForSale(sellChancePercent, (int)stackCountTotal, true); // Subtract flea market fee from stash if (_ragfairConfig.Sell.Fees) @@ -831,10 +745,7 @@ public class RagfairController( // Find items to be listed on flea from player inventory var inventoryItemsToSell = GetItemsToListOnFleaFromInventory(pmcData, offerRequest.Items); - if ( - inventoryItemsToSell.Items is null - || !string.IsNullOrEmpty(inventoryItemsToSell.ErrorMessage) - ) + if (inventoryItemsToSell.Items is null || !string.IsNullOrEmpty(inventoryItemsToSell.ErrorMessage)) { httpResponseUtil.AppendErrorToOutput(output, inventoryItemsToSell.ErrorMessage); } @@ -846,9 +757,7 @@ public class RagfairController( // Average offer price for single item (or whole weapon) // MUST occur prior to CreatePlayerOffer(), otherwise offer ends up in averages calculation - var averages = GetItemMinAvgMaxFleaPriceValues( - new GetMarketPriceRequestData { TemplateId = firstItemToSell.Template } - ); + var averages = GetItemMinAvgMaxFleaPriceValues(new GetMarketPriceRequestData { TemplateId = firstItemToSell.Template }); var averageOfferPriceSingleItem = averages.Avg; // Checks are done, create offer @@ -866,12 +775,7 @@ public class RagfairController( var qualityMultiplier = itemHelper.GetItemQualityModifierForItems(offer.Items, true); // Check for and apply item price modifer if it exists in config - if ( - _ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue( - offerRootItem.Template, - out var itemPriceModifer - ) - ) + if (_ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue(offerRootItem.Template, out var itemPriceModifer)) { averageOfferPriceSingleItem *= itemPriceModifer; } @@ -941,9 +845,7 @@ public class RagfairController( { // Get tax from cache hydrated earlier by client, if that's missing fall back to server calculation (inaccurate) var requestRootItemId = offerRequest.Items.FirstOrDefault(); - var storedClientTaxValue = ragfairTaxService.GetStoredClientOfferTaxValueById( - requestRootItemId - ); + var storedClientTaxValue = ragfairTaxService.GetStoredClientOfferTaxValueById(requestRootItemId); var tax = storedClientTaxValue is not null ? storedClientTaxValue.Fee : ragfairTaxService.CalculateTax( @@ -956,9 +858,7 @@ public class RagfairController( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Offer tax to charge: {tax}, pulled from client: {storedClientTaxValue.Count is not null}" - ); + logger.Debug($"Offer tax to charge: {tax}, pulled from client: {storedClientTaxValue.Count is not null}"); } // Cleanup of cache now we've used the tax value from it @@ -968,10 +868,7 @@ public class RagfairController( paymentService.PayMoney(pmcData, buyTradeRequest, sessionId, output); if (output.Warnings.Count > 0) { - httpResponseUtil.AppendErrorToOutput( - output, - localisationService.GetText("ragfair-unable_to_pay_commission_fee", tax) - ); + httpResponseUtil.AppendErrorToOutput(output, localisationService.GetText("ragfair-unable_to_pay_commission_fee", tax)); return true; // Fee failed } @@ -986,12 +883,7 @@ public class RagfairController( /// Item(s) to list on flea (with children) /// Is this a pack offer /// RagfairOffer - protected RagfairOffer CreatePlayerOffer( - MongoId sessionId, - List requirements, - List items, - bool sellInOnePiece - ) + protected RagfairOffer CreatePlayerOffer(MongoId sessionId, List requirements, List items, bool sellInOnePiece) { const int loyalLevel = 1; var formattedItems = items.Select(item => @@ -1039,19 +931,14 @@ public class RagfairController( { return requirements.Sum(requirement => { - if ( - requirement.Template.IsEmpty() - || !requirement.Count.HasValue - || requirement.Count == 0 - ) + if (requirement.Template.IsEmpty() || !requirement.Count.HasValue || requirement.Count == 0) { return 0; } return paymentHelper.IsMoneyTpl(requirement.Template) ? handbookHelper.InRUB(requirement.Count.Value, requirement.Template) - : itemHelper.GetDynamicItemPrice(requirement.Template).Value - * requirement.Count.Value; + : itemHelper.GetDynamicItemPrice(requirement.Template).Value * requirement.Count.Value; }); } @@ -1075,17 +962,10 @@ public class RagfairController( var rootItem = pmcData.Inventory?.Items?.FirstOrDefault(i => i.Id == itemId); if (rootItem is null) { - errorMessage = localisationService.GetText( - "ragfair-unable_to_find_item_in_inventory", - new { id = itemId.ToString() } - ); + errorMessage = localisationService.GetText("ragfair-unable_to_find_item_in_inventory", new { id = itemId.ToString() }); logger.Error(errorMessage); - return new GetItemsToListOnFleaFromInventoryResult - { - Items = itemsToReturn, - ErrorMessage = errorMessage, - }; + return new GetItemsToListOnFleaFromInventoryResult { Items = itemsToReturn, ErrorMessage = errorMessage }; } rootItem.FixItemStackCount(); @@ -1095,19 +975,13 @@ public class RagfairController( if (itemsToReturn.Count == 0) { - errorMessage = localisationService.GetText( - "ragfair-unable_to_find_requested_items_in_inventory" - ); + errorMessage = localisationService.GetText("ragfair-unable_to_find_requested_items_in_inventory"); logger.Error(errorMessage); return new GetItemsToListOnFleaFromInventoryResult { ErrorMessage = errorMessage }; } - return new GetItemsToListOnFleaFromInventoryResult - { - Items = itemsToReturn, - ErrorMessage = errorMessage, - }; + return new GetItemsToListOnFleaFromInventoryResult { Items = itemsToReturn, ErrorMessage = errorMessage }; } /// @@ -1126,10 +1000,7 @@ public class RagfairController( if (playerProfileOffers is null) { logger.Warning( - localisationService.GetText( - "ragfair-unable_to_remove_offer_not_found_in_profile", - new { profileId = sessionId, offerId } - ) + localisationService.GetText("ragfair-unable_to_remove_offer_not_found_in_profile", new { profileId = sessionId, offerId }) ); pmcData.RagfairInfo.Offers = []; @@ -1138,14 +1009,9 @@ public class RagfairController( var playerOffer = playerProfileOffers?.FirstOrDefault(x => x.Id == offerId); if (playerOffer is null) { - logger.Error( - localisationService.GetText("ragfair-offer_not_found_in_profile", new { offerId }) - ); + logger.Error(localisationService.GetText("ragfair-offer_not_found_in_profile", new { offerId })); - return httpResponseUtil.AppendErrorToOutput( - output, - localisationService.GetText("ragfair-offer_not_found_in_profile_short") - ); + return httpResponseUtil.AppendErrorToOutput(output, localisationService.GetText("ragfair-offer_not_found_in_profile_short")); } // Only reduce time to end if time remaining is greater than what we would set it to @@ -1157,9 +1023,7 @@ public class RagfairController( playerOffer.EndTime = (long?)Math.Round((double)newEndTime); } - logger.Debug( - $"Flagged player offer: {offerId} for expiry in: {TimeSpan.FromTicks(playerOffer.EndTime.Value).ToString()}" - ); + logger.Debug($"Flagged player offer: {offerId} for expiry in: {TimeSpan.FromTicks(playerOffer.EndTime.Value).ToString()}"); return output; } @@ -1170,10 +1034,7 @@ public class RagfairController( /// Extend time request /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse ExtendOffer( - ExtendOfferRequestData extendRequest, - MongoId sessionId - ) + public ItemEventRouterResponse ExtendOffer(ExtendOfferRequestData extendRequest, MongoId sessionId) { var output = eventOutputHolder.GetOutput(sessionId); @@ -1184,16 +1045,8 @@ public class RagfairController( if (playerOfferIndex == -1) { - logger.Warning( - localisationService.GetText( - "ragfair-offer_not_found_in_profile", - new { offerId = extendRequest.OfferId } - ) - ); - return httpResponseUtil.AppendErrorToOutput( - output, - localisationService.GetText("ragfair-offer_not_found_in_profile_short") - ); + logger.Warning(localisationService.GetText("ragfair-offer_not_found_in_profile", new { offerId = extendRequest.OfferId })); + return httpResponseUtil.AppendErrorToOutput(output, localisationService.GetText("ragfair-offer_not_found_in_profile_short")); } var playerOffer = playerOffers[playerOfferIndex]; @@ -1205,8 +1058,7 @@ public class RagfairController( var sellInOncePiece = playerOffer.SellInOnePiece.GetValueOrDefault(false); if (!sellInOncePiece) { - count = (int) - playerOffer.Items.Sum(offerItem => offerItem.Upd?.StackObjectsCount ?? 0); + count = (int)playerOffer.Items.Sum(offerItem => offerItem.Upd?.StackObjectsCount ?? 0); } var tax = ragfairTaxService.CalculateTax( @@ -1221,10 +1073,7 @@ public class RagfairController( paymentService.PayMoney(pmcData, request, sessionId, output); if (output.Warnings.Count > 0) { - return httpResponseUtil.AppendErrorToOutput( - output, - localisationService.GetText("ragfair-unable_to_pay_commission_fee") - ); + return httpResponseUtil.AppendErrorToOutput(output, localisationService.GetText("ragfair-unable_to_pay_commission_fee")); } } @@ -1240,19 +1089,13 @@ public class RagfairController( /// What currency: RUB, EURO, USD /// Amount of currency /// ProcessBuyTradeRequestData - protected ProcessBuyTradeRequestData CreateBuyTradeRequestObject( - CurrencyType currency, - double value - ) + protected ProcessBuyTradeRequestData CreateBuyTradeRequestObject(CurrencyType currency, double value) { return new ProcessBuyTradeRequestData { TransactionId = "ragfair", Action = "TradingConfirm", - SchemeItems = - [ - new IdWithCount { Id = currency.GetCurrencyTpl(), Count = Math.Round(value) }, - ], + SchemeItems = [new IdWithCount { Id = currency.GetCurrencyTpl(), Count = Math.Round(value) }], Type = "", ItemId = MongoId.Empty(), Count = 0, diff --git a/Libraries/SPTarkov.Server.Core/Controllers/RepairController.cs b/Libraries/SPTarkov.Server.Core/Controllers/RepairController.cs index bfb0d764..223842e7 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/RepairController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/RepairController.cs @@ -19,32 +19,16 @@ public class RepairController(EventOutputHolder eventOutputHolder, RepairService /// endpoint request data /// player profile /// ItemEventRouterResponse - public ItemEventRouterResponse TraderRepair( - MongoId sessionID, - TraderRepairActionDataRequest request, - PmcData pmcData - ) + public ItemEventRouterResponse TraderRepair(MongoId sessionID, TraderRepairActionDataRequest request, PmcData pmcData) { var output = eventOutputHolder.GetOutput(sessionID); // find the item to repair foreach (var repairItem in request.RepairItems) { - var repairDetails = repairService.RepairItemByTrader( - sessionID, - pmcData, - repairItem, - request.TraderId - ); + var repairDetails = repairService.RepairItemByTrader(sessionID, pmcData, repairItem, request.TraderId); - repairService.PayForRepair( - sessionID, - pmcData, - repairItem.Id, - repairDetails.RepairCost.Value, - request.TraderId, - output - ); + repairService.PayForRepair(sessionID, pmcData, repairItem.Id, repairDetails.RepairCost.Value, request.TraderId, output); if (output.Warnings?.Count > 0) { @@ -69,22 +53,12 @@ public class RepairController(EventOutputHolder eventOutputHolder, RepairService /// endpoint request data /// player profile /// ItemEventRouterResponse - public ItemEventRouterResponse RepairWithKit( - MongoId sessionId, - RepairActionDataRequest body, - PmcData pmcData - ) + public ItemEventRouterResponse RepairWithKit(MongoId sessionId, RepairActionDataRequest body, PmcData pmcData) { var output = eventOutputHolder.GetOutput(sessionId); // repair item - var repairDetails = repairService.RepairItemByKit( - sessionId, - pmcData, - body.RepairKitsInfo, - body.Target.Value, - output - ); + var repairDetails = repairService.RepairItemByKit(sessionId, pmcData, body.RepairKitsInfo, body.Target.Value, output); repairService.AddBuffToItem(repairDetails, pmcData); diff --git a/Libraries/SPTarkov.Server.Core/Controllers/RepeatableQuestController.cs b/Libraries/SPTarkov.Server.Core/Controllers/RepeatableQuestController.cs index 7cd7837e..d498ce0b 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/RepeatableQuestController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/RepeatableQuestController.cs @@ -46,12 +46,7 @@ public class RepeatableQuestController( ICloner cloner ) { - protected static readonly FrozenSet _questTypes = - [ - "PickUp", - "Exploration", - "Elimination", - ]; + protected static readonly FrozenSet _questTypes = ["PickUp", "Exploration", "Elimination"]; protected readonly QuestConfig QuestConfig = configServer.GetConfig(); /// @@ -63,18 +58,10 @@ public class RepeatableQuestController( /// Repeatable quest accepted /// Session/Player id /// ItemEventRouterResponse - public ItemEventRouterResponse AcceptRepeatableQuest( - PmcData pmcData, - AcceptQuestRequestData acceptedQuest, - MongoId sessionID - ) + public ItemEventRouterResponse AcceptRepeatableQuest(PmcData pmcData, AcceptQuestRequestData acceptedQuest, MongoId sessionID) { // Create and store quest status object inside player profile - var newRepeatableQuest = questHelper.GetQuestReadyForProfile( - pmcData, - QuestStatusEnum.Started, - acceptedQuest - ); + var newRepeatableQuest = questHelper.GetQuestReadyForProfile(pmcData, QuestStatusEnum.Started, acceptedQuest); pmcData.Quests.Add(newRepeatableQuest); // Look for the generated quest cache in profile.RepeatableQuests @@ -82,22 +69,14 @@ public class RepeatableQuestController( if (repeatableQuestProfile is null) { logger.Error( - serverLocalisationService.GetText( - "repeatable-accepted_repeatable_quest_not_found_in_active_quests", - acceptedQuest.QuestId - ) + serverLocalisationService.GetText("repeatable-accepted_repeatable_quest_not_found_in_active_quests", acceptedQuest.QuestId) ); - throw new Exception( - serverLocalisationService.GetText("repeatable-unable_to_accept_quest_see_log") - ); + throw new Exception(serverLocalisationService.GetText("repeatable-unable_to_accept_quest_see_log")); } // Some scav quests need to be added to scav profile for them to show up in-raid - if ( - repeatableQuestProfile.Side == "Scav" - && _questTypes.Contains(repeatableQuestProfile.Type.ToString()) - ) + if (repeatableQuestProfile.Side == "Scav" && _questTypes.Contains(repeatableQuestProfile.Type.ToString())) { var fullProfile = profileHelper.GetFullProfile(sessionID); @@ -117,11 +96,7 @@ public class RepeatableQuestController( /// Change quest request /// Session/Player id /// - public ItemEventRouterResponse ChangeRepeatableQuest( - PmcData pmcData, - RepeatableQuestChangeRequest changeRequest, - MongoId sessionID - ) + public ItemEventRouterResponse ChangeRepeatableQuest(PmcData pmcData, RepeatableQuestChangeRequest changeRequest, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); @@ -134,9 +109,7 @@ public class RepeatableQuestController( if (repeatables.RepeatableType is null || repeatables.Quest is null) { // Unable to find quest being replaced - var message = serverLocalisationService.GetText( - "quest-unable_to_find_repeatable_to_replace" - ); + var message = serverLocalisationService.GetText("quest-unable_to_find_repeatable_to_replace"); logger.Error(message); return httpResponseUtil.AppendErrorToOutput(output, message); @@ -154,17 +127,13 @@ public class RepeatableQuestController( .ToList(); // Save for later cost calculations - var previousChangeRequirement = cloner.Clone( - repeatablesOfTypeInProfile.ChangeRequirement[changeRequest.QuestId] - ); + var previousChangeRequirement = cloner.Clone(repeatablesOfTypeInProfile.ChangeRequirement[changeRequest.QuestId]); // Delete the replaced quest change requirement data as we're going to add new data below repeatablesOfTypeInProfile.ChangeRequirement.Remove(changeRequest.QuestId); // Get config for this repeatable subtype (daily/weekly/scav) - var repeatableConfig = QuestConfig.RepeatableQuests.FirstOrDefault(config => - config.Name == repeatablesOfTypeInProfile.Name - ); + var repeatableConfig = QuestConfig.RepeatableQuests.FirstOrDefault(config => config.Name == repeatablesOfTypeInProfile.Name); // If the configuration dictates to replace with the same quest type, adjust the available quest types if (repeatableConfig?.KeepDailyQuestTypeOnReplacement is not null) @@ -173,16 +142,8 @@ public class RepeatableQuestController( } // Generate meta-data for what type/level range of quests can be generated for player - var allowedQuestTypes = GenerateQuestPool( - repeatableConfig, - pmcData.Info.Level.GetValueOrDefault(1) - ); - var newRepeatableQuest = AttemptToGenerateRepeatableQuest( - sessionID, - pmcData, - allowedQuestTypes, - repeatableConfig - ); + var allowedQuestTypes = GenerateQuestPool(repeatableConfig, pmcData.Info.Level.GetValueOrDefault(1)); + var newRepeatableQuest = AttemptToGenerateRepeatableQuest(sessionID, pmcData, allowedQuestTypes, repeatableConfig); if (newRepeatableQuest is null) { // Unable to find quest being replaced @@ -218,11 +179,7 @@ public class RepeatableQuestController( }; // Check if we should charge player for replacing quest - var isFreeToReplace = UseFreeRefreshIfAvailable( - fullProfile, - repeatablesOfTypeInProfile, - repeatableTypeLower - ); + var isFreeToReplace = UseFreeRefreshIfAvailable(fullProfile, repeatablesOfTypeInProfile, repeatableTypeLower); if (!isFreeToReplace) { // Reduce standing with trader for not doing their quest @@ -233,17 +190,8 @@ public class RepeatableQuestController( foreach (var cost in previousChangeRequirement.ChangeCost) { // Not free, Charge player + apply charisma bonus to cost of replacement - cost.Count = (int) - Math.Truncate( - cost.Count.Value * (1 - (Math.Truncate(charismaBonus / 100) * 0.001)) - ); - paymentService.AddPaymentToOutput( - pmcData, - cost.TemplateId, - cost.Count.Value, - sessionID, - output - ); + cost.Count = (int)Math.Truncate(cost.Count.Value * (1 - (Math.Truncate(charismaBonus / 100) * 0.001))); + paymentService.AddPaymentToOutput(pmcData, cost.TemplateId, cost.Count.Value, sessionID, output); if (output.Warnings.Count > 0) { return output; @@ -302,11 +250,7 @@ public class RepeatableQuestController( /// Can be daily / weekly / scav repeatable /// Subtype of repeatable quest: daily / weekly / scav /// Is the repeatable being replaced for free - protected bool UseFreeRefreshIfAvailable( - SptProfile? fullProfile, - PmcDataRepeatableQuest repeatableSubType, - string repeatableTypeName - ) + protected bool UseFreeRefreshIfAvailable(SptProfile? fullProfile, PmcDataRepeatableQuest repeatableSubType, string repeatableTypeName) { // No free refreshes, exit early if (repeatableSubType.FreeChangesAvailable <= 0) @@ -318,9 +262,7 @@ public class RepeatableQuestController( } // Only certain game versions have access to free refreshes - var hasAccessToFreeRefreshSystem = profileHelper.HasAccessToRepeatableFreeRefreshSystem( - fullProfile.CharacterData.PmcData - ); + var hasAccessToFreeRefreshSystem = profileHelper.HasAccessToRepeatableFreeRefreshSystem(fullProfile.CharacterData.PmcData); // If the player has access and available refreshes: if (hasAccessToFreeRefreshSystem) @@ -345,10 +287,7 @@ public class RepeatableQuestController( /// /// repeatables that have the replaced and new quest /// Id of the replaced quest - protected void CleanUpRepeatableChangeRequirements( - PmcDataRepeatableQuest repeatablesOfTypeInProfile, - string replacedQuestId - ) + protected void CleanUpRepeatableChangeRequirements(PmcDataRepeatableQuest repeatablesOfTypeInProfile, string replacedQuestId) { if (repeatablesOfTypeInProfile.ActiveQuests.Count == 1) // Only one repeatable quest being replaced (e.g. scav_daily), remove everything ready for new quest requirement to be added @@ -402,12 +341,7 @@ public class RepeatableQuestController( if (attempts > maxAttempts) { - logger.Error( - serverLocalisationService.GetText( - "quest-repeatable_generation_failed_please_report", - attempts - ) - ); + logger.Error(serverLocalisationService.GetText("quest-repeatable_generation_failed_please_report", attempts)); } return newRepeatableQuest; @@ -446,9 +380,7 @@ public class RepeatableQuestController( var traderId = randomUtil.DrawRandomFromList(traders).FirstOrDefault(); if (traderId.IsEmpty()) { - logger.Error( - serverLocalisationService.GetText("repeatable-unable_to_find_trader_in_pool") - ); + logger.Error(serverLocalisationService.GetText("repeatable-unable_to_find_trader_in_pool")); return null; } @@ -460,34 +392,10 @@ public class RepeatableQuestController( return questType switch { - "Elimination" => eliminationQuestGenerator.Generate( - sessionId, - pmcLevel, - traderId, - questTypePool, - repeatableConfig - ), - "Completion" => completionQuestGenerator.Generate( - sessionId, - pmcLevel, - traderId, - questTypePool, - repeatableConfig - ), - "Exploration" => explorationQuestGenerator.Generate( - sessionId, - pmcLevel, - traderId, - questTypePool, - repeatableConfig - ), - "Pickup" => pickupQuestGenerator.Generate( - sessionId, - pmcLevel, - traderId, - questTypePool, - repeatableConfig - ), + "Elimination" => eliminationQuestGenerator.Generate(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig), + "Completion" => completionQuestGenerator.Generate(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig), + "Exploration" => explorationQuestGenerator.Generate(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig), + "Pickup" => pickupQuestGenerator.Generate(sessionId, pmcLevel, traderId, questTypePool, repeatableConfig), _ => null, }; } @@ -500,18 +408,12 @@ public class RepeatableQuestController( protected void RemoveQuestFromProfile(SptProfile fullProfile, MongoId questToReplaceId) { // Find quest we're replacing in pmc profile quests array and remove it - questHelper.FindAndRemoveQuestFromArrayIfExists( - questToReplaceId, - fullProfile.CharacterData.PmcData.Quests - ); + questHelper.FindAndRemoveQuestFromArrayIfExists(questToReplaceId, fullProfile.CharacterData.PmcData.Quests); // Look for and remove quest we're replacing in scav profile too if (fullProfile.CharacterData.ScavData is not null) { - questHelper.FindAndRemoveQuestFromArrayIfExists( - questToReplaceId, - fullProfile.CharacterData.ScavData.Quests - ); + questHelper.FindAndRemoveQuestFromArrayIfExists(questToReplaceId, fullProfile.CharacterData.ScavData.Quests); } } @@ -526,20 +428,14 @@ public class RepeatableQuestController( foreach (var repeatablesInProfile in pmcData.RepeatableQuests) { // Check for existing quest in (daily/weekly/scav arrays) - var questToReplace = repeatablesInProfile.ActiveQuests?.FirstOrDefault(repeatable => - repeatable.Id == questId - ); + var questToReplace = repeatablesInProfile.ActiveQuests?.FirstOrDefault(repeatable => repeatable.Id == questId); if (questToReplace is null) // Not found, skip to next repeatable subtype { continue; } - return new GetRepeatableByIdResult - { - Quest = questToReplace, - RepeatableType = repeatablesInProfile, - }; + return new GetRepeatableByIdResult { Quest = questToReplace, RepeatableType = repeatablesInProfile }; } return null; @@ -577,10 +473,7 @@ public class RepeatableQuestController( foreach (var repeatableConfig in QuestConfig.RepeatableQuests) { // Get daily/weekly data from profile, add empty object if missing - var generatedRepeatables = GetRepeatableQuestSubTypeFromProfile( - repeatableConfig, - pmcData - ); + var generatedRepeatables = GetRepeatableQuestSubTypeFromProfile(repeatableConfig, pmcData); var repeatableTypeLower = repeatableConfig.Name.ToLowerInvariant(); var canAccessRepeatables = CanProfileAccessRepeatableQuests(repeatableConfig, pmcData); @@ -620,10 +513,7 @@ public class RepeatableQuestController( ProcessExpiredQuests(generatedRepeatables, pmcData); // Create dynamic quest pool to avoid generating duplicates - var questTypePool = GenerateQuestPool( - repeatableConfig, - pmcData.Info.Level.GetValueOrDefault(1) - ); + var questTypePool = GenerateQuestPool(repeatableConfig, pmcData.Info.Level.GetValueOrDefault(1)); // Add repeatable quests of this loops sub-type (daily/weekly) for (var i = 0; i < GetQuestCount(repeatableConfig, fullProfile); i++) @@ -642,9 +532,7 @@ public class RepeatableQuestController( lifeline++; if (lifeline > 10) { - logger.Error( - "We were stuck in repeatable quest generation. This should never happen. Please report" - ); + logger.Error("We were stuck in repeatable quest generation. This should never happen. Please report"); break; } @@ -675,9 +563,7 @@ public class RepeatableQuestController( new ChangeRequirement { ChangeCost = quest.ChangeCost, - ChangeStandingCost = randomUtil.GetArrayValue( - repeatableConfig.StandingChangeCost - ), // Randomise standing loss to replace + ChangeStandingCost = randomUtil.GetArrayValue(repeatableConfig.StandingChangeCost), // Randomise standing loss to replace } ); } @@ -709,15 +595,10 @@ public class RepeatableQuestController( /// daily/weekly config /// Players PMC profile /// PmcDataRepeatableQuest - protected PmcDataRepeatableQuest GetRepeatableQuestSubTypeFromProfile( - RepeatableQuestConfig repeatableConfig, - PmcData pmcData - ) + protected PmcDataRepeatableQuest GetRepeatableQuestSubTypeFromProfile(RepeatableQuestConfig repeatableConfig, PmcData pmcData) { // Get from profile, add if missing - var repeatableQuestDetails = pmcData.RepeatableQuests.FirstOrDefault(repeatable => - repeatable.Name == repeatableConfig.Name - ); + var repeatableQuestDetails = pmcData.RepeatableQuests.FirstOrDefault(repeatable => repeatable.Name == repeatableConfig.Name); var hasAccess = profileHelper.HasAccessToRepeatableFreeRefreshSystem(pmcData); if (repeatableQuestDetails is null) @@ -755,16 +636,10 @@ public class RepeatableQuestController( /// Repeatable quest config /// Players PMC profile /// True if profile has access to repeatables - protected bool CanProfileAccessRepeatableQuests( - RepeatableQuestConfig repeatableConfig, - PmcData pmcData - ) + protected bool CanProfileAccessRepeatableQuests(RepeatableQuestConfig repeatableConfig, PmcData pmcData) { // PMC and daily quests not unlocked yet - if ( - repeatableConfig.Side == PlayerGroup.Pmc - && !PlayerHasDailyPmcQuestsUnlocked(pmcData, repeatableConfig) - ) + if (repeatableConfig.Side == PlayerGroup.Pmc && !PlayerHasDailyPmcQuestsUnlocked(pmcData, repeatableConfig)) { return false; } @@ -789,10 +664,7 @@ public class RepeatableQuestController( /// Players PMC profile /// Config of daily type to check /// True if unlocked - protected static bool PlayerHasDailyPmcQuestsUnlocked( - PmcData pmcData, - RepeatableQuestConfig repeatableConfig - ) + protected static bool PlayerHasDailyPmcQuestsUnlocked(PmcData pmcData, RepeatableQuestConfig repeatableConfig) { return pmcData.Info.Level >= repeatableConfig.MinPlayerLevel; } @@ -804,11 +676,7 @@ public class RepeatableQuestController( /// True if unlocked protected bool PlayerHasDailyScavQuestsUnlocked(PmcData pmcData) { - return pmcData - .Hideout?.Areas?.FirstOrDefault(hideoutArea => - hideoutArea.Type == HideoutAreas.IntelligenceCenter - ) - ?.Level >= 1; + return pmcData.Hideout?.Areas?.FirstOrDefault(hideoutArea => hideoutArea.Type == HideoutAreas.IntelligenceCenter)?.Level >= 1; } /// @@ -816,17 +684,12 @@ public class RepeatableQuestController( /// /// Repeatables to process (daily/weekly) /// Players PMC profile - protected void ProcessExpiredQuests( - PmcDataRepeatableQuest generatedRepeatables, - PmcData pmcData - ) + protected void ProcessExpiredQuests(PmcDataRepeatableQuest generatedRepeatables, PmcData pmcData) { var questsToKeep = new List(); foreach (var activeQuest in generatedRepeatables.ActiveQuests) { - var questStatusInProfile = pmcData.Quests.FirstOrDefault(quest => - quest.QId == activeQuest.Id - ); + var questStatusInProfile = pmcData.Quests.FirstOrDefault(quest => quest.QId == activeQuest.Id); if (questStatusInProfile is null) { continue; @@ -884,14 +747,8 @@ public class RepeatableQuestController( // Add "any" to pickup quest pool questPool.Pool.Pickup.Locations[ELocationName.any] = ["any"]; - var eliminationConfig = repeatableQuestHelper.GetEliminationConfigByPmcLevel( - pmcLevel, - repeatableConfig - ); - var targetsConfig = new ProbabilityObjectArray( - cloner, - eliminationConfig.Targets - ); + var eliminationConfig = repeatableQuestHelper.GetEliminationConfigByPmcLevel(pmcLevel, repeatableConfig); + var targetsConfig = new ProbabilityObjectArray(cloner, eliminationConfig.Targets); // Populate Elimination quest targets and their locations foreach (var target in targetsConfig) @@ -899,10 +756,7 @@ public class RepeatableQuestController( // Target is boss if (target.Data?.IsBoss ?? false) { - questPool.Pool.Elimination.Targets.Add( - target.Key, - new TargetLocation { Locations = ["any"] } - ); + questPool.Pool.Elimination.Targets.Add(target.Key, new TargetLocation { Locations = ["any"] }); continue; } @@ -916,10 +770,7 @@ public class RepeatableQuestController( questPool.Pool.Elimination.Targets.Add( target.Key, - new TargetLocation - { - Locations = allowedLocations.Select(x => x.ToString()).ToList(), - } + new TargetLocation { Locations = allowedLocations.Select(x => x.ToString()).ToList() } ); } @@ -938,18 +789,9 @@ public class RepeatableQuestController( Types = cloner.Clone(repeatableConfig.Types)!, Pool = new QuestPool { - Exploration = new ExplorationPool - { - Locations = new Dictionary>(), - }, - Elimination = new EliminationPool - { - Targets = new Dictionary(), - }, - Pickup = new ExplorationPool - { - Locations = new Dictionary>(), - }, + Exploration = new ExplorationPool { Locations = new Dictionary>() }, + Elimination = new EliminationPool { Targets = new Dictionary() }, + Pickup = new ExplorationPool { Locations = new Dictionary>() }, }, }; } @@ -971,10 +813,7 @@ public class RepeatableQuestController( // Add elite bonus to daily quests if ( string.Equals(repeatableConfig.Name, "daily", StringComparison.OrdinalIgnoreCase) - && profileHelper.HasEliteSkillLevel( - SkillTypes.Charisma, - fullProfile.CharacterData.PmcData - ) + && profileHelper.HasEliteSkillLevel(SkillTypes.Charisma, fullProfile.CharacterData.PmcData) ) // Elite charisma skill gives extra daily quest(s) { @@ -984,8 +823,7 @@ public class RepeatableQuestController( } // Add any extra repeatable quests the profile has unlocked - questCount += (int) - fullProfile.SptData.ExtraRepeatableQuests.GetValueOrDefault(repeatableConfig.Id, 0); + questCount += (int)fullProfile.SptData.ExtraRepeatableQuests.GetValueOrDefault(repeatableConfig.Id, 0); return questCount; } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/TradeController.cs b/Libraries/SPTarkov.Server.Core/Controllers/TradeController.cs index 80885fd1..7ed69625 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/TradeController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/TradeController.cs @@ -46,11 +46,7 @@ public class TradeController( /// /// Session/Player id /// - public ItemEventRouterResponse ConfirmTrading( - PmcData pmcData, - ProcessBaseTradeRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ConfirmTrading(PmcData pmcData, ProcessBaseTradeRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); @@ -76,11 +72,7 @@ public class TradeController( var errorMessage = $"Unhandled trade event: {request.Type}"; logger.Error(errorMessage); - return httpResponseUtil.AppendErrorToOutput( - output, - errorMessage, - BackendErrorCodes.RagfairUnavailable - ); + return httpResponseUtil.AppendErrorToOutput(output, errorMessage, BackendErrorCodes.RagfairUnavailable); } /// @@ -90,11 +82,7 @@ public class TradeController( /// /// Session/Player id /// - public ItemEventRouterResponse ConfirmRagfairTrading( - PmcData pmcData, - ProcessRagfairTradeRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse ConfirmRagfairTrading(PmcData pmcData, ProcessRagfairTradeRequestData request, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); @@ -103,11 +91,7 @@ public class TradeController( var fleaOffer = ragfairServer.GetOffer(offer.Id); if (fleaOffer is null) { - return httpResponseUtil.AppendErrorToOutput( - output, - $"Offer with ID {offer.Id} not found", - BackendErrorCodes.OfferNotFound - ); + return httpResponseUtil.AppendErrorToOutput(output, $"Offer with ID {offer.Id} not found", BackendErrorCodes.OfferNotFound); } if (offer.Count == 0) @@ -116,11 +100,7 @@ public class TradeController( "ragfair-unable_to_purchase_0_count_item", itemHelper.GetItem(fleaOffer.Items[0].Template).Value.Name ); - return httpResponseUtil.AppendErrorToOutput( - output, - errorMessage, - BackendErrorCodes.OfferOutOfStock - ); + return httpResponseUtil.AppendErrorToOutput(output, errorMessage, BackendErrorCodes.OfferOutOfStock); } if (fleaOffer.IsTraderOffer()) @@ -168,11 +148,7 @@ public class TradeController( logger.Debug(errorMessage); } - httpResponseUtil.AppendErrorToOutput( - output, - errorMessage, - BackendErrorCodes.RagfairUnavailable - ); + httpResponseUtil.AppendErrorToOutput(output, errorMessage, BackendErrorCodes.RagfairUnavailable); return; } @@ -188,13 +164,7 @@ public class TradeController( SchemeId = 0, SchemeItems = requestOffer.Items, }; - tradeHelper.BuyItem( - pmcData, - buyData, - sessionId, - _traderConfig.PurchasesAreFoundInRaid, - output - ); + tradeHelper.BuyItem(pmcData, buyData, sessionId, _traderConfig.PurchasesAreFoundInRaid, output); // Remove/lower offer quantity of item purchased from trader flea offer ragfairServer.ReduceOfferQuantity(fleaOffer.Id, requestOffer.Count ?? 0); @@ -228,13 +198,7 @@ public class TradeController( }; // buyItem() must occur prior to removing the offer stack, otherwise item inside offer doesn't exist for confirmTrading() to use - tradeHelper.BuyItem( - pmcData, - buyData, - sessionId, - _ragfairConfig.Dynamic.PurchasesAreFoundInRaid, - output - ); + tradeHelper.BuyItem(pmcData, buyData, sessionId, _ragfairConfig.Dynamic.PurchasesAreFoundInRaid, output); if (output.Warnings?.Count > 0) { return; @@ -274,11 +238,7 @@ public class TradeController( /// /// Session/Player id /// - public ItemEventRouterResponse SellScavItemsToFence( - PmcData pmcData, - SellScavItemsToFenceRequestData request, - MongoId sessionId - ) + public ItemEventRouterResponse SellScavItemsToFence(PmcData pmcData, SellScavItemsToFenceRequestData request, MongoId sessionId) { var output = eventOutputHolder.GetOutput(sessionId); @@ -316,11 +276,7 @@ public class TradeController( sessionId, trader, MessageType.MessageWithItems, - randomUtil.GetArrayValue( - databaseService.GetTrader(trader).Dialogue.TryGetValue("soldItems", out var items) - ? items - : [] - ), + randomUtil.GetArrayValue(databaseService.GetTrader(trader).Dialogue.TryGetValue("soldItems", out var items) ? items : []), currencyReward.SelectMany(x => x).ToList(), timeUtil.GetHoursAsSeconds(72) ); @@ -347,25 +303,14 @@ public class TradeController( foreach (var itemToSell in itemWithChildren) { var itemDetails = itemHelper.GetItem(itemToSell.Template); - if ( - !( - itemDetails.Key - && itemHelper.IsOfBaseclasses( - itemDetails.Value.Id, - traderDetails.ItemsBuy.Category - ) - ) - ) + if (!(itemDetails.Key && itemHelper.IsOfBaseclasses(itemDetails.Value.Id, traderDetails.ItemsBuy.Category))) // Skip if tpl isn't item OR item doesn't fulfil match traders buy categories { continue; } // Get price of item multiplied by how many are in stack - totalPrice += (int)( - (handbookPrices[itemToSell.Template] ?? 0) - * (itemToSell.Upd?.StackObjectsCount ?? 1) - ); + totalPrice += (int)((handbookPrices[itemToSell.Template] ?? 0) * (itemToSell.Upd?.StackObjectsCount ?? 1)); } return totalPrice; diff --git a/Libraries/SPTarkov.Server.Core/Controllers/TraderController.cs b/Libraries/SPTarkov.Server.Core/Controllers/TraderController.cs index e1011337..02690691 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/TraderController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/TraderController.cs @@ -83,10 +83,7 @@ public class TraderController( foreach (var kvp in trader.Assort?.BarterScheme) { var barterSchemeItem = kvp.Value.FirstOrDefault()?.FirstOrDefault(); - if ( - barterSchemeItem?.Template != null - && paymentHelper.IsMoneyTpl(barterSchemeItem.Template) - ) + if (barterSchemeItem?.Template != null && paymentHelper.IsMoneyTpl(barterSchemeItem.Template)) { barterSchemeItem.Count += Math.Round(barterSchemeItem?.Count * multiplier ?? 0D, 2); } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/WeatherController.cs b/Libraries/SPTarkov.Server.Core/Controllers/WeatherController.cs index dddeb9ed..852e1549 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/WeatherController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/WeatherController.cs @@ -50,11 +50,7 @@ public class WeatherController( /// GetLocalWeatherResponseData public GetLocalWeatherResponseData GenerateLocal(MongoId sessionId) { - var result = new GetLocalWeatherResponseData - { - Season = seasonalEventService.GetActiveWeatherSeason(), - Weather = [], - }; + var result = new GetLocalWeatherResponseData { Season = seasonalEventService.GetActiveWeatherSeason(), Weather = [] }; result.Weather.AddRange(raidWeatherService.GetUpcomingWeather()); diff --git a/Libraries/SPTarkov.Server.Core/Controllers/WishlistController.cs b/Libraries/SPTarkov.Server.Core/Controllers/WishlistController.cs index 6de1540d..f7a24cb8 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/WishlistController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/WishlistController.cs @@ -18,11 +18,7 @@ public class WishlistController(EventOutputHolder eventOutputHolder) /// /// Session/Player id /// - public ItemEventRouterResponse AddToWishList( - PmcData pmcData, - AddToWishlistRequest request, - MongoId sessionId - ) + public ItemEventRouterResponse AddToWishList(PmcData pmcData, AddToWishlistRequest request, MongoId sessionId) { pmcData.WishList ??= new DictionaryOrList(new Dictionary(), []); foreach (var item in request.Items) @@ -40,11 +36,7 @@ public class WishlistController(EventOutputHolder eventOutputHolder) /// /// Session/Player id /// - public ItemEventRouterResponse RemoveFromWishList( - PmcData pmcData, - RemoveFromWishlistRequest request, - MongoId sessionId - ) + public ItemEventRouterResponse RemoveFromWishList(PmcData pmcData, RemoveFromWishlistRequest request, MongoId sessionId) { foreach (var itemId in request.Items) { @@ -61,11 +53,7 @@ public class WishlistController(EventOutputHolder eventOutputHolder) /// /// Session/Player id /// - public ItemEventRouterResponse ChangeWishListItemCategory( - PmcData pmcData, - ChangeWishlistItemCategoryRequest request, - MongoId sessionId - ) + public ItemEventRouterResponse ChangeWishListItemCategory(PmcData pmcData, ChangeWishlistItemCategoryRequest request, MongoId sessionId) { pmcData.WishList.Dictionary[request.Item] = request.Category.Value; diff --git a/Libraries/SPTarkov.Server.Core/DI/Router.cs b/Libraries/SPTarkov.Server.Core/DI/Router.cs index 8f904890..5fb83f01 100644 --- a/Libraries/SPTarkov.Server.Core/DI/Router.cs +++ b/Libraries/SPTarkov.Server.Core/DI/Router.cs @@ -42,12 +42,7 @@ public abstract class Router public abstract class StaticRouter(JsonUtil jsonUtil, IEnumerable routes) : Router { - public async ValueTask HandleStatic( - string url, - string? body, - MongoId sessionId, - string output - ) + public async ValueTask HandleStatic(string url, string? body, MongoId sessionId, string output) { var action = routes.Single(route => route.url == url); var type = action.bodyType; @@ -68,12 +63,7 @@ public abstract class StaticRouter(JsonUtil jsonUtil, IEnumerable r public abstract class DynamicRouter(JsonUtil jsonUtil, IEnumerable routes) : Router { - public async ValueTask HandleDynamic( - string url, - string? body, - MongoId sessionID, - string output - ) + public async ValueTask HandleDynamic(string url, string? body, MongoId sessionID, string output) { var action = routes.First(r => url.Contains(r.url)); var type = action.bodyType; @@ -112,9 +102,5 @@ public abstract class SaveLoadRouter : Router public record HandledRoute(string route, bool dynamic); -public record RouteAction( - string url, - Func> action, - Type? bodyType = null -); +public record RouteAction(string url, Func> action, Type? bodyType = null); //public action: (url: string, info: any, sessionID: string, output: string) => Promise, diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs index 7ef4183d..4a00bed0 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs @@ -11,11 +11,7 @@ namespace SPTarkov.Server.Core.Extensions /// Width of item /// Height of item /// Location to place item in container - public static FindSlotResult FindSlotForItem( - this int[,] container2D, - int? itemWidthX, - int? itemHeightY - ) + public static FindSlotResult FindSlotForItem(this int[,] container2D, int? itemWidthX, int? itemHeightY) { // Assume not rotated var rotation = false; @@ -45,15 +41,7 @@ namespace SPTarkov.Server.Core.Extensions for (var column = 0; column < limitX; column++) { // Does item fit - if ( - CanItemBePlacedInContainerAtPosition( - container2D, - row, - column, - itemWidthX.Value, - itemHeightY.Value - ) - ) + if (CanItemBePlacedInContainerAtPosition(container2D, row, column, itemWidthX.Value, itemHeightY.Value)) { // Success, found a spot it fits return new FindSlotResult(true, column, row, rotation); diff --git a/Libraries/SPTarkov.Server.Core/Extensions/DateTimeExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/DateTimeExtensions.cs index a30d673e..a7a3b26d 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/DateTimeExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/DateTimeExtensions.cs @@ -93,13 +93,7 @@ /// Upper bound for month /// Upper bound for day /// True when inside date range - public static bool DateIsBetweenTwoDates( - this DateTime dateToCheck, - int startMonth, - int startDay, - int endMonth, - int endDay - ) + public static bool DateIsBetweenTwoDates(this DateTime dateToCheck, int startMonth, int startDay, int endMonth, int endDay) { var eventStartDate = new DateTime(dateToCheck.Year, startMonth, startDay); var eventEndDate = new DateTime(dateToCheck.Year, endMonth, endDay, 23, 59, 0); @@ -113,10 +107,7 @@ /// Date to get closest monday of /// Starting day of week - Default = Monday /// Monday as DateTime - public static DateTime GetClosestDate( - this DateTime dateTime, - DayOfWeek startDay = DayOfWeek.Monday - ) + public static DateTime GetClosestDate(this DateTime dateTime, DayOfWeek startDay = DayOfWeek.Monday) { // Calculate difference from current day to Monday var diff = (7 + (dateTime.DayOfWeek - startDay)) % 7; @@ -132,11 +123,7 @@ /// Desired day to find /// Should today be included in check, default = true /// Datetime of desired day - public static DateTime GetMostRecentPreviousDay( - this DateTime dateTime, - DayOfWeek desiredDay, - bool inclusiveOfToday = true - ) + public static DateTime GetMostRecentPreviousDay(this DateTime dateTime, DayOfWeek desiredDay, bool inclusiveOfToday = true) { // Get difference in day count from today to what day we want var dayDifferenceCount = (dateTime.DayOfWeek - desiredDay + 7) % 7; diff --git a/Libraries/SPTarkov.Server.Core/Extensions/FullProfileExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/FullProfileExtensions.cs index 6680bdc6..3a3682da 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/FullProfileExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/FullProfileExtensions.cs @@ -12,20 +12,13 @@ namespace SPTarkov.Server.Core.Extensions /// /// Profile to add clothing to /// Clothing Ids to add to profile - public static void AddSuitsToProfile( - this SptProfile fullProfile, - IEnumerable clothingIds - ) + public static void AddSuitsToProfile(this SptProfile fullProfile, IEnumerable clothingIds) { fullProfile.CustomisationUnlocks ??= []; foreach (var suitId in clothingIds) { - if ( - !fullProfile.CustomisationUnlocks.Exists(customisation => - customisation.Id == suitId - ) - ) + if (!fullProfile.CustomisationUnlocks.Exists(customisation => customisation.Id == suitId)) { // Clothing item doesn't exist in profile, add it fullProfile.CustomisationUnlocks.Add( @@ -207,11 +200,7 @@ namespace SPTarkov.Server.Core.Extensions /// Profile to add the extra repeatable to /// The ID of the type of repeatable to increase /// The number of extra repeatables to add - public static void AddExtraRepeatableQuest( - this SptProfile fullProfile, - MongoId repeatableId, - double rewardValue - ) + public static void AddExtraRepeatableQuest(this SptProfile fullProfile, MongoId repeatableId, double rewardValue) { fullProfile.SptData.ExtraRepeatableQuests ??= new Dictionary(); @@ -228,8 +217,7 @@ namespace SPTarkov.Server.Core.Extensions /// True if account is developer public static bool IsDeveloperAccount(this SptProfile fullProfile) { - return fullProfile?.ProfileInfo?.Edition?.ToLowerInvariant().StartsWith("spt developer") - ?? false; + return fullProfile?.ProfileInfo?.Edition?.ToLowerInvariant().StartsWith("spt developer") ?? false; } } } diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ItemEventRouterResponseExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ItemEventRouterResponseExtensions.cs index 83bc1d41..fb1dc1ce 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ItemEventRouterResponseExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ItemEventRouterResponseExtensions.cs @@ -12,11 +12,7 @@ namespace SPTarkov.Server.Core.Extensions /// Response to add item change event into /// Session id /// Item that was adjusted - public static void AddItemStackSizeChangeIntoEventResponse( - this ItemEventRouterResponse output, - MongoId sessionId, - Item item - ) + public static void AddItemStackSizeChangeIntoEventResponse(this ItemEventRouterResponse output, MongoId sessionId, Item item) { // TODO: replace with something safer like TryGet output diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ItemExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ItemExtensions.cs index 83e32c4e..8a9bec1a 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ItemExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ItemExtensions.cs @@ -17,11 +17,7 @@ namespace SPTarkov.Server.Core.Extensions /// second item to compare /// Upd properties to compare between the items /// true if they are the same - public static bool IsSameItem( - this Item item1, - Item item2, - ISet? compareUpdProperties = null - ) + public static bool IsSameItem(this Item item1, Item item2, ISet? compareUpdProperties = null) { // Different tpl == different item if (item1.Template != item2.Template) @@ -51,48 +47,23 @@ namespace SPTarkov.Server.Core.Extensions var comparers = new Dictionary> { { "Key", (upd1, upd2) => upd1.Key?.NumberOfUsages == upd2.Key?.NumberOfUsages }, - { - "Buff", - (upd1, upd2) => - upd1.Buff?.Value == upd2.Buff?.Value - && upd1.Buff?.BuffType == upd2.Buff?.BuffType - }, - { - "CultistAmulet", - (upd1, upd2) => - upd1.CultistAmulet?.NumberOfUsages == upd2.CultistAmulet?.NumberOfUsages - }, + { "Buff", (upd1, upd2) => upd1.Buff?.Value == upd2.Buff?.Value && upd1.Buff?.BuffType == upd2.Buff?.BuffType }, + { "CultistAmulet", (upd1, upd2) => upd1.CultistAmulet?.NumberOfUsages == upd2.CultistAmulet?.NumberOfUsages }, { "Dogtag", (upd1, upd2) => upd1.Dogtag?.ProfileId == upd2.Dogtag?.ProfileId }, { "FaceShield", (upd1, upd2) => upd1.FaceShield?.Hits == upd2.FaceShield?.Hits }, { "Foldable", - (upd1, upd2) => - upd1.Foldable?.Folded.GetValueOrDefault(false) - == upd2.Foldable?.Folded.GetValueOrDefault(false) - }, - { - "FoodDrink", - (upd1, upd2) => upd1.FoodDrink?.HpPercent == upd2.FoodDrink?.HpPercent + (upd1, upd2) => upd1.Foldable?.Folded.GetValueOrDefault(false) == upd2.Foldable?.Folded.GetValueOrDefault(false) }, + { "FoodDrink", (upd1, upd2) => upd1.FoodDrink?.HpPercent == upd2.FoodDrink?.HpPercent }, { "MedKit", (upd1, upd2) => upd1.MedKit?.HpResource == upd2.MedKit?.HpResource }, - { - "RecodableComponent", - (upd1, upd2) => - upd1.RecodableComponent?.IsEncoded == upd2.RecodableComponent?.IsEncoded - }, - { - "RepairKit", - (upd1, upd2) => upd1.RepairKit?.Resource == upd2.RepairKit?.Resource - }, - { - "Resource", - (upd1, upd2) => upd1.Resource?.UnitsConsumed == upd2.Resource?.UnitsConsumed - }, + { "RecodableComponent", (upd1, upd2) => upd1.RecodableComponent?.IsEncoded == upd2.RecodableComponent?.IsEncoded }, + { "RepairKit", (upd1, upd2) => upd1.RepairKit?.Resource == upd2.RepairKit?.Resource }, + { "Resource", (upd1, upd2) => upd1.Resource?.UnitsConsumed == upd2.Resource?.UnitsConsumed }, }; // Choose above keys or passed in keys to compare items with - var valuesToCompare = - compareUpdProperties?.Count > 0 ? compareUpdProperties : comparers.Keys.ToHashSet(); + var valuesToCompare = compareUpdProperties?.Count > 0 ? compareUpdProperties : comparers.Keys.ToHashSet(); foreach (var propertyName in valuesToCompare) { if (!comparers.TryGetValue(propertyName, out var comparer)) @@ -117,11 +88,7 @@ namespace SPTarkov.Server.Core.Extensions /// Name of slot to check item is in e.g. SecuredContainer/Backpack /// Inventory with child parent items to check /// True when item is in container - public static bool ItemIsInsideContainer( - this Item itemToCheck, - string desiredContainerSlotId, - IEnumerable items - ) + public static bool ItemIsInsideContainer(this Item itemToCheck, string desiredContainerSlotId, IEnumerable items) { // Get items parent var parent = items.FirstOrDefault(item => item.Id.Equals(itemToCheck.ParentId)); @@ -199,10 +166,7 @@ namespace SPTarkov.Server.Core.Extensions /// List of items (item + possible children) /// Parent item's id /// list of child item ids - public static List GetItemWithChildrenTpls( - this IEnumerable items, - MongoId baseItemId - ) + public static List GetItemWithChildrenTpls(this IEnumerable items, MongoId baseItemId) { List list = []; @@ -226,8 +190,7 @@ namespace SPTarkov.Server.Core.Extensions /// true if it has buy restrictions public static bool HasBuyRestrictions(this Item itemToCheck) { - return itemToCheck.Upd?.BuyRestrictionCurrent is not null - && itemToCheck.Upd?.BuyRestrictionMax is not null; + return itemToCheck.Upd?.BuyRestrictionCurrent is not null && itemToCheck.Upd?.BuyRestrictionMax is not null; } /// @@ -273,11 +236,7 @@ namespace SPTarkov.Server.Core.Extensions /// Parent item's id /// OPTIONAL - Include only mod items, exclude items stored inside root item /// list of Item objects - public static List GetItemWithChildren( - this IEnumerable items, - MongoId baseItemId, - bool excludeStoredItems = false - ) + public static List GetItemWithChildren(this IEnumerable items, MongoId baseItemId, bool excludeStoredItems = false) { // Use dictionary to make key lookup faster, convert to list before being returned var itemList = items.ToList(); @@ -416,10 +375,7 @@ namespace SPTarkov.Server.Core.Extensions /// Item to update root items _id property /// Optional: new id to use /// New root id - public static MongoId RemapRootItemId( - this IEnumerable itemWithChildren, - MongoId? newId = null - ) + public static MongoId RemapRootItemId(this IEnumerable itemWithChildren, MongoId? newId = null) { newId ??= new MongoId(); @@ -458,11 +414,7 @@ namespace SPTarkov.Server.Core.Extensions .GroupBy(item => new MongoId(item.ParentId)) .ToDictionary(kvp => kvp.Key, group => group.ToHashSet()); - return new InventoryItemHash - { - ByItemId = inventoryItems.ToDictionary(item => item.Id), - ByParentId = byParentId, - }; + return new InventoryItemHash { ByItemId = inventoryItems.ToDictionary(item => item.Id), ByParentId = byParentId }; } } } diff --git a/Libraries/SPTarkov.Server.Core/Extensions/LootContainerSettingsExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/LootContainerSettingsExtensions.cs index 81df05f3..b365d6fd 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/LootContainerSettingsExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/LootContainerSettingsExtensions.cs @@ -7,16 +7,9 @@ namespace SPTarkov.Server.Core.Extensions /// public static class LootContainerSettingsExtensions { - public static double GetRoubleValue( - this LootContainerSettings settings, - int botLevel, - string? locationId - ) + public static double GetRoubleValue(this LootContainerSettings settings, int botLevel, string? locationId) { - var roubleTotalByLevel = GetContainerRoubleTotalByLevel( - botLevel, - settings.TotalRubByLevel - ); + var roubleTotalByLevel = GetContainerRoubleTotalByLevel(botLevel, settings.TotalRubByLevel); if (locationId is null) { @@ -42,10 +35,7 @@ namespace SPTarkov.Server.Core.Extensions /// level of the bot /// Pocket/vest/backpack /// rouble amount - private static double GetContainerRoubleTotalByLevel( - int botLevel, - IEnumerable containerLootValuesPool - ) + private static double GetContainerRoubleTotalByLevel(int botLevel, IEnumerable containerLootValuesPool) { var matchingValue = containerLootValuesPool.FirstOrDefault(minMaxValue => botLevel >= minMaxValue.Min && botLevel <= minMaxValue.Max diff --git a/Libraries/SPTarkov.Server.Core/Extensions/MongoIdExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/MongoIdExtensions.cs index 3d48c2c2..b41db6b0 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/MongoIdExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/MongoIdExtensions.cs @@ -28,8 +28,7 @@ namespace SPTarkov.Server.Core.Extensions for (var i = 0; i < 24; i++) { var c = span[i]; - var isHex = - (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); + var isHex = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); if (!isHex) { @@ -58,8 +57,7 @@ namespace SPTarkov.Server.Core.Extensions for (var i = 0; i < 24; i++) { var c = span[i]; - var isHex = - (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); + var isHex = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); if (!isHex) { diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs index 90200f6b..daad1bee 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs @@ -14,9 +14,7 @@ namespace SPTarkov.Server.Core.Extensions /// List of item objects public static IEnumerable GetQuestItemsInProfile(this PmcData profile) { - return profile - ?.Inventory?.Items.Where(i => i.ParentId == profile.Inventory.QuestRaidItems) - .ToList(); + return profile?.Inventory?.Items.Where(i => i.ParentId == profile.Inventory.QuestRaidItems).ToList(); } /// @@ -26,15 +24,9 @@ namespace SPTarkov.Server.Core.Extensions public static void UnlockHideoutWallInProfile(this PmcData profile) { var profileHideoutAreas = profile.Hideout.Areas; - var waterCollector = profileHideoutAreas.FirstOrDefault(x => - x.Type == HideoutAreas.WaterCollector - ); - var medStation = profileHideoutAreas.FirstOrDefault(x => - x.Type == HideoutAreas.MedStation - ); - var wall = profileHideoutAreas.FirstOrDefault(x => - x.Type == HideoutAreas.EmergencyWall - ); + var waterCollector = profileHideoutAreas.FirstOrDefault(x => x.Type == HideoutAreas.WaterCollector); + var medStation = profileHideoutAreas.FirstOrDefault(x => x.Type == HideoutAreas.MedStation); + var wall = profileHideoutAreas.FirstOrDefault(x => x.Type == HideoutAreas.EmergencyWall); // No collector or med station, skip if (waterCollector is null && medStation is null) @@ -151,10 +143,7 @@ namespace SPTarkov.Server.Core.Extensions /// Player profile /// Bonus to sum up /// Summed bonus value or 0 if no bonus found - public static double GetBonusValueFromProfile( - this PmcData pmcProfile, - BonusType desiredBonus - ) + public static double GetBonusValueFromProfile(this PmcData pmcProfile, BonusType desiredBonus) { var bonuses = pmcProfile?.Bonuses?.Where(b => b.Type == desiredBonus); if (!bonuses.Any()) @@ -168,9 +157,7 @@ namespace SPTarkov.Server.Core.Extensions public static bool PlayerIsFleaBanned(this PmcData pmcProfile, long currentTimestamp) { - return pmcProfile?.Info?.Bans?.Any(b => - b.BanType == BanType.RagFair && currentTimestamp < b.DateTime - ) ?? false; + return pmcProfile?.Info?.Bans?.Any(b => b.BanType == BanType.RagFair && currentTimestamp < b.DateTime) ?? false; } /// @@ -221,9 +208,7 @@ namespace SPTarkov.Server.Core.Extensions } // Otherwise get the parent item - currentItem = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == currentItem.ParentId - ); + currentItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == currentItem.ParentId); } return false; @@ -251,12 +236,7 @@ namespace SPTarkov.Server.Core.Extensions { foreach (var (partKey, bodyPart) in profile.Health.BodyParts) { - bodyPart.Health.Maximum = profileTemplate - .Character - .Health - .BodyParts[partKey] - .Health - .Maximum; + bodyPart.Health.Maximum = profileTemplate.Character.Health.BodyParts[partKey].Health.Maximum; } } } diff --git a/Libraries/SPTarkov.Server.Core/Extensions/SptModExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/SptModExtensions.cs index 9327f13d..8f8c092a 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/SptModExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/SptModExtensions.cs @@ -11,11 +11,7 @@ namespace SPTarkov.Server.Core.Extensions { public static string GetModPath(this SptMod sptMod) { - var relativeModPath = Path.GetRelativePath( - Directory.GetCurrentDirectory(), - sptMod.Directory - ) - .Replace('\\', '/'); + var relativeModPath = Path.GetRelativePath(Directory.GetCurrentDirectory(), sptMod.Directory).Replace('\\', '/'); return relativeModPath; } diff --git a/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs index 1580ee09..5f8ae8ba 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/TemplateItemExtensions.cs @@ -5,10 +5,7 @@ namespace SPTarkov.Server.Core.Extensions { public static class TemplateItemExtensions { - public static IEnumerable OfClass( - this Dictionary templates, - params MongoId[] baseClasses - ) + public static IEnumerable OfClass(this Dictionary templates, params MongoId[] baseClasses) { return templates.Where(x => baseClasses.Contains(x.Value.Parent)).Select(x => x.Value); } @@ -19,9 +16,7 @@ namespace SPTarkov.Server.Core.Extensions params MongoId[] baseClasses ) { - return templates - .Where(x => baseClasses.Contains(x.Value.Parent) && pred(x.Value)) - .Select(x => x.Value); + return templates.Where(x => baseClasses.Contains(x.Value.Parent) && pred(x.Value)).Select(x => x.Value); } /// diff --git a/Libraries/SPTarkov.Server.Core/Extensions/TraderAssortExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/TraderAssortExtensions.cs index c62ca6fb..643032a8 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/TraderAssortExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/TraderAssortExtensions.cs @@ -13,11 +13,7 @@ namespace SPTarkov.Server.Core.Extensions /// Id of item to remove from assort /// Is the assort being modified the flea market assort /// Modified assort - public static TraderAssort RemoveItemFromAssort( - this TraderAssort assort, - MongoId itemId, - bool isFlea = false - ) + public static TraderAssort RemoveItemFromAssort(this TraderAssort assort, MongoId itemId, bool isFlea = false) { // Flea assort needs special handling, item must remain in assort but be flagged as locked if (isFlea && assort.BarterScheme.TryGetValue(itemId, out var listToUse)) @@ -45,15 +41,10 @@ namespace SPTarkov.Server.Core.Extensions /// /// Trader assort to modify /// Item TPLs the assort should not have - public static void RemoveItemsFromAssort( - this TraderAssort assortToFilter, - HashSet itemsTplsToRemove - ) + public static void RemoveItemsFromAssort(this TraderAssort assortToFilter, HashSet itemsTplsToRemove) { assortToFilter.Items = assortToFilter - .Items.Where(item => - item.ParentId == "hideout" && itemsTplsToRemove.Contains(item.Template) - ) + .Items.Where(item => item.ParentId == "hideout" && itemsTplsToRemove.Contains(item.Template)) .ToList(); } } diff --git a/Libraries/SPTarkov.Server.Core/Extensions/UtilityExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/UtilityExtensions.cs index d93bb9f4..4bb92906 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/UtilityExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/UtilityExtensions.cs @@ -2,10 +2,7 @@ { public static class UtilityExtensions { - public static IEnumerable IntersectWith( - this IEnumerable first, - IEnumerable second - ) + public static IEnumerable IntersectWith(this IEnumerable first, IEnumerable second) { //a.Intersect(x => b.Contains(x)).ToList(); // gives error Delegate type could not be inferred diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs index d235b4ab..9e565747 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotEquipmentModGenerator.cs @@ -39,11 +39,7 @@ public class BotEquipmentModGenerator( ICloner cloner ) { - protected static readonly FrozenSet _modSightIds = - [ - "mod_sight_front", - "mod_sight_rear", - ]; + protected static readonly FrozenSet _modSightIds = ["mod_sight_front", "mod_sight_rear"]; // Slots that hold scopes protected static readonly FrozenSet _scopeIds = @@ -58,21 +54,10 @@ public class BotEquipmentModGenerator( ]; // Slots that hold muzzles - protected static readonly FrozenSet _muzzleIds = - [ - "mod_muzzle", - "mod_muzzle_000", - "mod_muzzle_001", - ]; + protected static readonly FrozenSet _muzzleIds = ["mod_muzzle", "mod_muzzle_000", "mod_muzzle_001"]; // Slots a weapon can store its stock in - protected static readonly FrozenSet _stockSlots = - [ - "mod_stock", - "mod_stock_000", - "mod_stock_001", - "mod_stock_akms", - ]; + protected static readonly FrozenSet _stockSlots = ["mod_stock", "mod_stock_000", "mod_stock_001", "mod_stock_akms"]; // Slots that hold cartridges protected static readonly FrozenSet _cartridgeHolderSlots = @@ -121,9 +106,7 @@ public class BotEquipmentModGenerator( // Get mod pool for the desired item if (!settings.ModPool.TryGetValue(parentTemplate.Id, out var compatibleModsPool)) { - logger.Warning( - $"bot: {settings.BotData.Role} lacks a mod slot pool for item: {parentTemplate.Id} {parentTemplate.Name}" - ); + logger.Warning($"bot: {settings.BotData.Role} lacks a mod slot pool for item: {parentTemplate.Id} {parentTemplate.Name}"); } // Iterate over mod pool and choose mods to add to item @@ -172,11 +155,7 @@ public class BotEquipmentModGenerator( var modPoolToChooseFrom = modPool; // Filter the pool of items in blacklist - var filteredModPool = FilterModsByBlacklist( - modPoolToChooseFrom, - specificBlacklist, - modSlotName - ); + var filteredModPool = FilterModsByBlacklist(modPoolToChooseFrom, specificBlacklist, modSlotName); if (filteredModPool.Count > 0) // use filtered pool as it has items in it { @@ -239,12 +218,7 @@ public class BotEquipmentModGenerator( // Compatible item not found but slot REQUIRES item, get random item from db if (!found && itemSlotTemplate.Required.GetValueOrDefault(false)) { - modTpl = GetRandomModTplFromItemDb( - modTpl.Value, - itemSlotTemplate, - modSlotName, - equipment - ); + modTpl = GetRandomModTplFromItemDb(modTpl.Value, itemSlotTemplate, modSlotName, equipment); found = modTpl is not null; } @@ -256,44 +230,20 @@ public class BotEquipmentModGenerator( // Get chosen mods db template and check it fits into slot var modTemplate = itemHelper.GetItem(modTpl.Value); - if ( - !IsModValidForSlot( - modTemplate, - itemSlotTemplate, - modSlotName, - parentTemplate, - settings.BotData.Role - ) - ) + if (!IsModValidForSlot(modTemplate, itemSlotTemplate, modSlotName, parentTemplate, settings.BotData.Role)) { continue; } // Generate new id to ensure all items are unique on bot var modId = new MongoId(); - equipment.Add( - CreateModItem( - modId, - modTpl.Value, - parentId, - modSlotName, - modTemplate.Value, - settings.BotData.Role - ) - ); + equipment.Add(CreateModItem(modId, modTpl.Value, parentId, modSlotName, modTemplate.Value, settings.BotData.Role)); // Does item being added exist in mod pool - has its own mod pool if (settings.ModPool.ContainsKey(modTpl.Value)) // Call self again with mod being added as item to add child mods to { - GenerateModsForEquipment( - equipment, - modId, - modTemplate.Value, - settings, - specificBlacklist, - forceSpawn - ); + GenerateModsForEquipment(equipment, modId, modTemplate.Value, settings, specificBlacklist, forceSpawn); } } @@ -315,11 +265,7 @@ public class BotEquipmentModGenerator( TemplateItem armorItem ) { - var result = new FilterPlateModsForSlotByLevelResult - { - Result = Result.UNKNOWN_FAILURE, - PlateModTemplates = null, - }; + var result = new FilterPlateModsForSlotByLevelResult { Result = Result.UNKNOWN_FAILURE, PlateModTemplates = null }; // Not pmc or not a plate slot, return original mod pool array if (!itemHelper.IsRemovablePlateSlot(modSlot)) @@ -331,10 +277,8 @@ public class BotEquipmentModGenerator( } // Get the front/back/side weights based on bots level - var plateSlotWeights = settings.BotEquipmentConfig?.ArmorPlateWeighting.FirstOrDefault( - armorWeight => - settings.BotData.Level >= armorWeight.LevelRange.Min - && settings.BotData.Level <= armorWeight.LevelRange.Max + var plateSlotWeights = settings.BotEquipmentConfig?.ArmorPlateWeighting.FirstOrDefault(armorWeight => + settings.BotData.Level >= armorWeight.LevelRange.Min && settings.BotData.Level <= armorWeight.LevelRange.Max ); if (plateSlotWeights is null) @@ -360,14 +304,11 @@ public class BotEquipmentModGenerator( var chosenArmorPlateLevelString = weightedRandomHelper.GetWeightedValue(plateWeights); // Convert the array of ids into database items - var platesFromDb = existingPlateTplPool.Select(plateTpl => - itemHelper.GetItem(plateTpl).Value - ); + var platesFromDb = existingPlateTplPool.Select(plateTpl => itemHelper.GetItem(plateTpl).Value); // Filter plates to the chosen level based on its armorClass property var platesOfDesiredLevel = platesFromDb.Where(item => - item.Properties.ArmorClass.Value - == double.Parse(chosenArmorPlateLevelString, CultureInfo.InvariantCulture) + item.Properties.ArmorClass.Value == double.Parse(chosenArmorPlateLevelString, CultureInfo.InvariantCulture) ); if (platesOfDesiredLevel.Any()) { @@ -399,9 +340,7 @@ public class BotEquipmentModGenerator( findCompatiblePlateAttempts++; - platesOfDesiredLevel = platesFromDb.Where(item => - item.Properties.ArmorClass == chosenArmorPlateLevelDouble - ); + platesOfDesiredLevel = platesFromDb.Where(item => item.Properties.ArmorClass == chosenArmorPlateLevelDouble); // Valid plates found, exit if (platesOfDesiredLevel.Any()) { @@ -496,9 +435,7 @@ public class BotEquipmentModGenerator( { var defaultPreset = presetHelper.GetDefaultPreset(armorItemTpl); - return defaultPreset?.Items?.FirstOrDefault(item => - string.Equals(item.SlotId, modSlot, StringComparison.OrdinalIgnoreCase) - ); + return defaultPreset?.Items?.FirstOrDefault(item => string.Equals(item.SlotId, modSlot, StringComparison.OrdinalIgnoreCase)); } /// @@ -536,19 +473,11 @@ public class BotEquipmentModGenerator( request.BotData.EquipmentRole, pmcProfile?.Info?.Level ?? 0 ); - var botWeaponSightWhitelist = botEquipmentFilterService.GetBotWeaponSightWhitelist( - request.BotData.EquipmentRole - ); - var randomisationSettings = botHelper.GetBotRandomizationDetails( - request.BotData.Level ?? 0, - botEquipConfig - ); + var botWeaponSightWhitelist = botEquipmentFilterService.GetBotWeaponSightWhitelist(request.BotData.EquipmentRole); + var randomisationSettings = botHelper.GetBotRandomizationDetails(request.BotData.Level ?? 0, botEquipConfig); // Iterate over mod pool and choose mods to attach - var sortedModKeys = SortModKeys( - compatibleModsPool.Keys.ToHashSet(), - request.ParentTemplate.Id - ); + var sortedModKeys = SortModKeys(compatibleModsPool.Keys.ToHashSet(), request.ParentTemplate.Id); foreach (var modSlot in sortedModKeys) { // Check weapon has slot for mod to fit in @@ -572,28 +501,19 @@ public class BotEquipmentModGenerator( } // If the parent is a UBGL, the patron_in_weapon will be generated later - so skip it for now - if ( - modSlot == "patron_in_weapon" - && itemHelper.IsOfBaseclass(request.ParentTemplate.Id, BaseClasses.LAUNCHER) - ) + if (modSlot == "patron_in_weapon" && itemHelper.IsOfBaseclass(request.ParentTemplate.Id, BaseClasses.LAUNCHER)) { continue; } // Check spawn chance of mod - var modSpawnResult = ShouldModBeSpawned( - modsParentSlot, - modSlot, - request.ModSpawnChances, - botEquipConfig - ); + var modSpawnResult = ShouldModBeSpawned(modsParentSlot, modSlot, request.ModSpawnChances, botEquipConfig); if (modSpawnResult == ModSpawn.SKIP) { continue; } - var isRandomisableSlot = - randomisationSettings?.RandomisedWeaponModSlots?.Contains(modSlot) ?? false; + var isRandomisableSlot = randomisationSettings?.RandomisedWeaponModSlots?.Contains(modSlot) ?? false; ModToSpawnRequest modToSpawnRequest = new() { ModSlot = modSlot, @@ -618,15 +538,7 @@ public class BotEquipmentModGenerator( continue; } - if ( - !IsModValidForSlot( - modToAdd, - modsParentSlot, - modSlot, - request.ParentTemplate, - request.BotData.Role - ) - ) + if (!IsModValidForSlot(modToAdd, modsParentSlot, modSlot, request.ParentTemplate, request.BotData.Role)) { continue; } @@ -650,26 +562,14 @@ public class BotEquipmentModGenerator( if (ModSlotCanHoldScope(modSlot, modToAddTemplate.Parent)) { // mod_mount was picked to be added to weapon, force scope chance to ensure its filled - List scopeSlots = - [ - "mod_scope", - "mod_scope_000", - "mod_scope_001", - "mod_scope_002", - "mod_scope_003", - ]; + List scopeSlots = ["mod_scope", "mod_scope_000", "mod_scope_001", "mod_scope_002", "mod_scope_003"]; AdjustSlotSpawnChances(request.ModSpawnChances, scopeSlots, 100); // Hydrate pool of mods that fit into mount as its a randomisable slot if (isRandomisableSlot) // Add scope mods to modPool dictionary to ensure the mount has a scope in the pool to pick { - AddCompatibleModsForProvidedMod( - "mod_scope", - modToAddTemplate, - request.ModPool, - botEquipBlacklist - ); + AddCompatibleModsForProvidedMod("mod_scope", modToAddTemplate, request.ModPool, botEquipBlacklist); } } @@ -706,13 +606,7 @@ public class BotEquipmentModGenerator( if (ShouldForceSubStockSlots(modSlot, botEquipConfig, modToAddTemplate)) { // Stock mod can take additional stocks, could be a locking device, force 100% chance - List subStockSlots = - [ - "mod_stock", - "mod_stock_000", - "mod_stock_001", - "mod_stock_akms", - ]; + List subStockSlots = ["mod_stock", "mod_stock_000", "mod_stock_001", "mod_stock_akms"]; AdjustSlotSpawnChances(request.ModSpawnChances, subStockSlots, 100); } @@ -728,24 +622,14 @@ public class BotEquipmentModGenerator( request.WeaponStats.HasRearIronSight = true; } } - else if ( - !(request.WeaponStats.HasOptic ?? false) - && itemHelper.IsOfBaseclass(modToAddTemplate.Id, BaseClasses.SIGHTS) - ) + else if (!(request.WeaponStats.HasOptic ?? false) && itemHelper.IsOfBaseclass(modToAddTemplate.Id, BaseClasses.SIGHTS)) { request.WeaponStats.HasOptic = true; } var modId = new MongoId(); request.Weapon.Add( - CreateModItem( - modId, - modToAddTemplate.Id, - request.WeaponId, - modSlot, - modToAddTemplate, - request.BotData.Role - ) + CreateModItem(modId, modToAddTemplate.Id, request.WeaponId, modSlot, modToAddTemplate, request.BotData.Role) ); // Update conflicting item list now item has been chosen @@ -777,9 +661,7 @@ public class BotEquipmentModGenerator( && modToAddTemplate.Properties.Slots.Any() ) { - var modFromService = botEquipmentModPoolService.GetModsForWeaponSlot( - modToAddTemplate.Id - ); + var modFromService = botEquipmentModPoolService.GetModsForWeaponSlot(modToAddTemplate.Id); if (modFromService?.Count > 0) { request.ModPool[modToAddTemplate.Id] = modFromService.ToDictionary(); @@ -791,9 +673,7 @@ public class BotEquipmentModGenerator( if (!containsModInPool && !isRandomisableSlot) { // Check for required mods the item we've added needs to be classified as 'valid' - var modFromService = botEquipmentModPoolService.GetRequiredModsForWeaponSlot( - modToAddTemplate.Id - ); + var modFromService = botEquipmentModPoolService.GetRequiredModsForWeaponSlot(modToAddTemplate.Id); if (modFromService?.Count > 0) { request.ModPool[modToAddTemplate.Id] = modFromService; @@ -837,19 +717,12 @@ public class BotEquipmentModGenerator( /// Bots equipment config/chance values /// Mod being added to bots weapon /// True if it should - public bool ShouldForceSubStockSlots( - string modSlot, - EquipmentFilters botEquipConfig, - TemplateItem modToAddTemplate - ) + public bool ShouldForceSubStockSlots(string modSlot, EquipmentFilters botEquipConfig, TemplateItem modToAddTemplate) { // Can the stock hold child items - var hasSubSlots = - modToAddTemplate.Properties?.Slots is not null - && modToAddTemplate.Properties.Slots.Any(); + var hasSubSlots = modToAddTemplate.Properties?.Slots is not null && modToAddTemplate.Properties.Slots.Any(); - return (_stockSlots.Contains(modSlot) && hasSubSlots) - || botEquipConfig.ForceStock.GetValueOrDefault(false); + return (_stockSlots.Contains(modSlot) && hasSubSlots) || botEquipConfig.ForceStock.GetValueOrDefault(false); } /// @@ -887,11 +760,7 @@ public class BotEquipmentModGenerator( /// Chance dictionary to update /// /// - public void AdjustSlotSpawnChances( - Dictionary? modSpawnChances, - List? modSlotsToAdjust, - double newChancePercent - ) + public void AdjustSlotSpawnChances(Dictionary? modSpawnChances, List? modSlotsToAdjust, double newChancePercent) { if (modSpawnChances is null) { @@ -930,10 +799,7 @@ public class BotEquipmentModGenerator( /// Array of mod slot strings to sort /// The Tpl of the item with mod keys being sorted /// Sorted array - public HashSet SortModKeys( - HashSet unsortedSlotKeys, - MongoId itemTplWithKeysToSort - ) + public HashSet SortModKeys(HashSet unsortedSlotKeys, MongoId itemTplWithKeysToSort) { // No need to sort with only 1 item in array if (unsortedSlotKeys.Count <= 1) @@ -1078,15 +944,10 @@ public class BotEquipmentModGenerator( return ModSpawn.SPAWN; } - var spawnMod = randomUtil.RollChance( - modSpawnChances.GetValueOrDefault(modSlotName.ToLowerInvariant()) - ); + var spawnMod = randomUtil.RollChance(modSpawnChances.GetValueOrDefault(modSlotName.ToLowerInvariant())); if ( !spawnMod - && ( - slotRequired.GetValueOrDefault(false) - || (botEquipConfig.WeaponSlotIdsToMakeRequired?.Contains(modSlotName) ?? false) - ) + && (slotRequired.GetValueOrDefault(false) || (botEquipConfig.WeaponSlotIdsToMakeRequired?.Contains(modSlotName) ?? false)) ) // Edge case: Mod is required but spawn chance roll failed, choose default mod spawn for slot { @@ -1104,9 +965,7 @@ public class BotEquipmentModGenerator( public KeyValuePair? ChooseModToPutIntoSlot(ModToSpawnRequest request) { // Slot mod will fill - var parentSlot = request.ParentTemplate.Properties.Slots?.FirstOrDefault(i => - i.Name == request.ModSlot - ); + var parentSlot = request.ParentTemplate.Properties.Slots?.FirstOrDefault(i => i.Name == request.ModSlot); var weaponTemplate = itemHelper.GetItem(request.Weapon.First().Template).Value; // It's ammo, use predefined ammo parameter @@ -1136,11 +995,7 @@ public class BotEquipmentModGenerator( { if (modPool.Count > 1) { - modPool = FilterSightsByWeaponType( - request.Weapon.First(), - modPool, - request.BotWeaponSightWhitelist - ); + modPool = FilterSightsByWeaponType(request.Weapon.First(), modPool, request.BotWeaponSightWhitelist); } } @@ -1149,9 +1004,7 @@ public class BotEquipmentModGenerator( if ((request.WeaponStats?.HasOptic ?? false) && modPool.Count > 1) { // Attempt to limit modpool to low profile gas blocks when weapon has an optic - var onlyLowProfileGasBlocks = modPool.Where(tpl => - _botConfig.LowProfileGasBlockTpls.Contains(tpl) - ); + var onlyLowProfileGasBlocks = modPool.Where(tpl => _botConfig.LowProfileGasBlockTpls.Contains(tpl)); if (onlyLowProfileGasBlocks.Any()) { modPool = onlyLowProfileGasBlocks.ToHashSet(); @@ -1160,9 +1013,7 @@ public class BotEquipmentModGenerator( else if ((request.WeaponStats?.HasRearIronSight ?? false) && modPool.Count > 1) { // Attempt to limit modpool to high profile gas blocks when weapon has rear iron sight + no front iron sight - var onlyHighProfileGasBlocks = modPool.Where(tpl => - !_botConfig.LowProfileGasBlockTpls.Contains(tpl) - ); + var onlyHighProfileGasBlocks = modPool.Where(tpl => !_botConfig.LowProfileGasBlockTpls.Contains(tpl)); if (onlyHighProfileGasBlocks.Any()) { modPool = onlyHighProfileGasBlocks.ToHashSet(); @@ -1189,20 +1040,14 @@ public class BotEquipmentModGenerator( request.Weapon, request.ModSlot ); - if ( - chosenModResult.SlotBlocked.GetValueOrDefault(false) - && !parentSlot.Required.GetValueOrDefault(false) - ) + if (chosenModResult.SlotBlocked.GetValueOrDefault(false) && !parentSlot.Required.GetValueOrDefault(false)) // Don't bother trying to fit mod, slot is completely blocked { return null; } // Log if mod chosen was incompatible - if ( - chosenModResult.Incompatible.GetValueOrDefault(false) - && !parentSlot.Required.GetValueOrDefault(false) - ) + if (chosenModResult.Incompatible.GetValueOrDefault(false) && !parentSlot.Required.GetValueOrDefault(false)) { if (logger.IsLogEnabled(LogLevel.Debug)) { @@ -1213,27 +1058,14 @@ public class BotEquipmentModGenerator( } // Get random mod to attach from items db for required slots if none found above - if ( - !(chosenModResult.Found ?? false) - && parentSlot != null - && (parentSlot.Required ?? false) - ) + if (!(chosenModResult.Found ?? false) && parentSlot != null && (parentSlot.Required ?? false)) { - chosenModResult.ChosenTemplate = GetRandomModTplFromItemDb( - "", - parentSlot, - request.ModSlot, - request.Weapon - ); + chosenModResult.ChosenTemplate = GetRandomModTplFromItemDb("", parentSlot, request.ModSlot, request.Weapon); chosenModResult.Found = true; } // Compatible item not found + not required - if ( - !chosenModResult.Found.GetValueOrDefault(false) - && parentSlot is not null - && !parentSlot.Required.GetValueOrDefault(false) - ) + if (!chosenModResult.Found.GetValueOrDefault(false) && parentSlot is not null && !parentSlot.Required.GetValueOrDefault(false)) { return null; } @@ -1259,29 +1091,20 @@ public class BotEquipmentModGenerator( /// Request data /// Pool of magazine tpls to filter /// Filtered pool of magazine tpls - public IEnumerable GetFilteredMagazinePoolByCapacity( - ModToSpawnRequest modSpawnRequest, - HashSet modPool - ) + public IEnumerable GetFilteredMagazinePoolByCapacity(ModToSpawnRequest modSpawnRequest, HashSet modPool) { var weaponTpl = modSpawnRequest.Weapon.FirstOrDefault().Template; - modSpawnRequest.RandomisationSettings.MinimumMagazineSize.TryGetValue( - weaponTpl, - out var minMagSizeFromSettings - ); + modSpawnRequest.RandomisationSettings.MinimumMagazineSize.TryGetValue(weaponTpl, out var minMagSizeFromSettings); var desiredMagazineTpls = modPool.Where(magTpl => { var magazineDb = itemHelper.GetItem(magTpl).Value; return magazineDb.Properties?.Cartridges is not null - && magazineDb.Properties.Cartridges.FirstOrDefault()?.MaxCount - >= minMagSizeFromSettings; + && magazineDb.Properties.Cartridges.FirstOrDefault()?.MaxCount >= minMagSizeFromSettings; }); if (!desiredMagazineTpls.Any()) { - logger.Warning( - $"Magazine size filter for: {weaponTpl} was too strict, ignoring filter" - ); + logger.Warning($"Magazine size filter for: {weaponTpl} was too strict, ignoring filter"); return modPool; } @@ -1317,15 +1140,12 @@ public class BotEquipmentModGenerator( { Incompatible = true, Found = false, - Reason = - $"Unable to add mod to {choiceTypeEnum.ToString()} slot: {modSlotName}. All: {modPool.Count} had conflicts", + Reason = $"Unable to add mod to {choiceTypeEnum.ToString()} slot: {modSlotName}. All: {modPool.Count} had conflicts", }; } // Filter modpool to only items that appear in parents allowed list - preFilteredModPool = preFilteredModPool - .Where(tpl => parentSlot.Props.Filters.First().Filter.Contains(tpl)) - .ToHashSet(); + preFilteredModPool = preFilteredModPool.Where(tpl => parentSlot.Props.Filters.First().Filter.Contains(tpl)).ToHashSet(); if (preFilteredModPool.Count == 0) { return new ChooseRandomCompatibleModResult @@ -1393,8 +1213,7 @@ public class BotEquipmentModGenerator( // Check if existing weapon mods are incompatible with chosen item var existingItemBlockingChoice = weapon.FirstOrDefault(item => - pickedItemDetails.Value.Properties.ConflictingItems?.Contains(item.Template) - ?? false + pickedItemDetails.Value.Properties.ConflictingItems?.Contains(item.Template) ?? false ); if (existingItemBlockingChoice is not null) { @@ -1417,8 +1236,7 @@ public class BotEquipmentModGenerator( // Edge case - Some mod combos will never work, make sure this isn't the case if (WeaponModComboIsIncompatible(weapon, chosenTpl)) { - chosenModResult.Reason = - $"Chosen weapon mod: {chosenTpl} can never be compatible with existing weapon mods"; + chosenModResult.Reason = $"Chosen weapon mod: {chosenTpl} can never be compatible with existing weapon mods"; break; } @@ -1444,10 +1262,7 @@ public class BotEquipmentModGenerator( /// /// Tpls that are incompatible and should not be used /// string array of compatible mod tpls with weapon - public HashSet GetFilteredModPool( - HashSet modPool, - HashSet tplBlacklist - ) + public HashSet GetFilteredModPool(HashSet modPool, HashSet tplBlacklist) { return modPool.Where(tpl => !tplBlacklist.Contains(tpl)).ToHashSet(); } @@ -1461,10 +1276,7 @@ public class BotEquipmentModGenerator( /// /// Mods root parent (weapon/equipment) /// Array of mod tpls - public HashSet? GetModPoolForSlot( - ModToSpawnRequest request, - TemplateItem weaponTemplate - ) + public HashSet? GetModPoolForSlot(ModToSpawnRequest request, TemplateItem weaponTemplate) { // Mod is flagged as being default only, try and find it in globals if (request.ModSpawnResult == ModSpawn.DEFAULT_MOD) @@ -1474,11 +1286,7 @@ public class BotEquipmentModGenerator( if (request.IsRandomisableSlot.GetValueOrDefault(false)) { - return GetDynamicModPool( - request.ParentTemplate.Id, - request.ModSlot, - request.BotEquipBlacklist - ); + return GetDynamicModPool(request.ParentTemplate.Id, request.ModSlot, request.BotEquipBlacklist); } // Required mod is not default or randomisable, use existing pool @@ -1491,10 +1299,7 @@ public class BotEquipmentModGenerator( /// /// /// Hashset of mods keyed by slot - public HashSet GetModPoolForDefaultSlot( - ModToSpawnRequest request, - TemplateItem weaponTemplate - ) + public HashSet GetModPoolForDefaultSlot(ModToSpawnRequest request, TemplateItem weaponTemplate) { var matchingModFromPreset = GetMatchingModFromPreset(request, weaponTemplate); if (matchingModFromPreset is null) @@ -1517,10 +1322,7 @@ public class BotEquipmentModGenerator( // Filtering mod pool to item that wasn't already there can have problems; // You'd have a mod being picked without any sub-mods in its chain, possibly resulting in missing required mods not being added // Mod is in existing mod pool - if ( - request.ItemModPool.TryGetValue(request.ModSlot, out var ids) - && ids.Contains(matchingModFromPreset.Template) - ) + if (request.ItemModPool.TryGetValue(request.ModSlot, out var ids) && ids.Contains(matchingModFromPreset.Template)) // Found mod on preset + it already exists in mod pool { return [matchingModFromPreset.Template]; @@ -1530,11 +1332,7 @@ public class BotEquipmentModGenerator( // Check the filter of the slot to ensure a chosen mod fits var parentSlotCompatibleItems = request .ParentTemplate.Properties.Slots?.FirstOrDefault(slot => - string.Equals( - slot.Name.ToLowerInvariant(), - request.ModSlot.ToLowerInvariant(), - StringComparison.Ordinal - ) + string.Equals(slot.Name.ToLowerInvariant(), request.ModSlot.ToLowerInvariant(), StringComparison.Ordinal) ) ?.Props.Filters?.First() .Filter; @@ -1571,9 +1369,7 @@ public class BotEquipmentModGenerator( } // Last ditch, use full pool of items minus conflicts - var newListOfModsForSlot = parentSlotCompatibleItems.Where(tpl => - !request.ConflictingItemTpls.Contains(tpl) - ); + var newListOfModsForSlot = parentSlotCompatibleItems.Where(tpl => !request.ConflictingItemTpls.Contains(tpl)); if (newListOfModsForSlot.Any()) { return newListOfModsForSlot.ToHashSet(); @@ -1618,8 +1414,7 @@ public class BotEquipmentModGenerator( } // Edge case - dvl 500mm is the silenced barrel and has specific muzzle mods - var isDvl500mmSilencedBarrel = - parentItemTpl == ItemTpl.BARREL_DVL10_762X51_500MM_SUPPRESSED; + var isDvl500mmSilencedBarrel = parentItemTpl == ItemTpl.BARREL_DVL10_762X51_500MM_SUPPRESSED; if (isDvl500mmSilencedBarrel) { @@ -1638,10 +1433,7 @@ public class BotEquipmentModGenerator( public bool WeaponModComboIsIncompatible(IEnumerable weapon, MongoId modTpl) { // STM-9 + AR-15 Lone Star Ion Lite handguard - if ( - weapon.First().Template == ItemTpl.SMG_SOYUZTM_STM9_GEN2_9X19_CARBINE - && modTpl == ItemTpl.HANDGUARD_AR15_LONE_STAR_ION_LITE - ) + if (weapon.First().Template == ItemTpl.SMG_SOYUZTM_STM9_GEN2_9X19_CARBINE && modTpl == ItemTpl.HANDGUARD_AR15_LONE_STAR_ION_LITE) { return true; } @@ -1659,14 +1451,7 @@ public class BotEquipmentModGenerator( /// Used to add additional properties in the upd object /// The bots role mod is being created for /// Item object - public Item CreateModItem( - MongoId modId, - MongoId modTpl, - string parentId, - string modSlot, - TemplateItem modTemplate, - string botRole - ) + public Item CreateModItem(MongoId modId, MongoId modTpl, string parentId, string modSlot, TemplateItem modTemplate, string botRole) { return new Item { @@ -1696,12 +1481,7 @@ public class BotEquipmentModGenerator( /// Slot to get mod to fill /// Items to ensure picked mod is compatible with /// Item tpl - public MongoId? GetRandomModTplFromItemDb( - MongoId fallbackModTpl, - Slot parentSlot, - string modSlot, - IEnumerable items - ) + public MongoId? GetRandomModTplFromItemDb(MongoId fallbackModTpl, Slot parentSlot, string modSlot, IEnumerable items) { // Find compatible mods and make an array of them var allowedItems = parentSlot.Props.Filters.First().Filter; @@ -1712,11 +1492,7 @@ public class BotEquipmentModGenerator( while (exhaustableModPool.HasValues()) { tmpModTpl = exhaustableModPool.GetRandomValue(); - if ( - !botGeneratorHelper - .IsItemIncompatibleWithCurrentItems(items, tmpModTpl, modSlot) - .Incompatible.GetValueOrDefault(false) - ) + if (!botGeneratorHelper.IsItemIncompatibleWithCurrentItems(items, tmpModTpl, modSlot).Incompatible.GetValueOrDefault(false)) { return tmpModTpl; } @@ -1803,9 +1579,7 @@ public class BotEquipmentModGenerator( EquipmentFilterDetails botEquipBlacklist ) { - var desiredSlotObject = modTemplate.Properties?.Slots?.FirstOrDefault(slot => - slot.Name.Contains(desiredSlotName) - ); + var desiredSlotObject = modTemplate.Properties?.Slots?.FirstOrDefault(slot => slot.Name.Contains(desiredSlotName)); var supportedSubMods = desiredSlotObject?.Props?.Filters?.FirstOrDefault()?.Filter; if (supportedSubMods is null) @@ -1816,11 +1590,7 @@ public class BotEquipmentModGenerator( var supportedSubModsSet = supportedSubMods.ToHashSet(); // Filter mods - var filteredMods = FilterModsByBlacklist( - supportedSubModsSet, - botEquipBlacklist, - desiredSlotName - ); + var filteredMods = FilterModsByBlacklist(supportedSubModsSet, botEquipBlacklist, desiredSlotName); if (!filteredMods.Any()) { logger.Warning( @@ -1843,15 +1613,9 @@ public class BotEquipmentModGenerator( /// Slot item should fit in /// Equipment that should not be picked /// Array of compatible items for that slot - public HashSet GetDynamicModPool( - string parentItemId, - string modSlot, - EquipmentFilterDetails botEquipBlacklist - ) + public HashSet GetDynamicModPool(string parentItemId, string modSlot, EquipmentFilterDetails botEquipBlacklist) { - var modsFromDynamicPool = cloner.Clone( - botEquipmentModPoolService.GetCompatibleModsForWeaponSlot(parentItemId, modSlot) - ); + var modsFromDynamicPool = cloner.Clone(botEquipmentModPoolService.GetCompatibleModsForWeaponSlot(parentItemId, modSlot)); if (modsFromDynamicPool.Count == 0) { @@ -1866,12 +1630,7 @@ public class BotEquipmentModGenerator( return filteredMods; } - logger.Warning( - serverLocalisationService.GetText( - "bot-unable_to_filter_mod_slot_all_blacklisted", - modSlot - ) - ); + logger.Warning(serverLocalisationService.GetText("bot-unable_to_filter_mod_slot_all_blacklisted", modSlot)); return modsFromDynamicPool; } @@ -1883,11 +1642,7 @@ public class BotEquipmentModGenerator( /// Equipment blacklist details for bot level range /// Mod slot mods belong to /// New set of tpls not in blacklist(s) - public HashSet FilterModsByBlacklist( - HashSet modTplPool, - EquipmentFilterDetails? botEquipBlacklist, - string modSlot - ) + public HashSet FilterModsByBlacklist(HashSet modTplPool, EquipmentFilterDetails? botEquipBlacklist, string modSlot) { if (!modTplPool.Any()) { @@ -1898,10 +1653,7 @@ public class BotEquipmentModGenerator( // Get item blacklist and mod equipment blacklist as one Set var blacklist = new HashSet(); blacklist.UnionWith(itemFilterService.GetBlacklistedItems()); - if ( - botEquipBlacklist?.Equipment is not null - && botEquipBlacklist.Equipment.TryGetValue(modSlot, out var equipmentBlacklistValues) - ) + if (botEquipBlacklist?.Equipment is not null && botEquipBlacklist.Equipment.TryGetValue(modSlot, out var equipmentBlacklistValues)) { blacklist.UnionWith(equipmentBlacklistValues); } @@ -1939,17 +1691,13 @@ public class BotEquipmentModGenerator( new { weaponId = cylinderMagTemplate.Id, weaponName = cylinderMagTemplate.Name } ) ); - var camoraSlots = cylinderMagTemplate.Properties.Slots.Where(slot => - slot.Name.StartsWith("camora") - ); + var camoraSlots = cylinderMagTemplate.Properties.Slots.Where(slot => slot.Name.StartsWith("camora")); // Attempt to generate camora slots for item modPool[cylinderMagTemplate.Id] = new Dictionary>(); foreach (var camora in camoraSlots) { - modPool[cylinderMagTemplate.Id][camora.Name] = camora - .Props.Filters.First() - .Filter.ToHashSet(); + modPool[cylinderMagTemplate.Id][camora.Name] = camora.Props.Filters.First().Filter.ToHashSet(); } itemModPool = modPool[cylinderMagTemplate.Id]; @@ -1969,12 +1717,7 @@ public class BotEquipmentModGenerator( } else { - logger.Error( - serverLocalisationService.GetText( - "bot-missing_cartridge_slot", - cylinderMagTemplate.Id - ) - ); + logger.Error(serverLocalisationService.GetText("bot-missing_cartridge_slot", cylinderMagTemplate.Id)); return; } @@ -1984,11 +1727,7 @@ public class BotEquipmentModGenerator( while (exhaustibleModPool.HasValues()) { modTpl = exhaustibleModPool.GetRandomValue(); - if ( - !botGeneratorHelper - .IsItemIncompatibleWithCurrentItems(items, modTpl, modSlot) - .Incompatible.GetValueOrDefault(false) - ) + if (!botGeneratorHelper.IsItemIncompatibleWithCurrentItems(items, modTpl, modSlot).Incompatible.GetValueOrDefault(false)) { found = true; break; @@ -1997,9 +1736,7 @@ public class BotEquipmentModGenerator( if (!found) { - logger.Error( - serverLocalisationService.GetText("bot-no_compatible_camora_ammo_found", modSlot) - ); + logger.Error(serverLocalisationService.GetText("bot-no_compatible_camora_ammo_found", modSlot)); return; } @@ -2048,12 +1785,7 @@ public class BotEquipmentModGenerator( var weaponDetails = itemHelper.GetItem(weapon.Template); // Return original scopes array if whitelist not found - if ( - !botWeaponSightWhitelist.TryGetValue( - weaponDetails.Value.Parent, - out var whitelistedSightTypes - ) - ) + if (!botWeaponSightWhitelist.TryGetValue(weaponDetails.Value.Parent, out var whitelistedSightTypes)) { if (logger.IsLogEnabled(LogLevel.Debug)) { @@ -2089,17 +1821,14 @@ public class BotEquipmentModGenerator( // Check to see if mount has a scope slot (only include primary slot, ignore the rest like the backup sight slots) // Should only find 1 as there's currently no items with a mod_scope AND a mod_scope_000 HashSet filter = ["mod_scope", "mod_scope_000"]; - var scopeSlot = itemDetails.Properties.Slots.Where(slot => - filter.Contains(slot.Name) - ); + var scopeSlot = itemDetails.Properties.Slots.Where(slot => filter.Contains(slot.Name)); // Mods scope slot found must allow ALL whitelisted scope types OR be a mount if ( scopeSlot?.All(slot => slot.Props.Filters.FirstOrDefault() .Filter.All(tpl => - itemHelper.IsOfBaseclasses(tpl, whitelistedSightTypes) - || itemHelper.IsOfBaseclass(tpl, BaseClasses.MOUNT) + itemHelper.IsOfBaseclasses(tpl, whitelistedSightTypes) || itemHelper.IsOfBaseclass(tpl, BaseClasses.MOUNT) ) ) ?? false ) @@ -2115,9 +1844,7 @@ public class BotEquipmentModGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Scope whitelist too restrictive for: {weapon.Template} {weaponDetails.Value.Name}, skipping filter" - ); + logger.Debug($"Scope whitelist too restrictive for: {weapon.Template} {weaponDetails.Value.Name}, skipping filter"); } return scopes; diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs index 4103e0a8..3fbec658 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotGenerator.cs @@ -48,13 +48,7 @@ public class BotGenerator( /// base bot template to use (e.g. assault/pmcbot) /// profile of player generating pscav /// BotBase - public PmcData GeneratePlayerScav( - MongoId sessionId, - string role, - string difficulty, - BotType botTemplate, - PmcData profile - ) + public PmcData GeneratePlayerScav(MongoId sessionId, string role, string difficulty, BotType botTemplate, PmcData profile) { var bot = GetBotBaseClone(); bot.Info.Settings.BotDifficulty = difficulty; @@ -119,10 +113,7 @@ public class BotGenerator( /// Session id /// details on how to generate bots /// constructed bot - public BotBase PrepareAndGenerateBot( - MongoId sessionId, - BotGenerationDetails botGenerationDetails - ) + public BotBase PrepareAndGenerateBot(MongoId sessionId, BotGenerationDetails botGenerationDetails) { var preparedBotBase = GetPreparedBotBase( botGenerationDetails.EventRole ?? botGenerationDetails.Role, // Use eventRole if provided @@ -137,9 +128,7 @@ public class BotGenerator( var botJsonTemplateClone = cloner.Clone(botHelper.GetBotTemplate(botRole)); if (botJsonTemplateClone is null) { - logger.Error( - $"Unable to retrieve: {botRole} bot template, cannot generate bot of this type" - ); + logger.Error($"Unable to retrieve: {botRole} bot template, cannot generate bot of this type"); } return GenerateBot(sessionId, preparedBotBase, botJsonTemplateClone, botGenerationDetails); @@ -179,29 +168,15 @@ public class BotGenerator( /// Bot template from db/bots/x.json /// details on how to generate the bot /// BotBase object - protected BotBase GenerateBot( - MongoId sessionId, - BotBase bot, - BotType botJsonTemplate, - BotGenerationDetails botGenerationDetails - ) + protected BotBase GenerateBot(MongoId sessionId, BotBase bot, BotType botJsonTemplate, BotGenerationDetails botGenerationDetails) { var botRoleLowercase = botGenerationDetails.Role.ToLowerInvariant(); - var botLevel = botLevelGenerator.GenerateBotLevel( - botJsonTemplate.BotExperience.Level, - botGenerationDetails, - bot - ); + var botLevel = botLevelGenerator.GenerateBotLevel(botJsonTemplate.BotExperience.Level, botGenerationDetails, bot); // Only filter bot equipment, never players if (!botGenerationDetails.IsPlayerScav) { - botEquipmentFilterService.FilterBotEquipment( - sessionId, - botJsonTemplate, - botLevel.Level.Value, - botGenerationDetails - ); + botEquipmentFilterService.FilterBotEquipment(sessionId, botJsonTemplate, botLevel.Level.Value, botGenerationDetails); } bot.Info.Nickname = botNameService.GenerateUniqueBotNickname( @@ -212,9 +187,7 @@ public class BotGenerator( ); // Only Pmcs should have a lower nickname - bot.Info.LowerNickname = botGenerationDetails.IsPmc - ? bot.Info.Nickname.ToLowerInvariant() - : string.Empty; + bot.Info.LowerNickname = botGenerationDetails.IsPmc ? bot.Info.Nickname.ToLowerInvariant() : string.Empty; // Only run when generating a 'fake' playerscav, not actual player scav if (!botGenerationDetails.IsPlayerScav && ShouldSimulatePlayerScav(botRoleLowercase)) @@ -228,10 +201,7 @@ public class BotGenerator( { if (botGenerationDetails.Role != "gifter") { - seasonalEventService.RemoveChristmasItemsFromBotInventory( - botJsonTemplate.BotInventory, - botGenerationDetails.Role - ); + seasonalEventService.RemoveChristmasItemsFromBotInventory(botJsonTemplate.BotInventory, botGenerationDetails.Role); } } @@ -261,14 +231,10 @@ public class BotGenerator( botGenerationDetails.Role ); bot.Info.Settings.UseSimpleAnimator = botJsonTemplate.BotExperience.UseSimpleAnimator; - var chosenVoiceName = weightedRandomHelper.GetWeightedValue( - botJsonTemplate.BotAppearance.Voice - ); + var chosenVoiceName = weightedRandomHelper.GetWeightedValue(botJsonTemplate.BotAppearance.Voice); bot.Customization.Voice = databaseService .GetCustomization() - .FirstOrDefault(customisation => - customisation.Value.Name.Equals(chosenVoiceName, StringComparison.OrdinalIgnoreCase) - ) + .FirstOrDefault(customisation => customisation.Value.Name.Equals(chosenVoiceName, StringComparison.OrdinalIgnoreCase)) .Key; bot.Health = GenerateHealth(botJsonTemplate.BotHealth, botGenerationDetails.IsPlayerScav); bot.Skills = GenerateSkills(botJsonTemplate.BotSkills); @@ -323,8 +289,7 @@ public class BotGenerator( /// True if name should be simulated pscav protected bool ShouldSimulatePlayerScav(string botRole) { - return botRole == Roles.Assault - && randomUtil.GetChance100(_botConfig.ChanceAssaultScavHasPlayerScavName); + return botRole == Roles.Assault && randomUtil.GetChance100(_botConfig.ChanceAssaultScavHasPlayerScavName); } /// @@ -334,19 +299,13 @@ public class BotGenerator( /// the killed bots difficulty /// Role of bot (optional, used for error logging) /// Experience for kill - protected int GetExperienceRewardForKillByDifficulty( - Dictionary> experiences, - string botDifficulty, - string role - ) + protected int GetExperienceRewardForKillByDifficulty(Dictionary> experiences, string botDifficulty, string role) { if (!experiences.TryGetValue(botDifficulty.ToLowerInvariant(), out var result)) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to find experience: {botDifficulty} for {role} bot, falling back to `normal`" - ); + logger.Debug($"Unable to find experience: {botDifficulty} for {role} bot, falling back to `normal`"); } return randomUtil.GetInt(experiences["normal"].Min, experiences["normal"].Max); @@ -369,17 +328,11 @@ public class BotGenerator( /// Difficulty of bot to look up /// Role of bot (optional, used for error logging) /// Standing change value - protected double GetStandingChangeForKillByDifficulty( - Dictionary standingsForKill, - string botDifficulty, - string role - ) + protected double GetStandingChangeForKillByDifficulty(Dictionary standingsForKill, string botDifficulty, string role) { if (!standingsForKill.TryGetValue(botDifficulty.ToLowerInvariant(), out var result)) { - logger.Warning( - $"Unable to find standing for kill value for: {role} {botDifficulty}, falling back to `normal`" - ); + logger.Warning($"Unable to find standing for kill value for: {role} {botDifficulty}, falling back to `normal`"); return standingsForKill["normal"]; } @@ -394,17 +347,11 @@ public class BotGenerator( /// Difficulty of bot to look up /// Role of bot (optional, used for error logging) /// Standing change value - protected double GetAggressorBonusByDifficulty( - Dictionary aggressorBonuses, - string botDifficulty, - string role - ) + protected double GetAggressorBonusByDifficulty(Dictionary aggressorBonuses, string botDifficulty, string role) { if (!aggressorBonuses.TryGetValue(botDifficulty.ToLowerInvariant(), out var result)) { - logger.Warning( - $"Unable to find aggressor bonus for kill value for: {role} {botDifficulty}, falling back to `normal`" - ); + logger.Warning($"Unable to find aggressor bonus for kill value for: {role} {botDifficulty}, falling back to `normal`"); return aggressorBonuses["normal"]; } @@ -465,11 +412,7 @@ public class BotGenerator( /// Bot to adjust /// Appearance settings to choose from /// Generation details - protected void SetBotAppearance( - BotBase bot, - Appearance appearance, - BotGenerationDetails botGenerationDetails - ) + protected void SetBotAppearance(BotBase bot, Appearance appearance, BotGenerationDetails botGenerationDetails) { // Choose random values by weight bot.Customization.Head = weightedRandomHelper.GetWeightedValue(appearance.Head); @@ -480,9 +423,7 @@ public class BotGenerator( var chosenBodyTemplate = databaseService.GetCustomization()[bot.Customization.Body.Value]; // Some bodies have matching hands, look up body to see if this is the case - var chosenBody = bodyGlobalDictDb.FirstOrDefault(c => - c.Key == chosenBodyTemplate?.Name.Trim() - ); + var chosenBody = bodyGlobalDictDb.FirstOrDefault(c => c.Key == chosenBodyTemplate?.Name.Trim()); bot.Customization.Hands = chosenBody.Value?.IsNotRandom ?? false ? chosenBody.Value.Hands // Has fixed hands for chosen body, update to match @@ -497,9 +438,7 @@ public class BotGenerator( /// Health object protected BotBaseHealth GenerateHealth(BotTypeHealth healthObj, bool playerScav = false) { - var bodyParts = playerScav - ? GetLowestHpBodyPart(healthObj.BodyParts) - : randomUtil.GetArrayValue(healthObj.BodyParts); + var bodyParts = playerScav ? GetLowestHpBodyPart(healthObj.BodyParts) : randomUtil.GetArrayValue(healthObj.BodyParts); BotBaseHealth health = new() { @@ -515,10 +454,7 @@ public class BotGenerator( }, Temperature = new CurrentMinMax { - Current = randomUtil.GetDouble( - healthObj.Temperature.Min, - healthObj.Temperature.Max - ), + Current = randomUtil.GetDouble(healthObj.Temperature.Min, healthObj.Temperature.Max), Maximum = healthObj.Temperature.Max, }, BodyParts = new Dictionary @@ -540,10 +476,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = randomUtil.GetDouble( - bodyParts.Chest.Min, - bodyParts.Chest.Max - ), + Current = randomUtil.GetDouble(bodyParts.Chest.Min, bodyParts.Chest.Max), Maximum = Math.Round(bodyParts.Chest.Max), }, } @@ -554,10 +487,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = randomUtil.GetDouble( - bodyParts.Stomach.Min, - bodyParts.Stomach.Max - ), + Current = randomUtil.GetDouble(bodyParts.Stomach.Min, bodyParts.Stomach.Max), Maximum = Math.Round(bodyParts.Stomach.Max), }, } @@ -568,10 +498,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = randomUtil.GetDouble( - bodyParts.LeftArm.Min, - bodyParts.LeftArm.Max - ), + Current = randomUtil.GetDouble(bodyParts.LeftArm.Min, bodyParts.LeftArm.Max), Maximum = Math.Round(bodyParts.LeftArm.Max), }, } @@ -582,10 +509,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = randomUtil.GetDouble( - bodyParts.RightArm.Min, - bodyParts.RightArm.Max - ), + Current = randomUtil.GetDouble(bodyParts.RightArm.Min, bodyParts.RightArm.Max), Maximum = Math.Round(bodyParts.RightArm.Max), }, } @@ -596,10 +520,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = randomUtil.GetDouble( - bodyParts.LeftLeg.Min, - bodyParts.LeftLeg.Max - ), + Current = randomUtil.GetDouble(bodyParts.LeftLeg.Min, bodyParts.LeftLeg.Max), Maximum = Math.Round(bodyParts.LeftLeg.Max), }, } @@ -610,10 +531,7 @@ public class BotGenerator( { Health = new CurrentMinMax { - Current = randomUtil.GetDouble( - bodyParts.RightLeg.Min, - bodyParts.RightLeg.Max - ), + Current = randomUtil.GetDouble(bodyParts.RightLeg.Min, bodyParts.RightLeg.Max), Maximum = Math.Round(bodyParts.RightLeg.Max), }, } @@ -642,12 +560,7 @@ public class BotGenerator( .Select(bp => new { BodyPart = bp, - TotalMaxHp = bp.Head.Max - + bp.Chest.Max - + bp.LeftArm.Max - + bp.RightArm.Max - + bp.LeftLeg.Max - + bp.RightLeg.Max, + TotalMaxHp = bp.Head.Max + bp.Chest.Max + bp.LeftArm.Max + bp.RightArm.Max + bp.LeftLeg.Max + bp.RightLeg.Max, }) .OrderBy(x => x.TotalMaxHp) .FirstOrDefault() @@ -676,9 +589,7 @@ public class BotGenerator( /// /// Skills to randomise /// Skills with randomised progress values as a collection - protected List GetCommonSkillsWithRandomisedProgressValue( - Dictionary> skills - ) + protected List GetCommonSkillsWithRandomisedProgressValue(Dictionary> skills) { return skills .Select(kvp => @@ -707,9 +618,7 @@ public class BotGenerator( /// /// Skills to randomise /// Skills with randomised progress values as a collection - protected List GetMasteringSkillsWithRandomisedProgressValue( - Dictionary>? masteringSkills - ) + protected List GetMasteringSkillsWithRandomisedProgressValue(Dictionary>? masteringSkills) { if (masteringSkills is null) { @@ -727,11 +636,7 @@ public class BotGenerator( } // All skills have id and progress props - return new MasterySkill - { - Id = kvp.Key, - Progress = randomUtil.GetDouble(skill.Min, skill.Max), - }; + return new MasterySkill { Id = kvp.Key, Progress = randomUtil.GetDouble(skill.Min, skill.Max) }; }) .Where(baseSkill => baseSkill != null) .ToList(); @@ -818,9 +723,7 @@ public class BotGenerator( break; default: // Everyone else gets a weighted randomised category - botInfo.MemberCategory = weightedRandomHelper.GetWeightedValue( - _pmcConfig.AccountTypeWeight - ); + botInfo.MemberCategory = weightedRandomHelper.GetWeightedValue(_pmcConfig.AccountTypeWeight); break; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs index 0bca7426..c4c6b923 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotInventoryGenerator.cs @@ -51,11 +51,7 @@ public class BotInventoryGenerator( private readonly BotConfig _botConfig = configServer.GetConfig(); - private readonly FrozenSet _slotsToCheck = - [ - nameof(EquipmentSlots.Pockets), - nameof(EquipmentSlots.SecuredContainer), - ]; + private readonly FrozenSet _slotsToCheck = [nameof(EquipmentSlots.Pockets), nameof(EquipmentSlots.SecuredContainer)]; /// /// Add equipment/weapons/loot to bot @@ -86,9 +82,7 @@ public class BotInventoryGenerator( var botInventory = GenerateInventoryBase(); // Get generated raid details bot will be spawned in - var raidConfig = profileActivityService - .GetProfileActivityRaidData(sessionId) - ?.RaidConfiguration; + var raidConfig = profileActivityService.GetProfileActivityRaidData(sessionId)?.RaidConfiguration; GenerateAndAddEquipmentToBot( sessionId, @@ -115,15 +109,7 @@ public class BotInventoryGenerator( ); // Pick loot and add to bots containers (rig/backpack/pockets/secure) - botLootGenerator.GenerateLoot( - sessionId, - botJsonTemplate, - botGenerationDetails, - isPmc, - botRole, - botInventory, - botLevel - ); + botLootGenerator.GenerateLoot(sessionId, botJsonTemplate, botGenerationDetails, isPmc, botRole, botInventory, botLevel); return botInventory; } @@ -150,11 +136,7 @@ public class BotInventoryGenerator( new Item { Id = questRaidItemsId, Template = ItemTpl.STASH_QUESTRAID }, new Item { Id = questStashItemsId, Template = ItemTpl.STASH_QUESTOFFLINE }, new Item { Id = sortingTableId, Template = ItemTpl.SORTINGTABLE_SORTING_TABLE }, - new Item - { - Id = hideoutCustomizationStashId, - Template = ItemTpl.HIDEOUTAREACONTAINER_CUSTOMIZATION, - }, + new Item { Id = hideoutCustomizationStashId, Template = ItemTpl.HIDEOUTAREACONTAINER_CUSTOMIZATION }, ], Equipment = equipmentId, Stash = stashId, @@ -192,10 +174,7 @@ public class BotInventoryGenerator( GetRaidConfigurationRequestData? raidConfig ) { - _botConfig.Equipment.TryGetValue( - botGeneratorHelper.GetBotEquipmentRole(botRole), - out var botEquipConfig - ); + _botConfig.Equipment.TryGetValue(botGeneratorHelper.GetBotEquipmentRole(botRole), out var botEquipConfig); var randomistionDetails = botHelper.GetBotRandomizationDetails(botLevel, botEquipConfig); // Apply nighttime changes if its nighttime + there's changes to make @@ -205,11 +184,7 @@ public class BotInventoryGenerator( && weatherHelper.IsNightTime(raidConfig.TimeVariant, raidConfig.Location) ) { - foreach ( - var (equipment, weight) in randomistionDetails - .NighttimeChanges - .EquipmentModsModifiers - ) + foreach (var (equipment, weight) in randomistionDetails.NighttimeChanges.EquipmentModsModifiers) // Never let mod chance go outside 0 - 100 { var newWeight = weight + randomistionDetails.EquipmentMods[equipment]; @@ -260,11 +235,7 @@ public class BotInventoryGenerator( { RootEquipmentSlot = EquipmentSlots.Pockets, // Unheard profiles have unique sized pockets - RootEquipmentPool = GetPocketPoolByGameEdition( - chosenGameVersion, - templateInventory, - isPmc - ), + RootEquipmentPool = GetPocketPoolByGameEdition(chosenGameVersion, templateInventory, isPmc), ModPool = templateInventory.Mods, SpawnChances = wornItemChances, BotData = new BotData @@ -425,10 +396,7 @@ public class BotInventoryGenerator( /// /// Equipment to filter TacticalVest of /// Role of bot vests are being filtered for - public void FilterRigsToThoseWithProtection( - Dictionary> templateEquipment, - string botRole - ) + public void FilterRigsToThoseWithProtection(Dictionary> templateEquipment, string botRole) { var tacVestsWithArmor = templateEquipment[EquipmentSlots.TacticalVest] .Where(kvp => itemHelper.ItemHasSlots(kvp.Key)) @@ -438,9 +406,7 @@ public class BotInventoryGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to filter to only armored rigs as bot: {botRole} has none in pool" - ); + logger.Debug($"Unable to filter to only armored rigs as bot: {botRole} has none in pool"); } return; @@ -469,9 +435,7 @@ public class BotInventoryGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to filter to only unarmored rigs as bot: {botRole} has none in pool" - ); + logger.Debug($"Unable to filter to only unarmored rigs as bot: {botRole} has none in pool"); } return; @@ -489,18 +453,11 @@ public class BotInventoryGenerator( { double? spawnChance = _slotsToCheck.Contains(settings.RootEquipmentSlot.ToString()) ? 100 - : settings.SpawnChances.EquipmentChances.GetValueOrDefault( - settings.RootEquipmentSlot.ToString() - ); + : settings.SpawnChances.EquipmentChances.GetValueOrDefault(settings.RootEquipmentSlot.ToString()); if (!spawnChance.HasValue) { - logger.Warning( - serverLocalisationService.GetText( - "bot-no_spawn_chance_defined_for_equipment_slot", - settings.RootEquipmentSlot - ) - ); + logger.Warning(serverLocalisationService.GetText("bot-no_spawn_chance_defined_for_equipment_slot", settings.RootEquipmentSlot)); return false; } @@ -522,19 +479,12 @@ public class BotInventoryGenerator( return false; } - var chosenItemTpl = weightedRandomHelper.GetWeightedValue( - settings.RootEquipmentPool - ); + var chosenItemTpl = weightedRandomHelper.GetWeightedValue(settings.RootEquipmentPool); var dbResult = itemHelper.GetItem(chosenItemTpl); if (!dbResult.Key) { - logger.Error( - serverLocalisationService.GetText( - "bot-missing_item_template", - chosenItemTpl - ) - ); + logger.Error(serverLocalisationService.GetText("bot-missing_item_template", chosenItemTpl)); if (logger.IsLogEnabled(LogLevel.Debug)) { logger.Debug($"EquipmentSlot-> {settings.RootEquipmentSlot}"); @@ -584,10 +534,7 @@ public class BotInventoryGenerator( Template = pickedItemDb.Id, ParentId = settings.Inventory.Equipment, SlotId = settings.RootEquipmentSlot.ToString(), - Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( - pickedItemDb, - settings.BotData.Role - ), + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(pickedItemDb, settings.BotData.Role), }; var botEquipBlacklist = botEquipmentFilterService.GetBotEquipmentBlacklist( @@ -599,27 +546,17 @@ public class BotInventoryGenerator( if ( _botConfig.Equipment.ContainsKey(settings.BotData.EquipmentRole) && settings.RandomisationDetails?.RandomisedArmorSlots != null - && settings.RandomisationDetails.RandomisedArmorSlots.Contains( - settings.RootEquipmentSlot.ToString() - ) + && settings.RandomisationDetails.RandomisedArmorSlots.Contains(settings.RootEquipmentSlot.ToString()) ) // Filter out mods from relevant blacklist { - settings.ModPool[pickedItemDb.Id] = GetFilteredDynamicModsForItem( - pickedItemDb.Id, - botEquipBlacklist.Equipment - ); + settings.ModPool[pickedItemDb.Id] = GetFilteredDynamicModsForItem(pickedItemDb.Id, botEquipBlacklist.Equipment); } var itemIsOnGenerateModBlacklist = - settings.GenerateModsBlacklist != null - && settings.GenerateModsBlacklist.Contains(pickedItemDb.Id); + settings.GenerateModsBlacklist != null && settings.GenerateModsBlacklist.Contains(pickedItemDb.Id); // Does item have slots for sub-mods to be inserted into - if ( - pickedItemDb.Properties?.Slots is not null - && pickedItemDb.Properties.Slots.Any() - && !itemIsOnGenerateModBlacklist - ) + if (pickedItemDb.Properties?.Slots is not null && pickedItemDb.Properties.Slots.Any() && !itemIsOnGenerateModBlacklist) { var childItemsToAdd = botEquipmentModGenerator.GenerateModsForEquipment( [item], @@ -667,18 +604,14 @@ public class BotInventoryGenerator( return modsForSlot; } - var filteredMods = modsForSlot - .Where(mod => !blacklistedMods.Contains(mod)) - .ToHashSet(); + var filteredMods = modsForSlot.Where(mod => !blacklistedMods.Contains(mod)).ToHashSet(); if (filteredMods.Any()) { // There's at least one tpl remaining, send it return filteredMods; } - logger.Warning( - $"Filtering: '{modSlot}' resulted in 0 mods. Reverting to original set for slot" - ); + logger.Warning($"Filtering: '{modSlot}' resulted in 0 mods. Reverting to original set for slot"); // Return original return modsForSlot; @@ -712,9 +645,7 @@ public class BotInventoryGenerator( foreach (var desiredWeapons in weaponSlotsToFill) // Add weapon to bot if true and bot json has something to put into the slot { - if ( - desiredWeapons.ShouldSpawn && templateInventory.Equipment[desiredWeapons.Slot].Any() - ) + if (desiredWeapons.ShouldSpawn && templateInventory.Equipment[desiredWeapons.Slot].Any()) { AddWeaponAndMagazinesToInventory( sessionId, @@ -738,31 +669,19 @@ public class BotInventoryGenerator( /// What slots bot should have weapons generated for public IEnumerable GetDesiredWeaponsForBot(Chances equipmentChances) { - var shouldSpawnPrimary = randomUtil.GetChance100( - equipmentChances.EquipmentChances["FirstPrimaryWeapon"] - ); + var shouldSpawnPrimary = randomUtil.GetChance100(equipmentChances.EquipmentChances["FirstPrimaryWeapon"]); return [ - new DesiredWeapons - { - Slot = EquipmentSlots.FirstPrimaryWeapon, - ShouldSpawn = shouldSpawnPrimary, - }, + new DesiredWeapons { Slot = EquipmentSlots.FirstPrimaryWeapon, ShouldSpawn = shouldSpawnPrimary }, new DesiredWeapons { Slot = EquipmentSlots.SecondPrimaryWeapon, - ShouldSpawn = - shouldSpawnPrimary - && randomUtil.GetChance100( - equipmentChances.EquipmentChances["SecondPrimaryWeapon"] - ), + ShouldSpawn = shouldSpawnPrimary && randomUtil.GetChance100(equipmentChances.EquipmentChances["SecondPrimaryWeapon"]), }, new DesiredWeapons { Slot = EquipmentSlots.Holster, - ShouldSpawn = - !shouldSpawnPrimary - || randomUtil.GetChance100(equipmentChances.EquipmentChances["Holster"]), // No primary = force pistol + ShouldSpawn = !shouldSpawnPrimary || randomUtil.GetChance100(equipmentChances.EquipmentChances["Holster"]), // No primary = force pistol }, ]; } @@ -804,12 +723,7 @@ public class BotInventoryGenerator( botInventory.Items.AddRange(generatedWeapon.Weapon); - botWeaponGenerator.AddExtraMagazinesToInventory( - generatedWeapon, - itemGenerationWeights.Items.Magazines, - botInventory, - botRole - ); + botWeaponGenerator.AddExtraMagazinesToInventory(generatedWeapon, itemGenerationWeights.Items.Magazines, botInventory, botRole); } } diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs index 491316c9..db425262 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotLevelGenerator.cs @@ -11,11 +11,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Generators; [Injectable] -public class BotLevelGenerator( - ISptLogger logger, - RandomUtil randomUtil, - DatabaseService databaseService -) +public class BotLevelGenerator(ISptLogger logger, RandomUtil randomUtil, DatabaseService databaseService) { /// /// Return a randomised bot level and exp value @@ -24,11 +20,7 @@ public class BotLevelGenerator( /// Details to help generate a bot /// Bot the level is being generated for /// IRandomisedBotLevelResult object - public RandomisedBotLevelResult GenerateBotLevel( - MinMax levelDetails, - BotGenerationDetails botGenerationDetails, - BotBase bot - ) + public RandomisedBotLevelResult GenerateBotLevel(MinMax levelDetails, BotGenerationDetails botGenerationDetails, BotBase bot) { if (!botGenerationDetails.IsPmc) { @@ -36,18 +28,11 @@ public class BotLevelGenerator( } var expTable = databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable; - var botLevelRange = GetRelativePmcBotLevelRange( - botGenerationDetails, - levelDetails, - expTable.Length - ); + var botLevelRange = GetRelativePmcBotLevelRange(botGenerationDetails, levelDetails, expTable.Length); // Get random level based on the exp table. var exp = 0; - var level = int.Parse( - ChooseBotLevel(botLevelRange.Min, botLevelRange.Max, 1, 1.15) - .ToString(CultureInfo.InvariantCulture) - ); // TODO - nasty double to string to int conversion + var level = int.Parse(ChooseBotLevel(botLevelRange.Min, botLevelRange.Max, 1, 1.15).ToString(CultureInfo.InvariantCulture)); // TODO - nasty double to string to int conversion for (var i = 0; i < level; i++) { exp += expTable[i].Experience; diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs index cda42851..c5ada766 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotLootGenerator.cs @@ -51,11 +51,7 @@ public class BotLootGenerator( limitsForBotDict[limit.Key] = 0; } - return new ItemSpawnLimitSettings - { - CurrentLimits = limitsForBotDict, - GlobalLimits = GetItemSpawnLimitsForBotType(botRole), - }; + return new ItemSpawnLimitSettings { CurrentLimits = limitsForBotDict, GlobalLimits = GetItemSpawnLimitsForBotType(botRole) }; } /// @@ -95,20 +91,14 @@ public class BotLootGenerator( || itemCounts.Grenades.Weights is null ) { - logger.Warning( - serverLocalisationService.GetText("bot-unable_to_generate_bot_loot", botRole) - ); + logger.Warning(serverLocalisationService.GetText("bot-unable_to_generate_bot_loot", botRole)); return; } - var backpackLootCount = weightedRandomHelper.GetWeightedValue( - itemCounts.BackpackLoot.Weights - ); + var backpackLootCount = weightedRandomHelper.GetWeightedValue(itemCounts.BackpackLoot.Weights); var pocketLootCount = weightedRandomHelper.GetWeightedValue(itemCounts.PocketLoot.Weights); var vestLootCount = weightedRandomHelper.GetWeightedValue(itemCounts.VestLoot.Weights); - var specialLootItemCount = weightedRandomHelper.GetWeightedValue( - itemCounts.SpecialItems.Weights - ); + var specialLootItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.SpecialItems.Weights); var healingItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Healing.Weights); var drugItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Drugs.Weights); var foodItemCount = weightedRandomHelper.GetWeightedValue(itemCounts.Food.Weights); @@ -142,12 +132,7 @@ public class BotLootGenerator( // Special items AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.Special, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.Special, botJsonTemplate), containersBotHasAvailable, specialLootItemCount, botInventory, @@ -158,12 +143,7 @@ public class BotLootGenerator( // Healing items / Meds AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.HealingItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.HealingItems, botJsonTemplate), containersBotHasAvailable, healingItemCount, botInventory, @@ -176,12 +156,7 @@ public class BotLootGenerator( // Drugs AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.DrugItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.DrugItems, botJsonTemplate), containersBotHasAvailable, drugItemCount, botInventory, @@ -194,12 +169,7 @@ public class BotLootGenerator( // Food AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.FoodItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.FoodItems, botJsonTemplate), containersBotHasAvailable, foodItemCount, botInventory, @@ -212,12 +182,7 @@ public class BotLootGenerator( // Drink AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.DrinkItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.DrinkItems, botJsonTemplate), containersBotHasAvailable, drinkItemCount, botInventory, @@ -230,12 +195,7 @@ public class BotLootGenerator( // Currency AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.CurrencyItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.CurrencyItems, botJsonTemplate), containersBotHasAvailable, currencyItemCount, botInventory, @@ -248,12 +208,7 @@ public class BotLootGenerator( // Stims AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.StimItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.StimItems, botJsonTemplate), containersBotHasAvailable, stimItemCount, botInventory, @@ -266,12 +221,7 @@ public class BotLootGenerator( // Grenades AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.GrenadeItems, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.GrenadeItems, botJsonTemplate), [EquipmentSlots.Pockets, EquipmentSlots.TacticalVest], // Can't use containersBotHasEquipped as we don't want grenades added to backpack grenadeCount, botInventory, @@ -304,20 +254,11 @@ public class BotLootGenerator( } var backpackLootRoubleTotal = isPmc - ? _pmcConfig.LootSettings.Backpack.GetRoubleValue( - botLevel, - botGenerationDetails.Location - ) + ? _pmcConfig.LootSettings.Backpack.GetRoubleValue(botLevel, botGenerationDetails.Location) : 0; AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.Backpack, - botJsonTemplate, - itemPriceLimits?.Backpack - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.Backpack, botJsonTemplate, itemPriceLimits?.Backpack), [EquipmentSlots.Backpack], backpackLootCount, botInventory, @@ -329,22 +270,14 @@ public class BotLootGenerator( ); } - var vestLootRoubleTotal = isPmc - ? _pmcConfig.LootSettings.Vest.GetRoubleValue(botLevel, botGenerationDetails.Location) - : 0; + var vestLootRoubleTotal = isPmc ? _pmcConfig.LootSettings.Vest.GetRoubleValue(botLevel, botGenerationDetails.Location) : 0; // TacticalVest - generate loot if they have one if (containersBotHasAvailable.Contains(EquipmentSlots.TacticalVest)) // Vest { AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.Vest, - botJsonTemplate, - itemPriceLimits?.Vest - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.Vest, botJsonTemplate, itemPriceLimits?.Vest), [EquipmentSlots.TacticalVest], vestLootCount, botInventory, @@ -356,19 +289,11 @@ public class BotLootGenerator( ); } - var pocketLootRoubleTotal = isPmc - ? _pmcConfig.LootSettings.Pocket.GetRoubleValue(botLevel, botGenerationDetails.Location) - : 0; + var pocketLootRoubleTotal = isPmc ? _pmcConfig.LootSettings.Pocket.GetRoubleValue(botLevel, botGenerationDetails.Location) : 0; // Pockets AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.Pocket, - botJsonTemplate, - itemPriceLimits?.Pocket - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.Pocket, botJsonTemplate, itemPriceLimits?.Pocket), [EquipmentSlots.Pockets], pocketLootCount, botInventory, @@ -385,12 +310,7 @@ public class BotLootGenerator( if (!isPmc || (isPmc && _pmcConfig.AddSecureContainerLootFromBotConfig)) { AddLootFromPool( - botLootCacheService.GetLootFromCache( - botRole, - isPmc, - LootCacheType.Secure, - botJsonTemplate - ), + botLootCacheService.GetLootFromCache(botRole, isPmc, LootCacheType.Secure, botJsonTemplate), [EquipmentSlots.SecuredContainer], 50, botInventory, @@ -423,17 +343,11 @@ public class BotLootGenerator( /// /// Bot to check /// Array of available slots - protected HashSet GetAvailableContainersBotCanStoreItemsIn( - BotBaseInventory botInventory - ) + protected HashSet GetAvailableContainersBotCanStoreItemsIn(BotBaseInventory botInventory) { HashSet result = [EquipmentSlots.Pockets]; - if ( - (botInventory.Items ?? []).Any(item => - item.SlotId == nameof(EquipmentSlots.TacticalVest) - ) - ) + if ((botInventory.Items ?? []).Any(item => item.SlotId == nameof(EquipmentSlots.TacticalVest))) { result.Add(EquipmentSlots.TacticalVest); } @@ -467,10 +381,7 @@ public class BotLootGenerator( // AFAK AddLootFromPool( - new Dictionary - { - { ItemTpl.MEDKIT_AFAK_TACTICAL_INDIVIDUAL_FIRST_AID_KIT, 1 }, - }, + new Dictionary { { ItemTpl.MEDKIT_AFAK_TACTICAL_INDIVIDUAL_FIRST_AID_KIT, 1 } }, [EquipmentSlots.SecuredContainer], 10, botInventory, @@ -527,17 +438,12 @@ public class BotLootGenerator( if (!key) { - logger.Warning( - $"Unable to process item tpl: {weightedItemTpl} for slots: {equipmentSlots} on bot: {botRole}" - ); + logger.Warning($"Unable to process item tpl: {weightedItemTpl} for slots: {equipmentSlots} on bot: {botRole}"); continue; } - if ( - itemSpawnLimits is not null - && ItemHasReachedSpawnLimit(itemToAddTemplate, botRole, itemSpawnLimits) - ) + if (itemSpawnLimits is not null && ItemHasReachedSpawnLimit(itemToAddTemplate, botRole, itemSpawnLimits)) { // Remove item from pool to prevent it being picked again pool.Remove(weightedItemTpl); @@ -553,19 +459,14 @@ public class BotLootGenerator( { Id = newRootItemId, Template = itemToAddTemplate?.Id ?? MongoId.Empty(), - Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( - itemToAddTemplate, - botRole - ), + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(itemToAddTemplate, botRole), }, ]; // Is Simple-Wallet / WZ wallet if (_botConfig.WalletLoot.WalletTplPool.Contains(weightedItemTpl)) { - var addCurrencyToWallet = randomUtil.GetChance100( - _botConfig.WalletLoot.ChancePercent - ); + var addCurrencyToWallet = randomUtil.GetChance100(_botConfig.WalletLoot.ChancePercent); if (addCurrencyToWallet) { // Create the currency items we want to add to wallet @@ -584,12 +485,7 @@ public class BotLootGenerator( // Add each currency to wallet foreach (var itemToAdd in itemsToAdd) { - inventoryHelper.PlaceItemInContainer( - containerGrid, - itemToAdd, - itemWithChildrenToAdd[0].Id, - "main" - ); + inventoryHelper.PlaceItemInContainer(containerGrid, itemToAdd, itemWithChildrenToAdd[0].Id, "main"); } itemWithChildrenToAdd.AddRange(itemsToAdd.SelectMany(x => x)); @@ -618,9 +514,7 @@ public class BotLootGenerator( // Bot has no container to put item in, exit if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to add: {totalItemCount} items to bot as it lacks a container to include them" - ); + logger.Debug($"Unable to add: {totalItemCount} items to bot as it lacks a container to include them"); } break; @@ -670,24 +564,17 @@ public class BotLootGenerator( List> result = []; // Choose how many stacks of currency will be added to wallet - var itemCount = randomUtil.GetInt( - _botConfig.WalletLoot.ItemCount.Min, - _botConfig.WalletLoot.ItemCount.Max - ); + var itemCount = randomUtil.GetInt(_botConfig.WalletLoot.ItemCount.Min, _botConfig.WalletLoot.ItemCount.Max); for (var index = 0; index < itemCount; index++) { // Choose the size of the currency stack - default is 5k, 10k, 15k, 20k, 25k - var chosenStackCount = weightedRandomHelper.GetWeightedValue( - _botConfig.WalletLoot.StackSizeWeight - ); + var chosenStackCount = weightedRandomHelper.GetWeightedValue(_botConfig.WalletLoot.StackSizeWeight); List items = [ new() { Id = new MongoId(), - Template = weightedRandomHelper.GetWeightedValue( - _botConfig.WalletLoot.CurrencyWeight - ), + Template = weightedRandomHelper.GetWeightedValue(_botConfig.WalletLoot.CurrencyWeight), ParentId = walletId, Upd = new Upd { StackObjectsCount = int.Parse(chosenStackCount) }, }, @@ -705,12 +592,7 @@ public class BotLootGenerator( /// Item to add children to /// Is the item being generated for a pmc (affects money/ammo stack sizes) /// role bot has that owns item - public void AddRequiredChildItemsToParent( - TemplateItem? itemToAddTemplate, - List itemToAddChildrenTo, - bool isPmc, - string botRole - ) + public void AddRequiredChildItemsToParent(TemplateItem? itemToAddTemplate, List itemToAddChildrenTo, bool isPmc, string botRole) { // Fill ammo box if (itemHelper.IsOfBaseclass(itemToAddTemplate.Id, BaseClasses.AMMO_BOX)) @@ -792,9 +674,7 @@ public class BotLootGenerator( var weaponRootItem = generatedWeapon.Weapon?.FirstOrDefault(); if (weaponRootItem is null) { - logger.Error( - $"Generated null loose weapon: {chosenWeaponType} for: {botRole} level: {botLevel}, skipping" - ); + logger.Error($"Generated null loose weapon: {chosenWeaponType} for: {botRole} level: {botLevel}, skipping"); continue; } @@ -811,9 +691,7 @@ public class BotLootGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Failed to add additional weapon: {weaponRootItem.Id} to bot backpack, reason: {result.ToString()}" - ); + logger.Debug($"Failed to add additional weapon: {weaponRootItem.Id} to bot backpack, reason: {result.ToString()}"); } } } @@ -826,11 +704,7 @@ public class BotLootGenerator( /// Bot type /// /// true if item has reached spawn limit - protected bool ItemHasReachedSpawnLimit( - TemplateItem? itemTemplate, - string botRole, - ItemSpawnLimitSettings? itemSpawnLimits - ) + protected bool ItemHasReachedSpawnLimit(TemplateItem? itemTemplate, string botRole, ItemSpawnLimitSettings? itemSpawnLimits) { // PMCs and scavs have different sections of bot config for spawn limits if (itemSpawnLimits is not null && itemSpawnLimits.GlobalLimits?.Count == 0) @@ -861,10 +735,7 @@ public class BotLootGenerator( // Check if over limit var currentLimitCount = itemSpawnLimits.CurrentLimits[idToCheckFor.Value]; - if ( - itemSpawnLimits.CurrentLimits[idToCheckFor.Value] - > itemSpawnLimits.GlobalLimits[idToCheckFor.Value] - ) + if (itemSpawnLimits.CurrentLimits[idToCheckFor.Value] > itemSpawnLimits.GlobalLimits[idToCheckFor.Value]) { // Prevent edge-case of small loot pools + code trying to add limited item over and over infinitely if (currentLimitCount > currentLimitCount * 10) @@ -911,9 +782,7 @@ public class BotLootGenerator( itemHelper.AddUpdObjectToItem(moneyItem); - moneyItem.Upd.StackObjectsCount = int.Parse( - weightedRandomHelper.GetWeightedValue(currencyWeight) - ); + moneyItem.Upd.StackObjectsCount = int.Parse(weightedRandomHelper.GetWeightedValue(currencyWeight)); } /// @@ -948,12 +817,7 @@ public class BotLootGenerator( return _botConfig.ItemSpawnLimits[botRole.ToLowerInvariant()]; } - logger.Warning( - serverLocalisationService.GetText( - "bot-unable_to_find_spawn_limits_fallback_to_defaults", - botRole - ) - ); + logger.Warning(serverLocalisationService.GetText("bot-unable_to_find_spawn_limits_fallback_to_defaults", botRole)); return []; } @@ -964,10 +828,7 @@ public class BotLootGenerator( /// item we want to look for in spawn limits /// Limits to check for item /// id as string, otherwise undefined - public MongoId? GetMatchingIdFromSpawnLimits( - TemplateItem itemTemplate, - Dictionary spawnLimits - ) + public MongoId? GetMatchingIdFromSpawnLimits(TemplateItem itemTemplate, Dictionary spawnLimits) { if (spawnLimits.ContainsKey(itemTemplate.Id)) { diff --git a/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs index 0bbb4a8a..9bfc0ffe 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/BotWeaponGenerator.cs @@ -37,9 +37,7 @@ public class BotWeaponGenerator( { protected const string _modMagazineSlotId = "mod_magazine"; protected readonly BotConfig _botConfig = configServer.GetConfig(); - protected readonly IEnumerable _inventoryMagGenComponents = MagGenSetUp( - inventoryMagGenComponents - ); + protected readonly IEnumerable _inventoryMagGenComponents = MagGenSetUp(inventoryMagGenComponents); protected readonly PmcConfig _pmcConfig = configServer.GetConfig(); protected readonly RepairConfig _repairConfig = configServer.GetConfig(); @@ -93,10 +91,7 @@ public class BotWeaponGenerator( /// Primary/secondary/holster /// e.g. assault.json /// Weapon template - public MongoId PickWeightedWeaponTemplateFromPool( - string equipmentSlot, - BotTypeInventory botTemplateInventory - ) + public MongoId PickWeightedWeaponTemplateFromPool(string equipmentSlot, BotTypeInventory botTemplateInventory) { if (!Enum.TryParse(equipmentSlot, out EquipmentSlots key)) { @@ -146,23 +141,14 @@ public class BotWeaponGenerator( // Find ammo to use when filling magazines/chamber if (botTemplateInventory.Ammo is null) { - logger.Error( - serverLocalisationService.GetText("bot-no_ammo_found_in_bot_json", botRole) - ); + logger.Error(serverLocalisationService.GetText("bot-no_ammo_found_in_bot_json", botRole)); logger.Error(serverLocalisationService.GetText("bot-generation_failed")); } var ammoTpl = GetWeightedCompatibleAmmo(botTemplateInventory.Ammo, weaponItemTemplate); // Create with just base weapon item - var weaponWithModsArray = ConstructWeaponBaseList( - weaponTpl, - weaponParentId, - slotName, - weaponItemTemplate, - botRole - ) - .ToList(); + var weaponWithModsArray = ConstructWeaponBaseList(weaponTpl, weaponParentId, slotName, weaponItemTemplate, botRole).ToList(); // Chance to add randomised weapon enhancement if (isPmc && randomUtil.GetChance100(_pmcConfig.WeaponHasEnhancementChancePercent)) @@ -198,28 +184,17 @@ public class BotWeaponGenerator( WeaponStats = new WeaponStats(), ConflictingItemTpls = [], }; - weaponWithModsArray = botEquipmentModGenerator.GenerateModsForWeapon( - sessionId, - generateWeaponModsRequest - ); + weaponWithModsArray = botEquipmentModGenerator.GenerateModsForWeapon(sessionId, generateWeaponModsRequest); } // Use weapon preset from globals.json if weapon isn't valid if (!IsWeaponValid(weaponWithModsArray, botRole)) // Weapon is bad, fall back to weapons preset { - weaponWithModsArray = GetPresetWeaponMods( - weaponTpl, - slotName, - weaponParentId, - weaponItemTemplate, - botRole - ); + weaponWithModsArray = GetPresetWeaponMods(weaponTpl, slotName, weaponParentId, weaponItemTemplate, botRole); } - var tempList = cloner.Clone( - weaponWithModsArray.Where(item => item.SlotId == _modMagazineSlotId) - ); + var tempList = cloner.Clone(weaponWithModsArray.Where(item => item.SlotId == _modMagazineSlotId)); // Fill existing magazines to full and sync ammo type foreach (var magazine in tempList) { @@ -229,16 +204,11 @@ public class BotWeaponGenerator( // Add cartridge(s) to gun chamber(s) if ( (weaponItemTemplate.Properties?.Chambers).Any() - && weaponItemTemplate - .Properties.Chambers.FirstOrDefault() - .Props.Filters.FirstOrDefault() - .Filter.Contains(ammoTpl) + && weaponItemTemplate.Properties.Chambers.FirstOrDefault().Props.Filters.FirstOrDefault().Filter.Contains(ammoTpl) ) { // Guns have variety of possible Chamber ids, patron_in_weapon/patron_in_weapon_000/patron_in_weapon_001 - var chamberSlotNames = weaponItemTemplate.Properties.Chambers.Select(chamberSlot => - chamberSlot.Name - ); + var chamberSlotNames = weaponItemTemplate.Properties.Chambers.Select(chamberSlot => chamberSlot.Name); AddCartridgeToChamber(weaponWithModsArray, ammoTpl, chamberSlotNames.ToList()); } @@ -274,11 +244,7 @@ public class BotWeaponGenerator( /// Weapon and mods /// Cartridge to add to weapon /// Name of slots to create or add ammo to - protected void AddCartridgeToChamber( - List weaponWithModsList, - MongoId ammoTemplate, - IEnumerable chamberSlotIds - ) + protected void AddCartridgeToChamber(List weaponWithModsList, MongoId ammoTemplate, IEnumerable chamberSlotIds) { foreach (var slotId in chamberSlotIds) { @@ -332,10 +298,7 @@ public class BotWeaponGenerator( Template = weaponTemplate, ParentId = weaponParentId, SlotId = equipmentSlot, - Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( - weaponItemTemplate, - botRole - ), + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(weaponItemTemplate, botRole), }, ]; } @@ -359,10 +322,7 @@ public class BotWeaponGenerator( { // Invalid weapon generated, fallback to preset logger.Warning( - serverLocalisationService.GetText( - "bot-weapon_generated_incorrect_using_default", - $"{weaponTemplate} - {itemTemplate.Name}" - ) + serverLocalisationService.GetText("bot-weapon_generated_incorrect_using_default", $"{weaponTemplate} - {itemTemplate.Name}") ); List weaponMods = []; @@ -383,18 +343,13 @@ public class BotWeaponGenerator( var parentItem = preset.Items[0]; parentItem.ParentId = weaponParentId; parentItem.SlotId = equipmentSlot; - parentItem.Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( - itemTemplate, - botRole - ); + parentItem.Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(itemTemplate, botRole); preset.Items[0] = parentItem; weaponMods.AddRange(preset.Items); } else { - logger.Error( - serverLocalisationService.GetText("bot-missing_weapon_preset", weaponTemplate) - ); + logger.Error(serverLocalisationService.GetText("bot-missing_weapon_preset", weaponTemplate)); } return weaponMods; @@ -417,16 +372,10 @@ public class BotWeaponGenerator( } // Iterate over required slots in db item, check mod exists for that slot - foreach ( - var modSlotTemplate in modTemplate.Properties.Slots?.Where(slot => - slot.Required.GetValueOrDefault(false) - ) ?? [] - ) + foreach (var modSlotTemplate in modTemplate.Properties.Slots?.Where(slot => slot.Required.GetValueOrDefault(false)) ?? []) { var slotName = modSlotTemplate.Name; - var hasWeaponSlotItem = weaponItemList.Any(weaponItem => - weaponItem.ParentId == mod.Id && weaponItem.SlotId == slotName - ); + var hasWeaponSlotItem = weaponItemList.Any(weaponItem => weaponItem.ParentId == mod.Id && weaponItem.SlotId == slotName); if (!hasWeaponSlotItem) { logger.Warning( @@ -467,18 +416,12 @@ public class BotWeaponGenerator( { var weaponAndMods = generatedWeaponResult.Weapon; var weaponTemplate = generatedWeaponResult.WeaponTemplate; - var magazineTpl = GetMagazineTemplateFromWeaponTemplate( - weaponAndMods, - weaponTemplate, - botRole - ); + var magazineTpl = GetMagazineTemplateFromWeaponTemplate(weaponAndMods, weaponTemplate, botRole); var magTemplate = itemHelper.GetItem(magazineTpl.Value).Value; if (magTemplate is null) { - logger.Error( - serverLocalisationService.GetText("bot-unable_to_find_magazine_item", magazineTpl) - ); + logger.Error(serverLocalisationService.GetText("bot-unable_to_find_magazine_item", magazineTpl)); return; } @@ -487,36 +430,20 @@ public class BotWeaponGenerator( var ammoTemplate = itemHelper.GetItem(generatedWeaponResult.ChosenAmmoTemplate); if (!ammoTemplate.Key) { - logger.Error( - serverLocalisationService.GetText( - "bot-unable_to_find_ammo_item", - generatedWeaponResult.ChosenAmmoTemplate - ) - ); + logger.Error(serverLocalisationService.GetText("bot-unable_to_find_ammo_item", generatedWeaponResult.ChosenAmmoTemplate)); return; } // Has an UBGL - if ( - generatedWeaponResult.ChosenUbglAmmoTemplate is not null - && !generatedWeaponResult.ChosenUbglAmmoTemplate.Value.IsEmpty() - ) + if (generatedWeaponResult.ChosenUbglAmmoTemplate is not null && !generatedWeaponResult.ChosenUbglAmmoTemplate.Value.IsEmpty()) { AddUbglGrenadesToBotInventory(weaponAndMods, generatedWeaponResult, inventory); } - var inventoryMagGenModel = new InventoryMagGen( - magWeights, - magTemplate, - weaponTemplate, - ammoTemplate.Value, - inventory - ); + var inventoryMagGenModel = new InventoryMagGen(magWeights, magTemplate, weaponTemplate, ammoTemplate.Value, inventory); - _inventoryMagGenComponents - .FirstOrDefault(v => v.CanHandleInventoryMagGen(inventoryMagGenModel)) - .Process(inventoryMagGenModel); + _inventoryMagGenComponents.FirstOrDefault(v => v.CanHandleInventoryMagGen(inventoryMagGenModel)).Process(inventoryMagGenModel); // Add x stacks of bullets to SecuredContainer (bots use a magic mag packing skill to reload instantly) AddAmmoToSecureContainer( @@ -551,29 +478,14 @@ public class BotWeaponGenerator( }; // get ammo template from db - var ubglAmmoDbTemplate = itemHelper - .GetItem(generatedWeaponResult.ChosenUbglAmmoTemplate.Value) - .Value; + var ubglAmmoDbTemplate = itemHelper.GetItem(generatedWeaponResult.ChosenUbglAmmoTemplate.Value).Value; // Add greandes to bot inventory - var ubglAmmoGenModel = new InventoryMagGen( - ubglMinMax, - ubglDbTemplate, - ubglDbTemplate, - ubglAmmoDbTemplate, - inventory - ); - _inventoryMagGenComponents - .FirstOrDefault(v => v.CanHandleInventoryMagGen(ubglAmmoGenModel)) - .Process(ubglAmmoGenModel); + var ubglAmmoGenModel = new InventoryMagGen(ubglMinMax, ubglDbTemplate, ubglDbTemplate, ubglAmmoDbTemplate, inventory); + _inventoryMagGenComponents.FirstOrDefault(v => v.CanHandleInventoryMagGen(ubglAmmoGenModel)).Process(ubglAmmoGenModel); // Store extra grenades in secure container - AddAmmoToSecureContainer( - 5, - generatedWeaponResult.ChosenUbglAmmoTemplate.Value, - 20, - inventory - ); + AddAmmoToSecureContainer(5, generatedWeaponResult.ChosenUbglAmmoTemplate.Value, 20, inventory); } /// @@ -583,12 +495,7 @@ public class BotWeaponGenerator( /// Ammo type to add. /// Size of the ammo stack to add. /// Player inventory. - protected void AddAmmoToSecureContainer( - int stackCount, - MongoId ammoTpl, - int stackSize, - BotBaseInventory inventory - ) + protected void AddAmmoToSecureContainer(int stackCount, MongoId ammoTpl, int stackSize, BotBaseInventory inventory) { var container = new HashSet { EquipmentSlots.SecuredContainer }; for (var i = 0; i < stackCount; i++) @@ -618,11 +525,7 @@ public class BotWeaponGenerator( /// Weapon to get magazine template for. /// The bot type we are getting the magazine for. /// Magazine template string. - protected MongoId? GetMagazineTemplateFromWeaponTemplate( - IEnumerable weaponMods, - TemplateItem weaponTemplate, - string botRole - ) + protected MongoId? GetMagazineTemplateFromWeaponTemplate(IEnumerable weaponMods, TemplateItem weaponTemplate, string botRole) { var magazine = weaponMods.FirstOrDefault(m => m.SlotId == _modMagazineSlotId); if (magazine is null) @@ -667,16 +570,10 @@ public class BotWeaponGenerator( /// Dictionary of all cartridges keyed by type e.g. Caliber556x45NATO /// Weapon details from database we want to pick ammo for /// Ammo template that works with the desired gun - protected MongoId GetWeightedCompatibleAmmo( - Dictionary> cartridgePool, - TemplateItem weaponTemplate - ) + protected MongoId GetWeightedCompatibleAmmo(Dictionary> cartridgePool, TemplateItem weaponTemplate) { var desiredCaliber = GetWeaponCaliber(weaponTemplate); - if ( - !cartridgePool.TryGetValue(desiredCaliber, out var cartridgePoolForWeapon) - || cartridgePoolForWeapon?.Count == 0 - ) + if (!cartridgePool.TryGetValue(desiredCaliber, out var cartridgePoolForWeapon) || cartridgePoolForWeapon?.Count == 0) { if (logger.IsLogEnabled(LogLevel.Debug)) { @@ -699,9 +596,7 @@ public class BotWeaponGenerator( } // Get cartridges the weapons first chamber allow - var compatibleCartridgesInTemplate = GetCompatibleCartridgesFromWeaponTemplate( - weaponTemplate - ); + var compatibleCartridgesInTemplate = GetCompatibleCartridgesFromWeaponTemplate(weaponTemplate); if (compatibleCartridgesInTemplate.Count == 0) // No chamber data found in weapon, send default { @@ -722,9 +617,7 @@ public class BotWeaponGenerator( if (!compatibleCartridges.Any()) { // Get cartridges from the weapons first magazine in filters - var compatibleCartridgesInMagazine = GetCompatibleCartridgesFromMagazineTemplate( - weaponTemplate - ); + var compatibleCartridgesInMagazine = GetCompatibleCartridgesFromMagazineTemplate(weaponTemplate); if (compatibleCartridgesInMagazine.Count == 0) { // No compatible cartridges found in magazine, use default @@ -732,9 +625,7 @@ public class BotWeaponGenerator( } // Get the caliber data from the first compatible round in the magazine - var magazineCaliberData = itemHelper - .GetItem(compatibleCartridgesInMagazine.FirstOrDefault()) - .Value.Properties.Caliber; + var magazineCaliberData = itemHelper.GetItem(compatibleCartridgesInMagazine.FirstOrDefault()).Value.Properties.Caliber; cartridgePoolForWeapon = cartridgePool[magazineCaliberData]; foreach (var cartridgeKvP in cartridgePoolForWeapon) @@ -760,16 +651,11 @@ public class BotWeaponGenerator( /// /// Weapon db template to get cartridges for /// List of cartridge tpls - protected HashSet GetCompatibleCartridgesFromWeaponTemplate( - TemplateItem weaponTemplate - ) + protected HashSet GetCompatibleCartridgesFromWeaponTemplate(TemplateItem weaponTemplate) { ArgumentNullException.ThrowIfNull(weaponTemplate); - var cartridges = weaponTemplate - .Properties?.Chambers?.FirstOrDefault() - ?.Props?.Filters?.First() - .Filter; + var cartridges = weaponTemplate.Properties?.Chambers?.FirstOrDefault()?.Props?.Filters?.First().Filter; if (cartridges is not null) { return cartridges; @@ -785,24 +671,19 @@ public class BotWeaponGenerator( /// Weapon db template to get magazine cartridges for /// Hashset of cartridge tpls /// Thrown when weaponTemplate is null. - protected HashSet GetCompatibleCartridgesFromMagazineTemplate( - TemplateItem weaponTemplate - ) + protected HashSet GetCompatibleCartridgesFromMagazineTemplate(TemplateItem weaponTemplate) { ArgumentNullException.ThrowIfNull(weaponTemplate); // Get the first magazine's template from the weapon - var magazineSlot = weaponTemplate.Properties.Slots?.FirstOrDefault(slot => - slot.Name == "mod_magazine" - ); + var magazineSlot = weaponTemplate.Properties.Slots?.FirstOrDefault(slot => slot.Name == "mod_magazine"); if (magazineSlot is null) { return []; } var magazineTemplate = itemHelper.GetItem( - magazineSlot.Props?.Filters.FirstOrDefault()?.Filter?.FirstOrDefault() - ?? new MongoId(null) + magazineSlot.Props?.Filters.FirstOrDefault()?.Filter?.FirstOrDefault() ?? new MongoId(null) ); if (!magazineTemplate.Key) { @@ -811,14 +692,8 @@ public class BotWeaponGenerator( // Try to get cartridges from slots array first, if none found, try Cartridges array var cartridges = - magazineTemplate - .Value.Properties.Slots.FirstOrDefault() - ?.Props?.Filters.FirstOrDefault() - ?.Filter - ?? magazineTemplate - .Value.Properties.Cartridges.FirstOrDefault() - ?.Props?.Filters.FirstOrDefault() - ?.Filter; + magazineTemplate.Value.Properties.Slots.FirstOrDefault()?.Props?.Filters.FirstOrDefault()?.Filter + ?? magazineTemplate.Value.Properties.Cartridges.FirstOrDefault()?.Props?.Filters.FirstOrDefault()?.Filter; return cartridges ?? []; } @@ -838,18 +713,13 @@ public class BotWeaponGenerator( if (!string.IsNullOrEmpty(weaponTemplate.Properties.AmmoCaliber)) // 9x18pmm has a typo, should be Caliber9x18PM { - return weaponTemplate.Properties.AmmoCaliber == "Caliber9x18PMM" - ? "Caliber9x18PM" - : weaponTemplate.Properties.AmmoCaliber; + return weaponTemplate.Properties.AmmoCaliber == "Caliber9x18PMM" ? "Caliber9x18PM" : weaponTemplate.Properties.AmmoCaliber; } if (!string.IsNullOrEmpty(weaponTemplate.Properties.LinkedWeapon)) { var ammoInChamber = itemHelper.GetItem( - weaponTemplate - .Properties.Chambers.First() - .Props.Filters.First() - .Filter.FirstOrDefault() + weaponTemplate.Properties.Chambers.First().Props.Filters.First().Filter.FirstOrDefault() ); return !ammoInChamber.Key ? null : ammoInChamber.Value.Properties.Caliber; } @@ -863,21 +733,12 @@ public class BotWeaponGenerator( /// Weapon with children /// Magazine item /// Cartridge to insert into magazine - protected void FillExistingMagazines( - List weaponMods, - Item magazine, - MongoId cartridgeTemplate - ) + protected void FillExistingMagazines(List weaponMods, Item magazine, MongoId cartridgeTemplate) { var magazineTemplate = itemHelper.GetItem(magazine.Template).Value; if (magazineTemplate is null) { - logger.Error( - serverLocalisationService.GetText( - "bot-unable_to_find_magazine_item", - magazine.Template - ) - ); + logger.Error(serverLocalisationService.GetText("bot-unable_to_find_magazine_item", magazine.Template)); return; } @@ -894,12 +755,7 @@ public class BotWeaponGenerator( } else { - AddOrUpdateMagazinesChildWithAmmo( - weaponMods, - magazine, - cartridgeTemplate, - magazineTemplate - ); + AddOrUpdateMagazinesChildWithAmmo(weaponMods, magazine, cartridgeTemplate, magazineTemplate); } } @@ -937,9 +793,7 @@ public class BotWeaponGenerator( TemplateItem magazineTemplate ) { - var magazineCartridgeChildItem = weaponWithMods.FirstOrDefault(m => - m.ParentId == magazine.Id && m.SlotId == "cartridges" - ); + var magazineCartridgeChildItem = weaponWithMods.FirstOrDefault(m => m.ParentId == magazine.Id && m.SlotId == "cartridges"); if (magazineCartridgeChildItem is not null) { // Delete the existing cartridge object and create fresh below @@ -950,20 +804,13 @@ public class BotWeaponGenerator( List magazineWithCartridges = [magazine]; // Add cartridges as children to above mag array - itemHelper.FillMagazineWithCartridge( - magazineWithCartridges, - magazineTemplate, - chosenAmmoTpl, - 1 - ); + itemHelper.FillMagazineWithCartridge(magazineWithCartridges, magazineTemplate, chosenAmmoTpl, 1); // Replace existing magazine with above array of mag + cartridge stacks var magazineIndex = weaponWithMods.FindIndex(i => i.Id == magazine.Id); // magazineWithCartridges if (magazineIndex == -1) { - logger.Error( - $"Unable to add cartridges: {chosenAmmoTpl} to magazine: {magazine.Id} as none found" - ); + logger.Error($"Unable to add cartridges: {chosenAmmoTpl} to magazine: {magazine.Id} as none found"); return; } @@ -980,20 +827,12 @@ public class BotWeaponGenerator( /// Weapon mods to find and update camora mod(s) from /// Magazine id to find and add to /// Ammo template id to hydrate with - protected void FillCamorasWithAmmo( - IEnumerable weaponMods, - MongoId magazineId, - MongoId ammoTpl - ) + protected void FillCamorasWithAmmo(IEnumerable weaponMods, MongoId magazineId, MongoId ammoTpl) { // for CylinderMagazine we exchange the ammo in the "camoras". // This might not be necessary since we already filled the camoras with a random whitelisted and compatible ammo type, // but I'm not sure whether this is also used elsewhere - var camoras = weaponMods - .Where(x => - x.ParentId == magazineId && x.SlotId.StartsWith("camora", StringComparison.Ordinal) - ) - .ToList(); + var camoras = weaponMods.Where(x => x.ParentId == magazineId && x.SlotId.StartsWith("camora", StringComparison.Ordinal)).ToList(); if (camoras.Count == 0) { diff --git a/Libraries/SPTarkov.Server.Core/Generators/FenceBaseAssortGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/FenceBaseAssortGenerator.cs index 6765a127..896ee6d8 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/FenceBaseAssortGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/FenceBaseAssortGenerator.cs @@ -65,10 +65,7 @@ public class FenceBaseAssortGenerator( // Item base type blacklisted if (traderConfig.Fence.Blacklist.Count > 0) { - if ( - traderConfig.Fence.Blacklist.Contains(itemId) - || itemHelper.IsOfBaseclasses(itemId, traderConfig.Fence.Blacklist) - ) + if (traderConfig.Fence.Blacklist.Contains(itemId) || itemHelper.IsOfBaseclasses(itemId, traderConfig.Fence.Blacklist)) { continue; } @@ -131,9 +128,7 @@ public class FenceBaseAssortGenerator( // Create barter scheme (price) var barterSchemeToAdd = new BarterScheme { - Count = Math.Round( - (double)fenceService.GetItemPrice(itemId, itemWithChildrenToAdd) - ), + Count = Math.Round((double)fenceService.GetItemPrice(itemId, itemWithChildrenToAdd)), Template = Money.ROUBLES, }; @@ -155,11 +150,7 @@ public class FenceBaseAssortGenerator( foreach (var defaultPreset in defaultPresets) { // Skip presets we've already added - if ( - baseFenceAssort.Items.Any(item => - item.Upd != null && item.Upd.SptPresetId == defaultPreset.Id - ) - ) + if (baseFenceAssort.Items.Any(item => item.Upd != null && item.Upd.SptPresetId == defaultPreset.Id)) { continue; } @@ -168,9 +159,7 @@ public class FenceBaseAssortGenerator( var itemAndChildren = _cloner.Clone(defaultPreset.Items).ReplaceIDs(); // Find root item and add some properties to it - var rootItem = itemAndChildren.FirstOrDefault(item => - string.IsNullOrEmpty(item.ParentId) - ); + var rootItem = itemAndChildren.FirstOrDefault(item => string.IsNullOrEmpty(item.ParentId)); rootItem.ParentId = "hideout"; rootItem.SlotId = "hideout"; rootItem.Upd = new Upd @@ -191,11 +180,7 @@ public class FenceBaseAssortGenerator( [ new() { - new BarterScheme - { - Template = Money.ROUBLES, - Count = Math.Round(price * itemQualityModifier), - }, + new BarterScheme { Template = Money.ROUBLES, Count = Math.Round(price * itemQualityModifier) }, }, ]; @@ -213,12 +198,7 @@ public class FenceBaseAssortGenerator( var ammoPenetrationPower = GetAmmoPenetrationPower(rootItemDb); if (ammoPenetrationPower == null) { - logger.Warning( - localisationService.GetText( - "fence-unable_to_get_ammo_penetration_value", - rootItemDb.Id - ) - ); + logger.Warning(localisationService.GetText("fence-unable_to_get_ammo_penetration_value", rootItemDb.Id)); return false; } @@ -235,18 +215,13 @@ public class FenceBaseAssortGenerator( if (itemHelper.IsOfBaseclass(rootItemDb.Id, BaseClasses.AMMO_BOX)) { // Get the cartridge tpl found inside ammo box - var cartridgeTplInBox = rootItemDb - .Properties.StackSlots.First() - .Props.Filters.First() - .Filter.FirstOrDefault(); + var cartridgeTplInBox = rootItemDb.Properties.StackSlots.First().Props.Filters.First().Filter.FirstOrDefault(); // Look up cartridge tpl in db var ammoItemDb = itemHelper.GetItem(cartridgeTplInBox); if (!ammoItemDb.Key) { - logger.Warning( - localisationService.GetText("fence-ammo_not_found_in_db", cartridgeTplInBox) - ); + logger.Warning(localisationService.GetText("fence-ammo_not_found_in_db", cartridgeTplInBox)); return null; } @@ -271,25 +246,20 @@ public class FenceBaseAssortGenerator( protected void AddChildrenToArmorModSlots(List armor, TemplateItem itemDbDetails) { // Armor has no mods, make no additions - var hasMods = - itemDbDetails.Properties?.Slots is not null && itemDbDetails.Properties.Slots.Any(); + var hasMods = itemDbDetails.Properties?.Slots is not null && itemDbDetails.Properties.Slots.Any(); if (!hasMods) { return; } // Check for and add required soft inserts to armors - var requiredSlots = itemDbDetails - .Properties.Slots.Where(slot => slot.Required ?? false) - .ToList(); + var requiredSlots = itemDbDetails.Properties.Slots.Where(slot => slot.Required ?? false).ToList(); var hasRequiredSlots = requiredSlots.Count > 0; if (hasRequiredSlots) { foreach (var requiredSlot in requiredSlots) { - var modItemDbDetails = itemHelper - .GetItem(requiredSlot.Props.Filters.First().Plate.Value) - .Value; + var modItemDbDetails = itemHelper.GetItem(requiredSlot.Props.Filters.First().Plate.Value).Value; var plateTpl = requiredSlot.Props.Filters.First().Plate; // `Plate` property appears to be the 'default' item for slot if (plateTpl is null || plateTpl.Value.IsEmpty()) // Some bsg plate properties are empty, skip mod @@ -318,9 +288,7 @@ public class FenceBaseAssortGenerator( } // Check for and add plate items - var plateSlots = itemDbDetails - .Properties.Slots.Where(slot => itemHelper.IsRemovablePlateSlot(slot.Name)) - .ToList(); + var plateSlots = itemDbDetails.Properties.Slots.Where(slot => itemHelper.IsRemovablePlateSlot(slot.Name)).ToList(); if (plateSlots.Count > 0) { foreach (var plateSlot in plateSlots) diff --git a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs index f11e8fde..dd5616cd 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs @@ -33,8 +33,7 @@ public class LocationLootGenerator( ) { protected readonly LocationConfig _locationConfig = _configServer.GetConfig(); - protected readonly SeasonalEventConfig _seasonalEventConfig = - _configServer.GetConfig(); + protected readonly SeasonalEventConfig _seasonalEventConfig = _configServer.GetConfig(); /// /// Generate Loot for provided location () @@ -68,9 +67,7 @@ public class LocationLootGenerator( } // Create containers with loot - result.AddRange( - GenerateStaticContainers(locationId.ToLowerInvariant(), staticAmmoDistClone) - ); + result.AddRange(GenerateStaticContainers(locationId.ToLowerInvariant(), staticAmmoDistClone)); // Add dynamic loot to output loot var dynamicSpawnPoints = GenerateDynamicLoot( @@ -82,15 +79,8 @@ public class LocationLootGenerator( // Merge dynamic spawns into result result.AddRange(dynamicSpawnPoints); - _logger.Success( - _serverLocalisationService.GetText( - "location-dynamic_items_spawned_success", - dynamicSpawnPoints.Count - ) - ); - _logger.Success( - _serverLocalisationService.GetText("location-generated_success", locationId) - ); + _logger.Success(_serverLocalisationService.GetText("location-dynamic_items_spawned_success", dynamicSpawnPoints.Count)); + _logger.Success(_serverLocalisationService.GetText("location-generated_success", locationId)); // Clean up tracker counterTrackerHelper.Clear(); @@ -115,40 +105,23 @@ public class LocationLootGenerator( var staticWeaponsOnMapClone = _cloner.Clone(mapData.StaticContainers.Value.StaticWeapons); if (staticWeaponsOnMapClone is null) { - _logger.Error( - _serverLocalisationService.GetText( - "location-unable_to_find_static_weapon_for_map", - locationId - ) - ); + _logger.Error(_serverLocalisationService.GetText("location-unable_to_find_static_weapon_for_map", locationId)); } // Add mounted weapons to output loot result.AddRange(staticWeaponsOnMapClone); - var allStaticContainersOnMapClone = _cloner.Clone( - mapData.StaticContainers.Value.StaticContainers - ); + var allStaticContainersOnMapClone = _cloner.Clone(mapData.StaticContainers.Value.StaticContainers); if (allStaticContainersOnMapClone is null) { - _logger.Error( - _serverLocalisationService.GetText( - "location-unable_to_find_static_container_for_map", - locationId - ) - ); + _logger.Error(_serverLocalisationService.GetText("location-unable_to_find_static_container_for_map", locationId)); } // Containers that MUST be added to map (e.g. quest containers) var staticForcedOnMapClone = _cloner.Clone(mapData.StaticContainers.Value.StaticForced); if (staticForcedOnMapClone is null) { - _logger.Error( - _serverLocalisationService.GetText( - "location-unable_to_find_forced_static_data_for_map", - locationId - ) - ); + _logger.Error(_serverLocalisationService.GetText("location-unable_to_find_forced_static_data_for_map", locationId)); } // Remove christmas items from loot data @@ -159,9 +132,7 @@ public class LocationLootGenerator( ); } - var staticRandomisableContainersOnMap = GetRandomisableContainersOnMap( - allStaticContainersOnMapClone - ); + var staticRandomisableContainersOnMap = GetRandomisableContainersOnMap(allStaticContainersOnMapClone); // Keep track of static loot count var staticContainerCount = 0; @@ -174,13 +145,7 @@ public class LocationLootGenerator( // Add loot to guaranteed containers and add to result foreach ( var containerWithLoot in guaranteedContainers.Select(container => - AddLootToContainer( - container, - staticForcedOnMapClone, - staticLootDist.Value, - staticAmmoDist, - locationId - ) + AddLootToContainer(container, staticForcedOnMapClone, staticLootDist.Value, staticAmmoDist, locationId) ) ) { @@ -226,21 +191,13 @@ public class LocationLootGenerator( // Group containers by their groupId if (mapData.Statics is null) { - _logger.Warning( - _serverLocalisationService.GetText( - "location-unable_to_generate_static_loot", - locationId - ) - ); + _logger.Warning(_serverLocalisationService.GetText("location-unable_to_generate_static_loot", locationId)); return result; } // For each of the container groups, choose from the pool of containers, hydrate container with loot and add to result array - var mapping = GetGroupIdToContainerMappings( - mapData.Statics, - staticRandomisableContainersOnMap - ); + var mapping = GetGroupIdToContainerMappings(mapData.Statics, staticRandomisableContainersOnMap); foreach (var (key, data) in mapping) { // Count chosen was 0, skip @@ -253,9 +210,7 @@ public class LocationLootGenerator( { if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Group: {key} has no containers with < 100 % spawn chance to choose from, skipping" - ); + _logger.Debug($"Group: {key} has no containers with < 100 % spawn chance to choose from, skipping"); } continue; @@ -271,9 +226,7 @@ public class LocationLootGenerator( { if (_randomUtil.GetChance100(containerIdsCopy[containerId.Key] * 100)) { - data.ContainerIdsWithProbability[containerId.Key] = containerIdsCopy[ - containerId.Key - ]; + data.ContainerIdsWithProbability[containerId.Key] = containerIdsCopy[containerId.Key]; } } @@ -292,16 +245,14 @@ public class LocationLootGenerator( foreach (var chosenContainerId in chosenContainerIds) { // Look up container object from full list of containers on map - var containerObject = staticRandomisableContainersOnMap.FirstOrDefault( - staticContainer => staticContainer.Template.Id == chosenContainerId + var containerObject = staticRandomisableContainersOnMap.FirstOrDefault(staticContainer => + staticContainer.Template.Id == chosenContainerId ); if (containerObject is null) { if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Container: {chosenContainerId} not found in staticRandomisableContainersOnMap, this is bad" - ); + _logger.Debug($"Container: {chosenContainerId} not found in staticRandomisableContainersOnMap, this is bad"); } continue; @@ -323,12 +274,7 @@ public class LocationLootGenerator( } _logger.Success($"A total of: {staticLootItemCount} static items spawned"); - _logger.Success( - _serverLocalisationService.GetText( - "location-containers_generated_success", - staticContainerCount - ) - ); + _logger.Success(_serverLocalisationService.GetText("location-containers_generated_success", staticContainerCount)); return result; } @@ -344,9 +290,7 @@ public class LocationLootGenerator( /// /// /// StaticContainerData array - protected IEnumerable GetRandomisableContainersOnMap( - IEnumerable staticContainers - ) + protected IEnumerable GetRandomisableContainersOnMap(IEnumerable staticContainers) { return staticContainers.Where(staticContainer => staticContainer.Probability != 1 @@ -362,9 +306,7 @@ public class LocationLootGenerator( /// /// /// IStaticContainerData array - protected IEnumerable GetGuaranteedContainers( - IEnumerable staticContainersOnMap - ) + protected IEnumerable GetGuaranteedContainers(IEnumerable staticContainersOnMap) { return staticContainersOnMap.Where(staticContainer => staticContainer.Probability == 1 @@ -382,10 +324,7 @@ public class LocationLootGenerator( /// Name of the group the containers are being collected for /// Containers and probability values for a groupId /// List of chosen container Ids - protected List GetContainersByProbability( - string groupId, - ContainerGroupCount containerData - ) + protected List GetContainersByProbability(string groupId, ContainerGroupCount containerData) { var chosenContainerIds = new List(); @@ -437,16 +376,12 @@ public class LocationLootGenerator( (int) Math.Round( groupKvP.Value.MinContainers.Value - * _locationConfig - .ContainerRandomisationSettings - .ContainerGroupMinSizeMultiplier + * _locationConfig.ContainerRandomisationSettings.ContainerGroupMinSizeMultiplier ), (int) Math.Round( groupKvP.Value.MaxContainers.Value - * _locationConfig - .ContainerRandomisationSettings - .ContainerGroupMaxSizeMultiplier + * _locationConfig.ContainerRandomisationSettings.ContainerGroupMaxSizeMultiplier ) ), }; @@ -456,29 +391,17 @@ public class LocationLootGenerator( // Likely bad BSG data, will be fixed...eventually, example of the groupIds: `NEED_TO_BE_FIXED1`,`NEED_TO_BE_FIXED_SE02`, `NEED_TO_BE_FIXED_NW_01` mapping.Add( string.Empty, - new ContainerGroupCount - { - ContainerIdsWithProbability = new Dictionary(), - ChosenCount = -1, - } + new ContainerGroupCount { ContainerIdsWithProbability = new Dictionary(), ChosenCount = -1 } ); // Iterate over all containers and add to group keyed by groupId // Containers without a group go into a group with empty key "" foreach (var container in staticContainersOnMap) { - if ( - !staticContainerGroupData.Containers.TryGetValue( - container.Template.Id, - out var groupData - ) - ) + if (!staticContainerGroupData.Containers.TryGetValue(container.Template.Id, out var groupData)) { _logger.Error( - _serverLocalisationService.GetText( - "location-unable_to_find_container_in_statics_json", - container.Template.Id - ) + _serverLocalisationService.GetText("location-unable_to_find_container_in_statics_json", container.Template.Id) ); continue; @@ -498,17 +421,9 @@ public class LocationLootGenerator( mapping.TryAdd( groupData.GroupId, - new ContainerGroupCount - { - ChosenCount = 0d, - ContainerIdsWithProbability = new Dictionary(), - } + new ContainerGroupCount { ChosenCount = 0d, ContainerIdsWithProbability = new Dictionary() } ); - mapping[groupData.GroupId] - .ContainerIdsWithProbability.TryAdd( - container.Template.Id, - container.Probability.Value - ); + mapping[groupData.GroupId].ContainerIdsWithProbability.TryAdd(container.Template.Id, container.Probability.Value); } return mapping; @@ -543,11 +458,7 @@ public class LocationLootGenerator( var containerMap = _itemHelper.GetContainerMapping(containerTpl); // Choose count of items to add to container - var itemCountToAdd = GetWeightedCountOfContainerItems( - containerTpl, - staticLootDist, - locationName - ); + var itemCountToAdd = GetWeightedCountOfContainerItems(containerTpl, staticLootDist, locationName); if (itemCountToAdd == 0) { return containerClone; @@ -595,10 +506,7 @@ public class LocationLootGenerator( : chosenItemWithChildren.Items; // look for open slot to put chosen item into - var result = containerMap.FindSlotForItem( - chosenItemWithChildren.Width, - chosenItemWithChildren.Height - ); + var result = containerMap.FindSlotForItem(chosenItemWithChildren.Width, chosenItemWithChildren.Height); if (!result.Success.GetValueOrDefault(false)) { if (failedToFitAttemptCount > _locationConfig.FitLootIntoContainerAttempts) @@ -628,9 +536,7 @@ public class LocationLootGenerator( { X = result.X, Y = result.Y, - R = result.Rotation.GetValueOrDefault(false) - ? ItemRotation.Vertical - : ItemRotation.Horizontal, + R = result.Rotation.GetValueOrDefault(false) ? ItemRotation.Vertical : ItemRotation.Horizontal, }; // Add loot to container before returning @@ -673,16 +579,11 @@ public class LocationLootGenerator( { // Add each count of items into array itemCountArray.Add( - new ProbabilityObject( - itemCountDistribution.Count.Value, - itemCountDistribution.RelativeProbability.Value, - null - ) + new ProbabilityObject(itemCountDistribution.Count.Value, itemCountDistribution.RelativeProbability.Value, null) ); } - return (int) - Math.Round(GetStaticLootMultiplierForLocation(locationName) * itemCountArray.Draw()[0]); + return (int)Math.Round(GetStaticLootMultiplierForLocation(locationName) * itemCountArray.Draw()[0]); } /// @@ -705,12 +606,7 @@ public class LocationLootGenerator( var itemContainerDistribution = staticLootDist[containerTypeId]?.ItemDistribution; if (itemContainerDistribution is null) { - _logger.Warning( - _serverLocalisationService.GetText( - "location-missing_item_distribution_data", - containerTypeId - ) - ); + _logger.Warning(_serverLocalisationService.GetText("location-missing_item_distribution_data", containerTypeId)); return itemDistribution; } @@ -729,9 +625,7 @@ public class LocationLootGenerator( continue; } - itemDistribution.Add( - new ProbabilityObject(icd.Tpl, icd.RelativeProbability.Value, null) - ); + itemDistribution.Add(new ProbabilityObject(icd.Tpl, icd.RelativeProbability.Value, null)); } return itemDistribution; @@ -780,26 +674,17 @@ public class LocationLootGenerator( // Build the list of forced loot from both `SpawnpointsForced` and any point marked `IsAlwaysSpawn` dynamicForcedSpawnPoints.AddRange(dynamicLootDist.SpawnpointsForced); - dynamicForcedSpawnPoints.AddRange( - dynamicLootDist.Spawnpoints.Where(point => - point.Template.IsAlwaysSpawn.GetValueOrDefault() - ) - ); + dynamicForcedSpawnPoints.AddRange(dynamicLootDist.Spawnpoints.Where(point => point.Template.IsAlwaysSpawn.GetValueOrDefault())); loot.AddRange(GetForcedDynamicLoot(dynamicForcedSpawnPoints, locationName, staticAmmoDist)); // Draw from random distribution var desiredSpawnPointCount = Math.Round( GetLooseLootMultiplierForLocation(locationName) - * _randomUtil.GetNormallyDistributedRandomNumber( - dynamicLootDist.SpawnpointCount.Mean, - dynamicLootDist.SpawnpointCount.Std - ) + * _randomUtil.GetNormallyDistributedRandomNumber(dynamicLootDist.SpawnpointCount.Mean, dynamicLootDist.SpawnpointCount.Std) ); - var blacklistedSpawnPoints = _locationConfig.LooseLootBlacklist.GetValueOrDefault( - locationName - ); + var blacklistedSpawnPoints = _locationConfig.LooseLootBlacklist.GetValueOrDefault(locationName); // Init empty array to hold spawn points, letting us pick them pseudo-randomly var spawnPointArray = new ProbabilityObjectArray(_cloner); @@ -834,13 +719,7 @@ public class LocationLootGenerator( continue; } - spawnPointArray.Add( - new ProbabilityObject( - spawnPoint.Template.Id, - spawnPoint.Probability ?? 0, - spawnPoint - ) - ); + spawnPointArray.Add(new ProbabilityObject(spawnPoint.Template.Id, spawnPoint.Probability ?? 0, spawnPoint)); } // Select a number of spawn points to add loot to @@ -860,10 +739,7 @@ public class LocationLootGenerator( } // Filter out duplicate locationIds // prob can be done better - chosenSpawnPoints = chosenSpawnPoints - .GroupBy(spawnPoint => spawnPoint.LocationId) - .Select(group => group.First()) - .ToList(); + chosenSpawnPoints = chosenSpawnPoints.GroupBy(spawnPoint => spawnPoint.LocationId).Select(group => group.First()).ToList(); // Do we have enough items in pool to fulfill requirement var tooManySpawnPointsRequested = desiredSpawnPointCount - chosenSpawnPoints.Count > 0; @@ -893,29 +769,20 @@ public class LocationLootGenerator( // SpawnPoint is invalid, skip it if (spawnPoint.Template is null) { - _logger.Warning( - _serverLocalisationService.GetText( - "location-missing_dynamic_template", - spawnPoint.LocationId - ) - ); + _logger.Warning(_serverLocalisationService.GetText("location-missing_dynamic_template", spawnPoint.LocationId)); continue; } // Ensure no blacklisted lootable items are in pool spawnPoint.Template.Items = spawnPoint - .Template.Items.Where(item => - !_itemFilterService.IsLootableItemBlacklisted(item.Template) - ) + .Template.Items.Where(item => !_itemFilterService.IsLootableItemBlacklisted(item.Template)) .ToList(); // Ensure no seasonal items are in pool if not in-season if (!seasonalEventActive) { - spawnPoint.Template.Items = spawnPoint.Template.Items.Where(item => - !seasonalItemTplBlacklist.Contains(item.Template) - ); + spawnPoint.Template.Items = spawnPoint.Template.Items.Where(item => !seasonalItemTplBlacklist.Contains(item.Template)); } // Spawn point has no items after filtering, skip @@ -923,21 +790,14 @@ public class LocationLootGenerator( { if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - _serverLocalisationService.GetText( - "location-spawnpoint_missing_items", - spawnPoint.Template.Id - ) - ); + _logger.Debug(_serverLocalisationService.GetText("location-spawnpoint_missing_items", spawnPoint.Template.Id)); } continue; } // Get an array of allowed IDs after above filtering has occured - var validComposedKeys = spawnPoint - .Template.Items.Select(item => item.ComposedKey) - .ToHashSet(); + var validComposedKeys = spawnPoint.Template.Items.Select(item => item.ComposedKey).ToHashSet(); // Construct container to hold above filtered items, letting us pick an item for the spot var itemArray = new ProbabilityObjectArray(_cloner); @@ -948,32 +808,19 @@ public class LocationLootGenerator( continue; } - itemArray.Add( - new ProbabilityObject( - itemDist.ComposedKey.Key, - itemDist.RelativeProbability ?? 0, - null - ) - ); + itemArray.Add(new ProbabilityObject(itemDist.ComposedKey.Key, itemDist.RelativeProbability ?? 0, null)); } if (itemArray.Count == 0) { - _logger.Warning( - _serverLocalisationService.GetText( - "location-loot_pool_is_empty_skipping", - spawnPoint.Template.Id - ) - ); + _logger.Warning(_serverLocalisationService.GetText("location-loot_pool_is_empty_skipping", spawnPoint.Template.Id)); continue; } // Draw a random item from the spawn points possible items var chosenComposedKey = itemArray.Draw().FirstOrDefault(); - var chosenItem = spawnPoint.Template.Items.FirstOrDefault(item => - item.ComposedKey == chosenComposedKey - ); + var chosenItem = spawnPoint.Template.Items.FirstOrDefault(item => item.ComposedKey == chosenComposedKey); if (chosenItem is null) { _logger.Warning( @@ -982,18 +829,10 @@ public class LocationLootGenerator( continue; } - var createItemResult = CreateDynamicLootItem( - chosenItem, - spawnPoint.Template.Items, - staticAmmoDist - ); + var createItemResult = CreateDynamicLootItem(chosenItem, spawnPoint.Template.Items, staticAmmoDist); // If count reaches max, skip adding item to loot - if ( - counterTrackerHelper.IncrementCount( - createItemResult.Items.FirstOrDefault().Template - ) - ) + if (counterTrackerHelper.IncrementCount(createItemResult.Items.FirstOrDefault().Template)) { continue; } @@ -1047,14 +886,8 @@ public class LocationLootGenerator( continue; } - var chosenItem = forcedLootLocation.Template.Items.FirstOrDefault(item => - item.Id == rootItem.Id - ); - var createItemResult = CreateDynamicLootItem( - chosenItem, - forcedLootLocation.Template.Items, - staticAmmoDist - ); + var chosenItem = forcedLootLocation.Template.Items.FirstOrDefault(item => item.Id == rootItem.Id); + var createItemResult = CreateDynamicLootItem(chosenItem, forcedLootLocation.Template.Items, staticAmmoDist); // Update root ID with the above dynamically generated ID forcedLootLocation.Template.Root = createItemResult.Items.FirstOrDefault().Id; @@ -1065,9 +898,7 @@ public class LocationLootGenerator( forcedLootLocation.Template.Items = convertedItems; // Push forced location into array as long as it doesn't exist already - var existingLocation = result.Any(spawnPoint => - spawnPoint.Id == locationTemplateToAdd.Id - ); + var existingLocation = result.Any(spawnPoint => spawnPoint.Id == locationTemplateToAdd.Id); if (!existingLocation) { result.Add(locationTemplateToAdd); @@ -1116,10 +947,7 @@ public class LocationLootGenerator( var stackCount = itemDbTemplate.Properties.StackMaxSize == 1 ? 1 - : _randomUtil.GetInt( - itemDbTemplate.Properties.StackMinRandom.Value, - itemDbTemplate.Properties.StackMaxRandom.Value - ); + : _randomUtil.GetInt(itemDbTemplate.Properties.StackMinRandom.Value, itemDbTemplate.Properties.StackMaxRandom.Value); itemWithMods.Add( new Item @@ -1211,19 +1039,13 @@ public class LocationLootGenerator( rootItem.ParentId = parentId; } - if ( - _itemHelper.IsOfBaseclass(chosenTpl, BaseClasses.MONEY) - || _itemHelper.IsOfBaseclass(chosenTpl, BaseClasses.AMMO) - ) + if (_itemHelper.IsOfBaseclass(chosenTpl, BaseClasses.MONEY) || _itemHelper.IsOfBaseclass(chosenTpl, BaseClasses.AMMO)) { // Edge case - some ammos e.g. flares or M406 grenades shouldn't be stacked var stackCount = itemTemplate.Properties.StackMaxSize == 1 ? 1 - : _randomUtil.GetInt( - itemTemplate.Properties.StackMinRandom.Value, - itemTemplate.Properties.StackMaxRandom.Value - ); + : _randomUtil.GetInt(itemTemplate.Properties.StackMinRandom.Value, itemTemplate.Properties.StackMaxRandom.Value); rootItem.Upd = new Upd { StackObjectsCount = stackCount }; } @@ -1262,12 +1084,7 @@ public class LocationLootGenerator( }; } - protected List GetArmorItems( - string chosenTpl, - Item? rootItem, - List items, - TemplateItem armorDbTemplate - ) + protected List GetArmorItems(string chosenTpl, Item? rootItem, List items, TemplateItem armorDbTemplate) { var defaultPreset = _presetHelper.GetDefaultPreset(chosenTpl); if (defaultPreset is not null) @@ -1282,16 +1099,9 @@ public class LocationLootGenerator( else { // We make base item in calling method, no need to do it here - if ( - armorDbTemplate.Properties?.Slots is not null - && armorDbTemplate.Properties.Slots.Any() - ) + if (armorDbTemplate.Properties?.Slots is not null && armorDbTemplate.Properties.Slots.Any()) { - items = _itemHelper.AddChildSlotItems( - items, - armorDbTemplate, - _locationConfig.EquipmentLootSettings.ModSpawnChancePercent - ); + items = _itemHelper.AddChildSlotItems(items, armorDbTemplate, _locationConfig.EquipmentLootSettings.ModSpawnChancePercent); } } @@ -1322,10 +1132,7 @@ public class LocationLootGenerator( { try { - children = _itemHelper.ReparentItemAndChildren( - defaultPreset.Items.FirstOrDefault(), - defaultPreset.Items - ); + children = _itemHelper.ReparentItemAndChildren(defaultPreset.Items.FirstOrDefault(), defaultPreset.Items); } catch (Exception e) { @@ -1361,16 +1168,9 @@ public class LocationLootGenerator( var rootItem = items.FirstOrDefault(); if (rootItem is null) { - _logger.Error( - _serverLocalisationService.GetText( - "location-missing_root_item", - new { tpl = chosenTpl, parentId } - ) - ); + _logger.Error(_serverLocalisationService.GetText("location-missing_root_item", new { tpl = chosenTpl, parentId })); - throw new Exception( - _serverLocalisationService.GetText("location-critical_error_see_log") - ); + throw new Exception(_serverLocalisationService.GetText("location-critical_error_see_log")); } try @@ -1382,12 +1182,7 @@ public class LocationLootGenerator( } catch (Exception e) { - _logger.Error( - _serverLocalisationService.GetText( - "location-unable_to_reparent_item", - new { tpl = chosenTpl, parentId } - ) - ); + _logger.Error(_serverLocalisationService.GetText("location-unable_to_reparent_item", new { tpl = chosenTpl, parentId })); _logger.Error(e.StackTrace); throw; diff --git a/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs index 58afe175..913ff9b6 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/LootGenerator.cs @@ -43,17 +43,12 @@ public class LootGenerator( var itemTypeCounts = InitItemLimitCounter(options.ItemLimits); // Handle sealed weapon containers - var sealedWeaponCrateCount = randomUtil.GetInt( - options.WeaponCrateCount.Min, - options.WeaponCrateCount.Max - ); + var sealedWeaponCrateCount = randomUtil.GetInt(options.WeaponCrateCount.Min, options.WeaponCrateCount.Max); if (sealedWeaponCrateCount > 0) { // Get list of all sealed containers from db - they're all the same, just for flavor var itemsDb = databaseService.GetItems().Values; - var sealedWeaponContainerPool = itemsDb.Where(item => - item.Name.Contains("event_container_airdrop") - ); + var sealedWeaponContainerPool = itemsDb.Where(item => item.Name.Contains("event_container_airdrop")); for (var index = 0; index < sealedWeaponCrateCount; index++) { @@ -84,20 +79,10 @@ public class LootGenerator( // Pool has items we could add as loot, proceed if (rewardPoolResults.ItemPool.Any()) { - var randomisedItemCount = randomUtil.GetInt( - options.ItemCount.Min, - options.ItemCount.Max - ); + var randomisedItemCount = randomUtil.GetInt(options.ItemCount.Min, options.ItemCount.Max); for (var index = 0; index < randomisedItemCount; index++) { - if ( - !FindAndAddRandomItemToLoot( - rewardPoolResults.ItemPool, - itemTypeCounts, - options, - result - ) - ) + if (!FindAndAddRandomItemToLoot(rewardPoolResults.ItemPool, itemTypeCounts, options, result)) // Failed to add, reduce index so we get another attempt { index--; @@ -108,10 +93,7 @@ public class LootGenerator( var globalDefaultPresets = presetHelper.GetDefaultPresets().Values; // Filter default presets to just weapons - var randomisedWeaponPresetCount = randomUtil.GetInt( - options.WeaponPresetCount.Min, - options.WeaponPresetCount.Max - ); + var randomisedWeaponPresetCount = randomUtil.GetInt(options.WeaponPresetCount.Min, options.WeaponPresetCount.Max); if (randomisedWeaponPresetCount > 0) { var weaponDefaultPresets = globalDefaultPresets.Where(preset => @@ -122,14 +104,7 @@ public class LootGenerator( { for (var index = 0; index < randomisedWeaponPresetCount; index++) { - if ( - !FindAndAddRandomPresetToLoot( - weaponDefaultPresets, - itemTypeCounts, - rewardPoolResults.Blacklist, - result - ) - ) + if (!FindAndAddRandomPresetToLoot(weaponDefaultPresets, itemTypeCounts, rewardPoolResults.Blacklist, result)) // Failed to add, reduce index so we get another attempt { index--; @@ -139,32 +114,18 @@ public class LootGenerator( } // Filter default presets to just armors and then filter again by protection level - var randomisedArmorPresetCount = randomUtil.GetInt( - options.ArmorPresetCount.Min, - options.ArmorPresetCount.Max - ); + var randomisedArmorPresetCount = randomUtil.GetInt(options.ArmorPresetCount.Min, options.ArmorPresetCount.Max); if (randomisedArmorPresetCount > 0) { - var armorDefaultPresets = globalDefaultPresets.Where(preset => - itemHelper.ArmorItemCanHoldMods(preset.Encyclopedia.Value) - ); - var levelFilteredArmorPresets = armorDefaultPresets.Where(armor => - IsArmorOfDesiredProtectionLevel(armor, options) - ); + var armorDefaultPresets = globalDefaultPresets.Where(preset => itemHelper.ArmorItemCanHoldMods(preset.Encyclopedia.Value)); + var levelFilteredArmorPresets = armorDefaultPresets.Where(armor => IsArmorOfDesiredProtectionLevel(armor, options)); // Add some armors to rewards if (levelFilteredArmorPresets.Any()) { for (var index = 0; index < randomisedArmorPresetCount; index++) { - if ( - !FindAndAddRandomPresetToLoot( - levelFilteredArmorPresets, - itemTypeCounts, - rewardPoolResults.Blacklist, - result - ) - ) + if (!FindAndAddRandomPresetToLoot(levelFilteredArmorPresets, itemTypeCounts, rewardPoolResults.Blacklist, result)) // Failed to add, reduce index so we get another attempt { index--; @@ -202,10 +163,7 @@ public class LootGenerator( for (var i = 0; i < randomisedItemCount; i++) { // Clone preset and alter Ids to be unique - var presetWithUniqueIdsClone = cloner - .Clone(preset.Items) - .ReplaceIDs() - .ToList(); + var presetWithUniqueIdsClone = cloner.Clone(preset.Items).ReplaceIDs().ToList(); // Add to results result.Add(presetWithUniqueIdsClone); @@ -262,9 +220,7 @@ public class LootGenerator( var itemTypeBlacklist = itemFilterService.GetItemRewardBaseTypeBlacklist(); var itemsMatchingTypeBlacklist = itemsDb .Where(templateItem => !string.IsNullOrEmpty(templateItem.Parent)) // Ignore items without parents - .Where(templateItem => - itemHelper.IsOfBaseclasses(templateItem.Parent, itemTypeBlacklist) - ) + .Where(templateItem => itemHelper.IsOfBaseclasses(templateItem.Parent, itemTypeBlacklist)) .Select(templateItem => templateItem.Id); itemBlacklist.UnionWith([.. rewardItemBlacklist, .. itemsMatchingTypeBlacklist]); @@ -326,11 +282,7 @@ public class LootGenerator( var itemTypeCounts = new Dictionary(); foreach (var itemTypeId in limits) { - itemTypeCounts[itemTypeId.Key] = new ItemLimit - { - Current = 0, - Max = limits[itemTypeId.Key], - }; + itemTypeCounts[itemTypeId.Key] = new ItemLimit { Current = 0, Max = limits[itemTypeId.Key] }; } return itemTypeCounts; @@ -353,10 +305,7 @@ public class LootGenerator( { var randomItem = randomUtil.GetArrayValue(items); - var itemLimitCount = itemTypeCounts.TryGetValue( - randomItem.Parent, - out var randomItemLimitCount - ); + var itemLimitCount = itemTypeCounts.TryGetValue(randomItem.Parent, out var randomItemLimitCount); if (!itemLimitCount && randomItemLimitCount?.Current > randomItemLimitCount?.Max) { return false; @@ -444,12 +393,7 @@ public class LootGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Warning( - serverLocalisationService.GetText( - "loot-chosen_preset_missing_encyclopedia_value", - chosenPreset?.Id - ) - ); + logger.Warning(serverLocalisationService.GetText("loot-chosen_preset_missing_encyclopedia_value", chosenPreset?.Id)); } return false; @@ -461,9 +405,7 @@ public class LootGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"$Unable to find preset with tpl: {chosenPreset.Encyclopedia}, skipping" - ); + logger.Debug($"$Unable to find preset with tpl: {chosenPreset.Encyclopedia}, skipping"); } return false; @@ -478,21 +420,13 @@ public class LootGenerator( // Some custom mod items lack a parent property if (itemDbDetails.Value?.Parent is null) { - logger.Error( - serverLocalisationService.GetText( - "loot-item_missing_parentid", - itemDbDetails.Value?.Name - ) - ); + logger.Error(serverLocalisationService.GetText("loot-item_missing_parentid", itemDbDetails.Value?.Name)); return false; } // Check chosen preset hasn't exceeded spawn limit - var hasItemLimitCount = itemTypeCounts.TryGetValue( - itemDbDetails.Value.Parent, - out var itemLimitCount - ); + var hasItemLimitCount = itemTypeCounts.TryGetValue(itemDbDetails.Value.Parent, out var itemLimitCount); if (!hasItemLimitCount && itemLimitCount?.Current > itemLimitCount?.Max) { return false; @@ -521,27 +455,18 @@ public class LootGenerator( /// /// sealed weapon container settings /// List of items with children lists - public List> GetSealedWeaponCaseLoot( - SealedAirdropContainerSettings containerSettings - ) + public List> GetSealedWeaponCaseLoot(SealedAirdropContainerSettings containerSettings) { List> itemsToReturn = []; // Choose a weapon to give to the player (weighted) - var chosenWeaponTpl = weightedRandomHelper.GetWeightedValue( - containerSettings.WeaponRewardWeight - ); + var chosenWeaponTpl = weightedRandomHelper.GetWeightedValue(containerSettings.WeaponRewardWeight); // Get itemDb details of weapon var weaponDetailsDb = itemHelper.GetItem(chosenWeaponTpl); if (!weaponDetailsDb.Key) { - logger.Error( - serverLocalisationService.GetText( - "loot-non_item_picked_as_sealed_weapon_crate_reward", - chosenWeaponTpl - ) - ); + logger.Error(serverLocalisationService.GetText("loot-non_item_picked_as_sealed_weapon_crate_reward", chosenWeaponTpl)); return itemsToReturn; } @@ -554,12 +479,7 @@ public class LootGenerator( // No default preset found for weapon, choose a random one if (chosenWeaponPreset is null) { - logger.Warning( - serverLocalisationService.GetText( - "loot-default_preset_not_found_using_random", - chosenWeaponTpl - ) - ); + logger.Warning(serverLocalisationService.GetText("loot-default_preset_not_found_using_random", chosenWeaponTpl)); chosenWeaponPreset = randomUtil.GetArrayValue(presetHelper.GetPresets(chosenWeaponTpl)); } @@ -572,18 +492,10 @@ public class LootGenerator( // Get a random collection of weapon mods related to chosen weapon and add them to result array var linkedItemsToWeapon = ragfairLinkedItemService.GetLinkedDbItems(chosenWeaponTpl); - itemsToReturn.AddRange( - GetSealedContainerWeaponModRewards( - containerSettings, - linkedItemsToWeapon, - chosenWeaponPreset - ) - ); + itemsToReturn.AddRange(GetSealedContainerWeaponModRewards(containerSettings, linkedItemsToWeapon, chosenWeaponPreset)); // Handle non-weapon mod reward types - itemsToReturn.AddRange( - GetSealedContainerNonWeaponModRewards(containerSettings, weaponDetailsDb.Value) - ); + itemsToReturn.AddRange(GetSealedContainerNonWeaponModRewards(containerSettings, weaponDetailsDb.Value)); return itemsToReturn; } @@ -621,9 +533,7 @@ public class LootGenerator( // Need to find boxes that matches weapons caliber var weaponCaliber = weaponDetailsDb.Properties.AmmoCaliber; - var ammoBoxesMatchingCaliber = ammoBoxesDetails.Where(x => - x.Properties.AmmoCaliber == weaponCaliber - ); + var ammoBoxesMatchingCaliber = ammoBoxesDetails.Where(x => x.Properties.AmmoCaliber == weaponCaliber); if (!ammoBoxesMatchingCaliber.Any()) { if (logger.IsLogEnabled(LogLevel.Debug)) @@ -718,9 +628,7 @@ public class LootGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"No items found to fulfil reward type: {rewardKey} for weapon: {chosenWeaponPreset.Name}, skipping type" - ); + logger.Debug($"No items found to fulfil reward type: {rewardKey} for weapon: {chosenWeaponPreset.Name}, skipping type"); } continue; @@ -784,17 +692,13 @@ public class LootGenerator( /// Single tpl protected MongoId PickRewardItem(RewardDetails rewardContainerDetails) { - if ( - rewardContainerDetails.RewardTplPool is not null - && rewardContainerDetails.RewardTplPool.Count > 0 - ) + if (rewardContainerDetails.RewardTplPool is not null && rewardContainerDetails.RewardTplPool.Count > 0) { return weightedRandomHelper.GetWeightedValue(rewardContainerDetails.RewardTplPool); } return randomUtil.GetArrayValue( - GetItemRewardPool([], rewardContainerDetails.RewardTypePool, true, true, false) - .ItemPool.Select(item => item.Id) + GetItemRewardPool([], rewardContainerDetails.RewardTypePool, true, true, false).ItemPool.Select(item => item.Id) ); } diff --git a/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs index a064521c..49c10fbf 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/PMCLootGenerator.cs @@ -58,13 +58,7 @@ public class PMCLootGenerator( var pocketPriceOverrides = GetPMCPriceOverrides(pmcRole, "pocket"); // Generate loot and cache - Also pass check to ensure only 1x2 items are allowed (Unheard bots have big pockets, hence the need for 1x2) - var pool = GenerateLootPool( - pmcRole, - allowedItemTypeWhitelist, - blacklist, - pocketPriceOverrides, - ItemFitsInto1By2Slot - ); + var pool = GenerateLootPool(pmcRole, allowedItemTypeWhitelist, blacklist, pocketPriceOverrides, ItemFitsInto1By2Slot); _pocketLootPool.TryAdd(pmcRole, pool); return pool; @@ -97,13 +91,7 @@ public class PMCLootGenerator( var vestPriceOverrides = GetPMCPriceOverrides(pmcRole, "vest"); // Generate loot and cache - Also pass check to ensure items up to 2x2 are allowed, some vests have big slots - var pool = GenerateLootPool( - pmcRole, - allowedItemTypeWhitelist, - blacklist, - vestPriceOverrides, - ItemFitsInto2By2Slot - ); + var pool = GenerateLootPool(pmcRole, allowedItemTypeWhitelist, blacklist, vestPriceOverrides, ItemFitsInto2By2Slot); _vestLootPool.TryAdd(pmcRole, pool); return pool; @@ -133,13 +121,7 @@ public class PMCLootGenerator( var backpackPriceOverrides = GetPMCPriceOverrides(pmcRole, "vest"); // Generate loot and cache - var pool = GenerateLootPool( - pmcRole, - allowedItemTypeWhitelist, - blacklist, - backpackPriceOverrides, - null - ); + var pool = GenerateLootPool(pmcRole, allowedItemTypeWhitelist, blacklist, backpackPriceOverrides, null); _backpackLootPool.TryAdd(pmcRole, pool); return pool; @@ -225,9 +207,7 @@ public class PMCLootGenerator( /// Dictionary of overrides protected Dictionary GetPMCPriceOverrides(string pmcRole, string slot) { - var pmcType = string.Equals(pmcRole, "pmcbear", StringComparison.OrdinalIgnoreCase) - ? "bear" - : "usec"; + var pmcType = string.Equals(pmcRole, "pmcbear", StringComparison.OrdinalIgnoreCase) ? "bear" : "usec"; // the usec/bear.json item prices act as overrides we apply over what we dynamically generate if (databaseService.GetBots().Types.TryGetValue(pmcType, out var priceOverrides)) @@ -253,15 +233,9 @@ public class PMCLootGenerator( /// Item tpl to get price of /// /// Rouble price - protected double GetItemPrice( - MongoId tpl, - Dictionary? pmcPriceOverrides = null - ) + protected double GetItemPrice(MongoId tpl, Dictionary? pmcPriceOverrides = null) { - if ( - pmcPriceOverrides is not null - && pmcPriceOverrides.TryGetValue(tpl, out var overridePrice) - ) + if (pmcPriceOverrides is not null && pmcPriceOverrides.TryGetValue(tpl, out var overridePrice)) { // There's a price override for this item, use override instead of default price return overridePrice; diff --git a/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs index 2ee69f9f..5b782e62 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/PlayerScavGenerator.cs @@ -36,8 +36,7 @@ public class PlayerScavGenerator( TimeUtil timeUtil ) { - protected readonly PlayerScavConfig _playerScavConfig = - configServer.GetConfig(); + protected readonly PlayerScavConfig _playerScavConfig = configServer.GetConfig(); /// /// Update a player profile to include a new player scav profile @@ -62,9 +61,7 @@ public class PlayerScavGenerator( ) ) { - logger.Error( - serverLocalisationService.GetText("scav-missing_karma_settings", scavKarmaLevel) - ); + logger.Error(serverLocalisationService.GetText("scav-missing_karma_settings", scavKarmaLevel)); } if (logger.IsLogEnabled(LogLevel.Debug)) @@ -110,13 +107,9 @@ public class PlayerScavGenerator( scavData.Info.Level = GetScavLevel(existingScavDataClone); scavData.Info.Experience = GetScavExperience(existingScavDataClone); scavData.Quests = existingScavDataClone.Quests ?? []; - scavData.TaskConditionCounters = - existingScavDataClone.TaskConditionCounters - ?? new Dictionary(); + scavData.TaskConditionCounters = existingScavDataClone.TaskConditionCounters ?? new Dictionary(); scavData.Notes = existingScavDataClone.Notes ?? new Notes { DataNotes = [] }; - scavData.WishList = - existingScavDataClone.WishList - ?? new DictionaryOrList(new Dictionary(), []); + scavData.WishList = existingScavDataClone.WishList ?? new DictionaryOrList(new Dictionary(), []); scavData.Encyclopedia = pmcDataClone.Encyclopedia ?? new Dictionary(); // Add additional items to player scav as loot @@ -161,9 +154,7 @@ public class PlayerScavGenerator( var itemResult = itemHelper.GetItem(tpl.Key); if (!itemResult.Key) { - logger.Warning( - serverLocalisationService.GetText("scav-unable_to_add_item_to_player_scav", tpl) - ); + logger.Warning(serverLocalisationService.GetText("scav-unable_to_add_item_to_player_scav", tpl)); continue; } @@ -174,10 +165,7 @@ public class PlayerScavGenerator( { Id = new MongoId(), Template = itemTemplate.Id, - Upd = botGeneratorHelper.GenerateExtraPropertiesForItem( - itemTemplate, - "assault" - ), + Upd = botGeneratorHelper.GenerateExtraPropertiesForItem(itemTemplate, "assault"), }, }; @@ -229,22 +217,13 @@ public class PlayerScavGenerator( /// /// Values to modify the bot template with /// bot template to modify according to karma level settings - protected void AdjustBotTemplateWithKarmaSpecificSettings( - KarmaLevel karmaSettings, - BotType baseBotNode - ) + protected void AdjustBotTemplateWithKarmaSpecificSettings(KarmaLevel karmaSettings, BotType baseBotNode) { // Adjust equipment chance values - AdjustEquipmentWeights( - karmaSettings.Modifiers.Equipment, - baseBotNode.BotChances.EquipmentChances - ); + AdjustEquipmentWeights(karmaSettings.Modifiers.Equipment, baseBotNode.BotChances.EquipmentChances); // Adjust mod chance values - AdjustWeaponModWeights( - karmaSettings.Modifiers.Mod, - baseBotNode.BotChances.WeaponModsChances - ); + AdjustWeaponModWeights(karmaSettings.Modifiers.Mod, baseBotNode.BotChances.WeaponModsChances); // Adjust item spawn quantity values AdjustItemWeights(karmaSettings.ItemLimits, baseBotNode.BotGeneration.Items); @@ -281,10 +260,7 @@ public class PlayerScavGenerator( /// e.g. "healing" / "looseLoot" /// /// GenerationData - protected GenerationData? GetKarmaLimitValuesByKey( - string key, - GenerationWeightingItems botItemWeights - ) + protected GenerationData? GetKarmaLimitValuesByKey(string key, GenerationWeightingItems botItemWeights) { switch (key) { @@ -318,10 +294,7 @@ public class PlayerScavGenerator( } } - protected static void AdjustWeaponModWeights( - Dictionary modChangesToApply, - Dictionary weaponModChances - ) + protected static void AdjustWeaponModWeights(Dictionary modChangesToApply, Dictionary weaponModChances) { foreach (var (modSlot, weight) in modChangesToApply) { @@ -416,26 +389,16 @@ public class PlayerScavGenerator( protected PmcData SetScavCooldownTimer(PmcData scavData, PmcData pmcData) { // Get sum of all scav cooldown reduction timer bonuses - var modifier = - 1d - + pmcData - .Bonuses.Where(x => x.Type == BonusType.ScavCooldownTimer) - .Sum(bonus => (bonus?.Value ?? 1) / 100); + var modifier = 1d + pmcData.Bonuses.Where(x => x.Type == BonusType.ScavCooldownTimer).Sum(bonus => (bonus?.Value ?? 1) / 100); var fenceInfo = fenceService.GetFenceInfo(pmcData); modifier *= fenceInfo.SavageCooldownModifier; // Make sure to apply ScavCooldownTimer bonus from Hideout if the player has it. - var scavLockDuration = - databaseService.GetGlobals().Configuration.SavagePlayCooldown * modifier; + var scavLockDuration = databaseService.GetGlobals().Configuration.SavagePlayCooldown * modifier; var fullProfile = profileHelper.GetFullProfile(pmcData.SessionId.Value); - if ( - fullProfile?.ProfileInfo?.Edition?.StartsWith( - AccountTypes.SPT_DEVELOPER, - StringComparison.OrdinalIgnoreCase - ) ?? false - ) + if (fullProfile?.ProfileInfo?.Edition?.StartsWith(AccountTypes.SPT_DEVELOPER, StringComparison.OrdinalIgnoreCase) ?? false) { // Force lock duration to 10seconds for dev profiles scavLockDuration = 10; diff --git a/Libraries/SPTarkov.Server.Core/Generators/PmcWaveGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/PmcWaveGenerator.cs index 36d7e9c5..26ffd1ec 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/PmcWaveGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/PmcWaveGenerator.cs @@ -8,11 +8,7 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Generators; [Injectable] -public class PmcWaveGenerator( - ISptLogger logger, - DatabaseService databaseService, - ConfigServer configServer -) +public class PmcWaveGenerator(ISptLogger logger, DatabaseService databaseService, ConfigServer configServer) { protected readonly PmcConfig _pmcConfig = configServer.GetConfig(); @@ -58,12 +54,7 @@ public class PmcWaveGenerator( /// Location Object public void ApplyWaveChangesToMap(LocationBase location) { - if ( - !_pmcConfig.CustomPmcWaves.TryGetValue( - location.Id.ToLowerInvariant(), - out var pmcWavesToAdd - ) - ) + if (!_pmcConfig.CustomPmcWaves.TryGetValue(location.Id.ToLowerInvariant(), out var pmcWavesToAdd)) { return; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RagfairAssortGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RagfairAssortGenerator.cs index 6323397f..fef958c6 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RagfairAssortGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RagfairAssortGenerator.cs @@ -55,11 +55,7 @@ public class RagfairAssortGenerator( IEnumerable> results = []; // Get cloned items from db - var dbItems = databaseService - .GetItems() - .Where(item => - !string.Equals(item.Value.Type, "Node", StringComparison.OrdinalIgnoreCase) - ); + var dbItems = databaseService.GetItems().Where(item => !string.Equals(item.Value.Type, "Node", StringComparison.OrdinalIgnoreCase)); // Store processed preset tpls so we don't add them when processing non-preset items HashSet processedArmorItems = []; @@ -96,11 +92,7 @@ public class RagfairAssortGenerator( } // Skip seasonal items when not in-season - if ( - RagfairConfig.Dynamic.RemoveSeasonalItemsWhenNotInEvent - && !seasonalEventActive - && seasonalItemTplBlacklist.Contains(id) - ) + if (RagfairConfig.Dynamic.RemoveSeasonalItemsWhenNotInEvent && !seasonalEventActive && seasonalItemTplBlacklist.Contains(id)) { continue; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs index f82fd3d2..9bfd76ca 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RagfairOfferGenerator.cs @@ -101,21 +101,13 @@ public class RagfairOfferGenerator( // Hydrate ammo boxes with cartridges + ensure only 1 item is present (ammo box) // On offer refresh don't re-add cartridges to ammo box that already has cartridges - if ( - itemsClone.Count == 1 - && itemHelper.IsOfBaseclass(itemsClone[0].Template, BaseClasses.AMMO_BOX) - ) + if (itemsClone.Count == 1 && itemHelper.IsOfBaseclass(itemsClone[0].Template, BaseClasses.AMMO_BOX)) { - itemHelper.AddCartridgesToAmmoBox( - itemsClone, - itemHelper.GetItem(rootItem.Template).Value - ); + itemHelper.AddCartridgesToAmmoBox(itemsClone, itemHelper.GetItem(rootItem.Template).Value); } var roubleListingPrice = Math.Round(ConvertOfferRequirementsIntoRoubles(offerRequirements)); - var singleItemListingPrice = details.SellInOnePiece - ? roubleListingPrice / details.Quantity - : roubleListingPrice; + var singleItemListingPrice = details.SellInOnePiece ? roubleListingPrice / details.Quantity : roubleListingPrice; var offer = new RagfairOffer { @@ -124,10 +116,7 @@ public class RagfairOfferGenerator( User = details.Creator == OfferCreator.Player ? CreatePlayerUserDataForFleaOffer(details.UserId) - : CreateUserDataForFleaOffer( - details.UserId, - details.Creator == OfferCreator.Trader - ), + : CreateUserDataForFleaOffer(details.UserId, details.Creator == OfferCreator.Trader), Root = rootItem.Id, Items = itemsClone, ItemsCost = Math.Round(handbookHelper.GetTemplatePrice(rootItem.Template)), // Handbook price @@ -167,10 +156,7 @@ public class RagfairOfferGenerator( Id = userId, MemberType = MemberCategory.Default, Nickname = botHelper.GetPmcNicknameOfMaxLength(botConfig.BotNameLengthLimit), - Rating = randomUtil.GetDouble( - ragfairConfig.Dynamic.Rating.Min, - ragfairConfig.Dynamic.Rating.Max - ), + Rating = randomUtil.GetDouble(ragfairConfig.Dynamic.Rating.Min, ragfairConfig.Dynamic.Rating.Max), IsRatingGrowing = randomUtil.GetBool(), Avatar = null, Aid = hashUtil.GenerateAccountId(), @@ -203,17 +189,14 @@ public class RagfairOfferGenerator( /// /// barter requirements for offer /// rouble cost of offer - protected double ConvertOfferRequirementsIntoRoubles( - IEnumerable offerRequirements - ) + protected double ConvertOfferRequirementsIntoRoubles(IEnumerable offerRequirements) { var roublePrice = 0d; foreach (var requirement in offerRequirements) { roublePrice += paymentHelper.IsMoneyTpl(requirement.TemplateId) ? Math.Round(CalculateRoublePrice(requirement.Count.Value, requirement.TemplateId)) - : ragfairPriceService.GetFleaPriceForItem(requirement.TemplateId) - * requirement.Count.Value; // Get flea price for barter offer items + : ragfairPriceService.GetFleaPriceForItem(requirement.TemplateId) * requirement.Count.Value; // Get flea price for barter offer items } return roublePrice; @@ -271,10 +254,7 @@ public class RagfairOfferGenerator( } // Generated pmc offer - return randomUtil.GetDouble( - ragfairConfig.Dynamic.Rating.Min, - ragfairConfig.Dynamic.Rating.Max - ); + return randomUtil.GetDouble(ragfairConfig.Dynamic.Rating.Min, ragfairConfig.Dynamic.Rating.Max); } /// @@ -289,13 +269,8 @@ public class RagfairOfferGenerator( if (creatorType == OfferCreator.Player) { // Player offer = current time + offerDurationTimeInHour; - var offerDurationTimeHours = databaseService - .GetGlobals() - .Configuration.RagFair.OfferDurationTimeInHour; - return (long)( - timeUtil.GetTimeStamp() - + Math.Round((double)offerDurationTimeHours * TimeUtil.OneHourAsSeconds) - ); + var offerDurationTimeHours = databaseService.GetGlobals().Configuration.RagFair.OfferDurationTimeInHour; + return (long)(timeUtil.GetTimeStamp() + Math.Round((double)offerDurationTimeHours * TimeUtil.OneHourAsSeconds)); } if (creatorType == OfferCreator.Trader) @@ -304,10 +279,7 @@ public class RagfairOfferGenerator( return (long)databaseService.GetTrader(userID).Base.NextResupply; } - var randomSpread = randomUtil.GetDouble( - ragfairConfig.Dynamic.EndTimeSeconds.Min, - ragfairConfig.Dynamic.EndTimeSeconds.Max - ); + var randomSpread = randomUtil.GetDouble(ragfairConfig.Dynamic.EndTimeSeconds.Min, ragfairConfig.Dynamic.EndTimeSeconds.Max); // Fake-player offer return (long)Math.Round(time + randomSpread); @@ -323,15 +295,11 @@ public class RagfairOfferGenerator( var stopwatch = Stopwatch.StartNew(); // get assort items from param if they exist, otherwise grab freshly generated assorts - var assortItemsToProcess = replacingExpiredOffers - ? expiredOffers ?? [] - : ragfairAssortGenerator.GetAssortItems(); + var assortItemsToProcess = replacingExpiredOffers ? expiredOffers ?? [] : ragfairAssortGenerator.GetAssortItems(); stopwatch.Stop(); if (logger.IsLogEnabled(LogLevel.Debug) && stopwatch.ElapsedMilliseconds > 0) { - logger.Debug( - $"Took {stopwatch.ElapsedMilliseconds}ms to GetRagfairAssorts - {assortItemsToProcess.Count()} items" - ); + logger.Debug($"Took {stopwatch.ElapsedMilliseconds}ms to GetRagfairAssorts - {assortItemsToProcess.Count()} items"); } stopwatch.Restart(); @@ -341,11 +309,7 @@ public class RagfairOfferGenerator( tasks.Add( Task.Factory.StartNew(() => { - CreateOffersFromAssort( - assortItemWithChildren, - replacingExpiredOffers, - ragfairConfig.Dynamic - ); + CreateOffersFromAssort(assortItemWithChildren, replacingExpiredOffers, ragfairConfig.Dynamic); }) ); } @@ -364,11 +328,7 @@ public class RagfairOfferGenerator( /// Item with its children to process into offers /// Is an expired offer /// Ragfair dynamic config - protected void CreateOffersFromAssort( - List assortItemWithChildren, - bool isExpiredOffer, - Dynamic config - ) + protected void CreateOffersFromAssort(List assortItemWithChildren, bool isExpiredOffer, Dynamic config) { var rootItem = assortItemWithChildren.FirstOrDefault(); var itemToSellDetails = itemHelper.GetItem(rootItem.Template); @@ -380,22 +340,15 @@ public class RagfairOfferGenerator( } // Armor presets can hold plates above the allowed flea level, remove if necessary - var isPreset = - rootItem?.Upd?.SptPresetId is not null - && presetHelper.IsPreset(rootItem.Upd.SptPresetId.Value); + var isPreset = rootItem?.Upd?.SptPresetId is not null && presetHelper.IsPreset(rootItem.Upd.SptPresetId.Value); if (!isExpiredOffer && isPreset && ragfairConfig.Dynamic.Blacklist.EnableBsgList) { - RemoveBannedPlatesFromPreset( - assortItemWithChildren, - ragfairConfig.Dynamic.Blacklist.ArmorPlate - ); + RemoveBannedPlatesFromPreset(assortItemWithChildren, ragfairConfig.Dynamic.Blacklist.ArmorPlate); } // Get number of offers to create // Limit to 1 offer when processing expired - like-for-like replacement - var offerCount = isExpiredOffer - ? 1 - : ragfairServerHelper.GetOfferCountByBaseType(itemToSellDetails.Value.Parent); + var offerCount = isExpiredOffer ? 1 : ragfairServerHelper.GetOfferCountByBaseType(itemToSellDetails.Value.Parent); for (var index = 0; index < offerCount; index++) { @@ -424,10 +377,7 @@ public class RagfairOfferGenerator( /// Preset to check for plates /// Settings /// True if plates removed - protected bool RemoveBannedPlatesFromPreset( - List presetWithChildren, - ArmorPlateBlacklistSettings plateSettings - ) + protected bool RemoveBannedPlatesFromPreset(List presetWithChildren, ArmorPlateBlacklistSettings plateSettings) { if (!itemHelper.ArmorItemCanHoldMods(presetWithChildren[0].Template)) // Cant hold armor inserts, skip @@ -436,9 +386,7 @@ public class RagfairOfferGenerator( } var plateSlots = presetWithChildren - .Where(item => - itemHelper.GetRemovablePlateSlotIds().Contains(item.SlotId?.ToLowerInvariant()) - ) + .Where(item => itemHelper.GetRemovablePlateSlotIds().Contains(item.SlotId?.ToLowerInvariant())) .ToList(); if (plateSlots.Count == 0) // Has no plate slots e.g. "front_plate", exit @@ -487,10 +435,7 @@ public class RagfairOfferGenerator( var rootItem = itemWithChildren.FirstOrDefault(); // Get randomised amount to list on flea - var desiredStackSize = ragfairServerHelper.CalculateDynamicStackCount( - rootItem.Template, - isPreset - ); + var desiredStackSize = ragfairServerHelper.CalculateDynamicStackCount(rootItem.Template, isPreset); // Reset stack count to 1 from whatever it was prior rootItem.Upd.StackObjectsCount = 1; @@ -506,36 +451,21 @@ public class RagfairOfferGenerator( !isBarterOffer && randomUtil.GetChance100(ragfairConfig.Dynamic.Pack.ChancePercent) && itemWithChildren.Count == 1 - && itemHelper.IsOfBaseclasses( - rootItem.Template, - ragfairConfig.Dynamic.Pack.ItemTypeWhitelist - ); + && itemHelper.IsOfBaseclasses(rootItem.Template, ragfairConfig.Dynamic.Pack.ItemTypeWhitelist); List barterScheme; if (isPackOffer) { // Set pack size - desiredStackSize = randomUtil.GetInt( - ragfairConfig.Dynamic.Pack.ItemCountMin, - ragfairConfig.Dynamic.Pack.ItemCountMax - ); + desiredStackSize = randomUtil.GetInt(ragfairConfig.Dynamic.Pack.ItemCountMin, ragfairConfig.Dynamic.Pack.ItemCountMax); // Don't randomise pack items - barterScheme = CreateCurrencyBarterScheme( - itemWithChildren, - isPackOffer, - desiredStackSize - ); + barterScheme = CreateCurrencyBarterScheme(itemWithChildren, isPackOffer, desiredStackSize); } else if (isBarterOffer) { // Apply randomised properties - RandomiseOfferItemUpdProperties( - sellerId, - itemWithChildren, - itemToSellDetails, - offerCreator - ); + RandomiseOfferItemUpdProperties(sellerId, itemWithChildren, itemToSellDetails, offerCreator); barterScheme = CreateBarterBarterScheme(itemWithChildren, ragfairConfig.Dynamic.Barter); if (ragfairConfig.Dynamic.Barter.MakeSingleStackOnly) { @@ -550,12 +480,7 @@ public class RagfairOfferGenerator( { // Not barter or pack offer // Apply randomised properties - RandomiseOfferItemUpdProperties( - sellerId, - itemWithChildren, - itemToSellDetails, - offerCreator - ); + RandomiseOfferItemUpdProperties(sellerId, itemWithChildren, itemToSellDetails, offerCreator); barterScheme = CreateCurrencyBarterScheme(itemWithChildren, isPackOffer); } @@ -593,9 +518,7 @@ public class RagfairOfferGenerator( ); // Latest first, to ensure we don't move later items off by 1 each time we remove an item below it - var indexesToRemove = offerItemPlatesToRemove - .Select(plateItem => itemWithChildren.IndexOf(plateItem)) - .ToHashSet(); + var indexesToRemove = offerItemPlatesToRemove.Select(plateItem => itemWithChildren.IndexOf(plateItem)).ToHashSet(); foreach (var index in indexesToRemove.OrderByDescending(x => x)) { itemWithChildren.RemoveAt(index); @@ -618,19 +541,12 @@ public class RagfairOfferGenerator( // Trader assorts / assort items are missing if (assortsClone?.Items?.Count is null or 0) { - logger.Error( - localisationService.GetText( - "ragfair-no_trader_assorts_cant_generate_flea_offers", - trader.Base.Nickname - ) - ); + logger.Error(localisationService.GetText("ragfair-no_trader_assorts_cant_generate_flea_offers", trader.Base.Nickname)); return; } var blacklist = ragfairConfig.Dynamic.Blacklist; - var childAssortItems = assortsClone - .Items.Where(x => !string.Equals(x.ParentId, "hideout", StringComparison.Ordinal)) - .ToList(); + var childAssortItems = assortsClone.Items.Where(x => !string.Equals(x.ParentId, "hideout", StringComparison.Ordinal)).ToList(); foreach (var item in assortsClone.Items) { // We only want to process 'base/root' items, no children @@ -646,17 +562,12 @@ public class RagfairOfferGenerator( var itemDetails = itemHelper.GetItem(item.Template); if (!itemDetails.Key) { - logger.Warning( - localisationService.GetText("ragfair-tpl_not_a_valid_item", item.Template) - ); + logger.Warning(localisationService.GetText("ragfair-tpl_not_a_valid_item", item.Template)); continue; } // Don't include items that BSG has blacklisted from flea - if ( - blacklist.EnableBsgList - && !(itemDetails.Value?.Properties?.CanSellOnRagfair ?? false) - ) + if (blacklist.EnableBsgList && !(itemDetails.Value?.Properties?.CanSellOnRagfair ?? false)) { continue; } @@ -731,11 +642,7 @@ public class RagfairOfferGenerator( } // Roll random chance to randomise item condition - if ( - randomUtil.GetChance100( - ragfairConfig.Dynamic.Condition[parentId.Value].ConditionChance * 100 - ) - ) + if (randomUtil.GetChance100(ragfairConfig.Dynamic.Condition[parentId.Value].ConditionChance * 100)) { RandomiseItemCondition(parentId.Value, itemWithMods, itemDetails); } @@ -768,39 +675,25 @@ public class RagfairOfferGenerator( /// Also the parentID of item being altered /// Item to adjust condition details of /// DB Item details of first item in list - protected void RandomiseItemCondition( - MongoId conditionSettingsId, - IEnumerable itemWithMods, - TemplateItem itemDetails - ) + protected void RandomiseItemCondition(MongoId conditionSettingsId, IEnumerable itemWithMods, TemplateItem itemDetails) { var rootItem = itemWithMods.First(); var itemConditionValues = ragfairConfig.Dynamic.Condition[conditionSettingsId]; - var maxMultiplier = randomUtil.GetDouble( - itemConditionValues.Max.Min, - itemConditionValues.Max.Min - ); - var currentMultiplier = randomUtil.GetDouble( - itemConditionValues.Current.Min, - itemConditionValues.Current.Max - ); + var maxMultiplier = randomUtil.GetDouble(itemConditionValues.Max.Min, itemConditionValues.Max.Min); + var currentMultiplier = randomUtil.GetDouble(itemConditionValues.Current.Min, itemConditionValues.Current.Max); // Randomise armor + plates + armor related things if ( itemHelper.ArmorItemCanHoldMods(rootItem.Template) - || itemHelper.IsOfBaseclasses( - rootItem.Template, - [BaseClasses.ARMOR_PLATE, BaseClasses.ARMORED_EQUIPMENT] - ) + || itemHelper.IsOfBaseclasses(rootItem.Template, [BaseClasses.ARMOR_PLATE, BaseClasses.ARMORED_EQUIPMENT]) ) { RandomiseArmorDurabilityValues(itemWithMods, currentMultiplier, maxMultiplier); // Add hits to visor var visorMod = itemWithMods.FirstOrDefault(item => - item.ParentId == BaseClasses.ARMORED_EQUIPMENT.ToString() - && item.SlotId == "mod_equipment_000" + item.ParentId == BaseClasses.ARMORED_EQUIPMENT.ToString() && item.SlotId == "mod_equipment_000" ); if (randomUtil.GetChance100(25) && visorMod != null) { @@ -815,12 +708,7 @@ public class RagfairOfferGenerator( // Randomise Weapons if (itemHelper.IsOfBaseclass(itemDetails.Id, BaseClasses.WEAPON)) { - RandomiseWeaponDurability( - itemWithMods.First(), - itemDetails, - maxMultiplier, - currentMultiplier - ); + RandomiseWeaponDurability(itemWithMods.First(), itemDetails, maxMultiplier, currentMultiplier); return; } @@ -836,8 +724,7 @@ public class RagfairOfferGenerator( if (rootItem.Upd?.Key != null && itemDetails.Properties.MaximumNumberOfUsage > 1) { // Randomize key uses - rootItem.Upd.Key.NumberOfUsages = (int?) - Math.Round(itemDetails.Properties.MaximumNumberOfUsage.Value * (1 - maxMultiplier)); + rootItem.Upd.Key.NumberOfUsages = (int?)Math.Round(itemDetails.Properties.MaximumNumberOfUsage.Value * (1 - maxMultiplier)); return; } @@ -853,9 +740,7 @@ public class RagfairOfferGenerator( if (rootItem.Upd?.RepairKit != null) { // randomize repair kit (armor/weapon) uses - var resource = Math.Round( - (double)itemDetails.Properties.MaxRepairResource * maxMultiplier - ); + var resource = Math.Round((double)itemDetails.Properties.MaxRepairResource * maxMultiplier); rootItem.Upd.RepairKit.Resource = resource == 0D ? 1D : resource; return; @@ -865,11 +750,7 @@ public class RagfairOfferGenerator( { var totalCapacity = itemDetails.Properties.MaxResource; var remainingFuel = Math.Round((double)totalCapacity * maxMultiplier); - rootItem.Upd.Resource = new UpdResource - { - UnitsConsumed = totalCapacity - remainingFuel, - Value = remainingFuel, - }; + rootItem.Upd.Resource = new UpdResource { UnitsConsumed = totalCapacity - remainingFuel, Value = remainingFuel }; } } @@ -880,29 +761,18 @@ public class RagfairOfferGenerator( /// Item details from DB /// Value to multiply max durability by /// Value to multiply current durability by - protected void RandomiseWeaponDurability( - Item item, - TemplateItem itemDbDetails, - double maxMultiplier, - double currentMultiplier - ) + protected void RandomiseWeaponDurability(Item item, TemplateItem itemDbDetails, double maxMultiplier, double currentMultiplier) { // Max var baseMaxDurability = itemDbDetails.Properties.MaxDurability; var lowestMaxDurability = randomUtil.GetDouble(maxMultiplier, 1) * baseMaxDurability; - var chosenMaxDurability = Math.Round( - randomUtil.GetDouble((double)lowestMaxDurability, (double)baseMaxDurability) - ); + var chosenMaxDurability = Math.Round(randomUtil.GetDouble((double)lowestMaxDurability, (double)baseMaxDurability)); // Current - var lowestCurrentDurability = - randomUtil.GetDouble(currentMultiplier, 1) * chosenMaxDurability; - var chosenCurrentDurability = Math.Round( - randomUtil.GetDouble(lowestCurrentDurability, chosenMaxDurability) - ); + var lowestCurrentDurability = randomUtil.GetDouble(currentMultiplier, 1) * chosenMaxDurability; + var chosenCurrentDurability = Math.Round(randomUtil.GetDouble(lowestCurrentDurability, chosenMaxDurability)); - item.Upd.Repairable.Durability = - chosenCurrentDurability == 0 ? 1D : chosenCurrentDurability; // Never var value become 0 + item.Upd.Repairable.Durability = chosenCurrentDurability == 0 ? 1D : chosenCurrentDurability; // Never var value become 0 item.Upd.Repairable.MaxDurability = chosenMaxDurability; } @@ -912,11 +782,7 @@ public class RagfairOfferGenerator( /// Armor item with its child mods /// Chosen multiplier to use for current durability value /// Chosen multiplier to use for max durability value - protected void RandomiseArmorDurabilityValues( - IEnumerable armorWithMods, - double currentMultiplier, - double maxMultiplier - ) + protected void RandomiseArmorDurabilityValues(IEnumerable armorWithMods, double currentMultiplier, double maxMultiplier) { foreach (var armorItem in armorWithMods) { @@ -926,17 +792,11 @@ public class RagfairOfferGenerator( itemHelper.AddUpdObjectToItem(armorItem); var baseMaxDurability = itemDbDetails.Properties.MaxDurability; - var lowestMaxDurability = - randomUtil.GetDouble(maxMultiplier, 1) * baseMaxDurability; - var chosenMaxDurability = Math.Round( - randomUtil.GetDouble((double)lowestMaxDurability, (double)baseMaxDurability) - ); + var lowestMaxDurability = randomUtil.GetDouble(maxMultiplier, 1) * baseMaxDurability; + var chosenMaxDurability = Math.Round(randomUtil.GetDouble((double)lowestMaxDurability, (double)baseMaxDurability)); - var lowestCurrentDurability = - randomUtil.GetDouble(currentMultiplier, 1) * chosenMaxDurability; - var chosenCurrentDurability = Math.Round( - randomUtil.GetDouble(lowestCurrentDurability, chosenMaxDurability) - ); + var lowestCurrentDurability = randomUtil.GetDouble(currentMultiplier, 1) * chosenMaxDurability; + var chosenCurrentDurability = Math.Round(randomUtil.GetDouble(lowestCurrentDurability, chosenMaxDurability)); armorItem.Upd.Repairable = new UpdRepairable { @@ -964,11 +824,7 @@ public class RagfairOfferGenerator( if (isRepairable && props.Durability > 0) { - item.Upd.Repairable = new UpdRepairable - { - Durability = props.Durability, - MaxDurability = props.Durability, - }; + item.Upd.Repairable = new UpdRepairable { Durability = props.Durability, MaxDurability = props.Durability }; return; } @@ -1007,17 +863,10 @@ public class RagfairOfferGenerator( /// Items for sale in offer /// Barter config from ragfairConfig.Dynamic.barter /// Barter scheme - protected List CreateBarterBarterScheme( - IEnumerable offerItems, - BarterDetails barterConfig - ) + protected List CreateBarterBarterScheme(IEnumerable offerItems, BarterDetails barterConfig) { // Get flea price of item being sold - var priceOfOfferItem = ragfairPriceService.GetDynamicOfferPriceForOffer( - offerItems, - Money.ROUBLES, - false - ); + var priceOfOfferItem = ragfairPriceService.GetDynamicOfferPriceForOffer(offerItems, Money.ROUBLES, false); // Don't make items under a designated rouble value into barter offers if (priceOfOfferItem < barterConfig.MinRoubleCostToBecomeBarter) @@ -1026,17 +875,13 @@ public class RagfairOfferGenerator( } // Get a randomised number of barter items to list offer for - var barterItemCount = randomUtil.GetInt( - barterConfig.ItemCountMin, - barterConfig.ItemCountMax - ); + var barterItemCount = randomUtil.GetInt(barterConfig.ItemCountMin, barterConfig.ItemCountMax); // Get desired cost of individual item offer will be listed for e.g. offer = 15k, item count = 3, desired item cost = 5k var desiredItemCostRouble = Math.Round(priceOfOfferItem / barterItemCount); // Rouble amount to go above/below when looking for an item (Wiggle cost of item a little) - var offerCostVarianceRoubles = - desiredItemCostRouble * barterConfig.PriceRangeVariancePercent / 100; + var offerCostVarianceRoubles = desiredItemCostRouble * barterConfig.PriceRangeVariancePercent / 100; // Dict of items and their flea price (cached on first use) var itemFleaPrices = GetFleaPricesAsArray(); @@ -1047,9 +892,7 @@ public class RagfairOfferGenerator( var rootOfferItem = offerItems.FirstOrDefault(); var itemsInsidePriceBounds = itemFleaPrices.Where(itemAndPrice => - itemAndPrice.Price >= min - && itemAndPrice.Price <= max - && itemAndPrice.Tpl != rootOfferItem.Template // Don't allow the item being sold to be chosen + itemAndPrice.Price >= min && itemAndPrice.Price <= max && itemAndPrice.Tpl != rootOfferItem.Template // Don't allow the item being sold to be chosen ); // No items on flea have a matching price, fall back to currency @@ -1096,19 +939,10 @@ public class RagfairOfferGenerator( /// Is the barter scheme being created for a pack offer /// What to multiply the resulting price by /// Barter scheme for offer - protected List CreateCurrencyBarterScheme( - IEnumerable offerWithChildren, - bool isPackOffer, - double multiplier = 1 - ) + protected List CreateCurrencyBarterScheme(IEnumerable offerWithChildren, bool isPackOffer, double multiplier = 1) { var currency = ragfairServerHelper.GetDynamicOfferCurrency(); - var price = - ragfairPriceService.GetDynamicOfferPriceForOffer( - offerWithChildren, - currency, - isPackOffer - ) * multiplier; + var price = ragfairPriceService.GetDynamicOfferPriceForOffer(offerWithChildren, currency, isPackOffer) * multiplier; return [new BarterScheme { Count = price, Template = currency }]; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs index 0c3e5cc5..17975d8f 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/CompletionQuestGenerator.cs @@ -60,25 +60,15 @@ public class CompletionQuestGenerator( if (quest is null) { - logger.Error( - "Quest template null when attempting to create completion operational task." - ); + logger.Error("Quest template null when attempting to create completion operational task."); return null; } // Filter the items.json items to items the player must retrieve to complete quest: shouldn't be a quest item or "non-existent" - var itemsToRetrievePool = GetItemsToRetrievePool( - completionConfig, - repeatableConfig.RewardBlacklist - ); + var itemsToRetrievePool = GetItemsToRetrievePool(completionConfig, repeatableConfig.RewardBlacklist); // Filter items within our budget - var (hashSet, budget) = GetItemsWithinBudget( - pmcLevel, - levelsConfig, - roublesConfig, - itemsToRetrievePool - ); + var (hashSet, budget) = GetItemsWithinBudget(pmcLevel, levelsConfig, roublesConfig, itemsToRetrievePool); itemsToRetrievePool = hashSet; // We also have the option to use whitelist and/or blacklist which is defined in repeatableQuests.json as @@ -96,22 +86,12 @@ public class CompletionQuestGenerator( // Filtering too harsh if (itemsToRetrievePool.Count == 0) { - logger.Error( - localisationService.GetText( - "repeatable-completion_quest_whitelist_too_small_or_blacklist_too_restrictive" - ) - ); + logger.Error(localisationService.GetText("repeatable-completion_quest_whitelist_too_small_or_blacklist_too_restrictive")); return null; } - var selectedItems = GenerateAvailableForFinish( - quest, - completionConfig, - repeatableConfig, - itemsToRetrievePool.ToList(), - budget - ); + var selectedItems = GenerateAvailableForFinish(quest, completionConfig, repeatableConfig, itemsToRetrievePool.ToList(), budget); quest.Rewards = repeatableQuestRewardGenerator.GenerateReward( pmcLevel, @@ -131,10 +111,7 @@ public class CompletionQuestGenerator( /// Completion quest type config /// Item tpls to not add to pool /// Set of item tpls - protected HashSet GetItemsToRetrievePool( - Completion completionConfig, - HashSet itemTplBlacklist - ) + protected HashSet GetItemsToRetrievePool(Completion completionConfig, HashSet itemTplBlacklist) { // Get seasonal items that should not be added to pool as seasonal event is not active var seasonalItems = seasonalEventService.GetInactiveSeasonalEventItems(); @@ -184,19 +161,12 @@ public class CompletionQuestGenerator( { // Be fair, don't value the items be more expensive than the reward var multiplier = randomUtil.GetDouble(0.5, 1); - var roublesBudget = Math.Floor( - mathUtil.Interp1(pmcLevel, levelsConfig, roublesConfig) * multiplier - ); + var roublesBudget = Math.Floor(mathUtil.Interp1(pmcLevel, levelsConfig, roublesConfig) * multiplier); // Make sure there is always a 5000 rouble budget available for selection roublesBudget = Math.Max(roublesBudget, 5000d); - return ( - itemsToRetrievePool - .Where(itemTpl => itemHelper.GetItemPrice(itemTpl) < roublesBudget) - .ToHashSet(), - roublesBudget - ); + return (itemsToRetrievePool.Where(itemTpl => itemHelper.GetItemPrice(itemTpl) < roublesBudget).ToHashSet(), roublesBudget); } /// @@ -205,14 +175,9 @@ public class CompletionQuestGenerator( /// Item selection to filter /// Level of pmc /// Filtered selection, or original if null or empty - protected HashSet GetWhitelistedItemSelection( - HashSet itemSelection, - int pmcLevel - ) + protected HashSet GetWhitelistedItemSelection(HashSet itemSelection, int pmcLevel) { - var itemWhitelist = databaseService - .GetTemplates() - .RepeatableQuests?.Data?.Completion?.ItemsWhitelist; + var itemWhitelist = databaseService.GetTemplates().RepeatableQuests?.Data?.Completion?.ItemsWhitelist; // Whitelist doesn't exist or is empty, return original if (itemWhitelist is null || itemWhitelist.Count == 0) @@ -221,17 +186,13 @@ public class CompletionQuestGenerator( } // Filter and concatenate items according to current player level - var itemIdsWhitelisted = itemWhitelist - .Where(p => p.MinPlayerLevel <= pmcLevel) - .SelectMany(x => x.ItemIds) - .ToHashSet(); //.Aggregate((a, p) => a.Concat(p.ItemIds), []); + var itemIdsWhitelisted = itemWhitelist.Where(p => p.MinPlayerLevel <= pmcLevel).SelectMany(x => x.ItemIds).ToHashSet(); //.Aggregate((a, p) => a.Concat(p.ItemIds), []); var filteredSelection = itemSelection .Where(x => { // Whitelist can contain item tpls and item base type ids - return itemIdsWhitelisted.Any(v => itemHelper.IsOfBaseclass(x, v)) - || itemIdsWhitelisted.Contains(x); + return itemIdsWhitelisted.Any(v => itemHelper.IsOfBaseclass(x, v)) || itemIdsWhitelisted.Contains(x); }) .ToHashSet(); @@ -248,14 +209,9 @@ public class CompletionQuestGenerator( /// Item selection to filter /// Level of pmc /// Filtered selection, or original if null or empty - protected HashSet GetBlacklistedItemSelection( - HashSet itemSelection, - int pmcLevel - ) + protected HashSet GetBlacklistedItemSelection(HashSet itemSelection, int pmcLevel) { - var itemBlacklist = databaseService - .GetTemplates() - .RepeatableQuests?.Data?.Completion?.ItemsBlacklist; + var itemBlacklist = databaseService.GetTemplates().RepeatableQuests?.Data?.Completion?.ItemsBlacklist; // Blacklist doesn't exist or is empty, return original if (itemBlacklist is null || itemBlacklist.Count == 0) @@ -272,8 +228,7 @@ public class CompletionQuestGenerator( var filteredSelection = itemSelection .Where(x => { - return itemIdsBlacklisted.All(v => !itemHelper.IsOfBaseclass(x, v)) - || !itemIdsBlacklisted.Contains(x); + return itemIdsBlacklisted.All(v => !itemHelper.IsOfBaseclass(x, v)) || !itemIdsBlacklisted.Contains(x); }) .ToHashSet(); @@ -323,10 +278,7 @@ public class CompletionQuestGenerator( if (!found) { logger.Error( - localisationService.GetText( - "repeatable-no_reward_item_found_in_price_range", - new { minPrice = 0, roublesBudget } - ) + localisationService.GetText("repeatable-no_reward_item_found_in_price_range", new { minPrice = 0, roublesBudget }) ); return chosenRequirementItemsTpls; @@ -356,17 +308,13 @@ public class CompletionQuestGenerator( // Push a CompletionCondition with the item and the amount of the item into quest chosenRequirementItemsTpls.Add(tplChosen); - quest.Conditions.AvailableForFinish.Add( - GenerateCondition(tplChosen, value, repeatableConfig.QuestConfig.Completion) - ); + quest.Conditions.AvailableForFinish.Add(GenerateCondition(tplChosen, value, repeatableConfig.QuestConfig.Completion)); // Is there budget left for more items if (roublesBudget > 0) { // Reduce item pool to fit budget - itemSelection = itemSelection - .Where(tpl => itemHelper.GetItemPrice(tpl) < roublesBudget) - .ToList(); + itemSelection = itemSelection.Where(tpl => itemHelper.GetItemPrice(tpl) < roublesBudget).ToList(); if (itemSelection.Count == 0) { @@ -393,22 +341,12 @@ public class CompletionQuestGenerator( /// Amount of items of this specific type to request /// Completion config from quest.json /// object of "Completion"-condition - protected QuestCondition GenerateCondition( - MongoId itemTpl, - double value, - Completion completionConfig - ) + protected QuestCondition GenerateCondition(MongoId itemTpl, double value, Completion completionConfig) { var onlyFoundInRaid = completionConfig.RequiredItemsAreFiR; - var minDurability = itemHelper.IsOfBaseclasses( - itemTpl, - [BaseClasses.WEAPON, BaseClasses.ARMOR] - ) + var minDurability = itemHelper.IsOfBaseclasses(itemTpl, [BaseClasses.WEAPON, BaseClasses.ARMOR]) ? randomUtil.GetArrayValue( - [ - completionConfig.RequiredItemMinDurabilityMinMax.Min, - completionConfig.RequiredItemMinDurabilityMinMax.Max, - ] + [completionConfig.RequiredItemMinDurabilityMinMax.Min, completionConfig.RequiredItemMinDurabilityMinMax.Max] ) : 0; diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs index a87b6f75..ae1da806 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/EliminationQuestGenerator.cs @@ -35,14 +35,13 @@ public class EliminationQuestGenerator( /// /// Body parts to present to the client as opposed to the body part information in quest data. /// - private static readonly FrozenDictionary> _bodyPartsToClient = - new Dictionary> - { - { BodyParts.Arms, [BodyParts.LeftArm, BodyParts.RightArm] }, - { BodyParts.Legs, [BodyParts.LeftLeg, BodyParts.RightLeg] }, - { BodyParts.Head, [BodyParts.Head] }, - { BodyParts.Chest, [BodyParts.Chest, BodyParts.Stomach] }, - }.ToFrozenDictionary(); + private static readonly FrozenDictionary> _bodyPartsToClient = new Dictionary> + { + { BodyParts.Arms, [BodyParts.LeftArm, BodyParts.RightArm] }, + { BodyParts.Legs, [BodyParts.LeftLeg, BodyParts.RightLeg] }, + { BodyParts.Head, [BodyParts.Head] }, + { BodyParts.Chest, [BodyParts.Chest, BodyParts.Stomach] }, + }.ToFrozenDictionary(); /// /// MaxDistDifficulty is defined by 2, this could be a tuning parameter if we don't like the reward generation @@ -83,9 +82,7 @@ public class EliminationQuestGenerator( var generationData = GetGenerationData(repeatableConfig, pmcLevel); if (generationData is null) { - logger.Error( - localisationService.GetText("repeatable-eliminationQuestGenerationData-is-null") - ); + logger.Error(localisationService.GetText("repeatable-eliminationQuestGenerationData-is-null")); return null; } @@ -114,18 +111,13 @@ public class EliminationQuestGenerator( // Target on bodyPart max. difficulty is that of the least probable element var maxTargetDifficulty = 1 / generationData.TargetsConfig.MinProbability(); - var maxBodyPartsDifficulty = - generationData.EliminationConfig.MinKills - / generationData.BodyPartsConfig.MinProbability(); + var maxBodyPartsDifficulty = generationData.EliminationConfig.MinKills / generationData.BodyPartsConfig.MinProbability(); var maxKillDifficulty = generationData.EliminationConfig.MaxKills; var targetPool = questTypePool.Pool.Elimination; // Get a random bot type to eliminate - var (botTypeToEliminate, targetsConfig) = GetBotTypeToEliminate( - generationData, - questTypePool - ); + var (botTypeToEliminate, targetsConfig) = GetBotTypeToEliminate(generationData, questTypePool); if (botTypeToEliminate is null || targetsConfig is null) { logger.Warning(localisationService.GetText("repeatable-no-bot-types-remain")); @@ -143,30 +135,18 @@ public class EliminationQuestGenerator( // Try and get a target location pool for this bot type if (!targetPool.Targets.TryGetValue(botTypeToEliminate, out var targetLocationPool)) { - logger.Error( - localisationService.GetText("repeatable-unable-get-target-pool", botTypeToEliminate) - ); + logger.Error(localisationService.GetText("repeatable-unable-get-target-pool", botTypeToEliminate)); return null; } // Try and get a location key for this quest if ( - !TryGetLocationKey( - generationData, - targetPool, - botTypeToEliminate, - targetLocationPool.Locations, - out var locationKey - ) || locationKey is null + !TryGetLocationKey(generationData, targetPool, botTypeToEliminate, targetLocationPool.Locations, out var locationKey) + || locationKey is null ) { - logger.Error( - localisationService.GetText( - "repeatable-unable-get-location-key", - botTypeToEliminate - ) - ); + logger.Error(localisationService.GetText("repeatable-unable-get-location-key", botTypeToEliminate)); return null; } @@ -174,9 +154,7 @@ public class EliminationQuestGenerator( // Generate a body part, make sure we ref the body part difficulty so it can be adjusted var bodyPartsToClient = new List(); var bodyPartDifficulty = 0d; - var generateBodyParts = randomUtil.GetChance100( - generationData.EliminationConfig.BodyPartChance - ); + var generateBodyParts = randomUtil.GetChance100(generationData.EliminationConfig.BodyPartChance); if (generateBodyParts) { // draw the target body part and calculate the difficulty factor @@ -184,12 +162,7 @@ public class EliminationQuestGenerator( } // Draw a distance condition - var isDistanceRequirementAllowed = IsDistanceRequirementAllowed( - generationData, - botTypeToEliminate, - locationKey, - targetsConfig - ); + var isDistanceRequirementAllowed = IsDistanceRequirementAllowed(generationData, botTypeToEliminate, locationKey, targetsConfig); int? distance = null; var distanceDifficulty = 0; @@ -204,9 +177,7 @@ public class EliminationQuestGenerator( string? allowedWeaponsCategory = null; - var generateWeaponCategoryRequirement = randomUtil.GetChance100( - generationData.EliminationConfig.WeaponCategoryRequirementChance - ); + var generateWeaponCategoryRequirement = randomUtil.GetChance100(generationData.EliminationConfig.WeaponCategoryRequirementChance); // Generate a weapon category requirement if (generateWeaponCategoryRequirement) @@ -217,9 +188,7 @@ public class EliminationQuestGenerator( // Only allow a specific weapon requirement if a weapon category was not chosen MongoId? allowedWeapon = null; - var generateWeaponRequirement = randomUtil.GetChance100( - generationData.EliminationConfig.WeaponRequirementChance - ); + var generateWeaponRequirement = randomUtil.GetChance100(generationData.EliminationConfig.WeaponRequirementChance); // Generate a weapon requirement if (!generateWeaponCategoryRequirement && generateWeaponRequirement) @@ -228,11 +197,7 @@ public class EliminationQuestGenerator( } // Draw how many npm kills are required - var desiredKillCount = GetEliminationKillCount( - botTypeToEliminate, - targetsConfig, - generationData.EliminationConfig - ); + var desiredKillCount = GetEliminationKillCount(botTypeToEliminate, targetsConfig, generationData.EliminationConfig); var killDifficulty = desiredKillCount; @@ -261,12 +226,7 @@ public class EliminationQuestGenerator( if (quest is null) { - logger.Error( - localisationService.GetText( - "repeatable-quest_generation_failed_no_template", - "elimination" - ) - ); + logger.Error(localisationService.GetText("repeatable-quest_generation_failed_no_template", "elimination")); return null; } @@ -285,19 +245,11 @@ public class EliminationQuestGenerator( if (locationKey != "any") { var locationId = Enum.Parse(locationKey); - availableForFinishCondition.Counter.Conditions.Add( - GenerateEliminationLocation(generationData.LocationsConfig[locationId]) - ); + availableForFinishCondition.Counter.Conditions.Add(GenerateEliminationLocation(generationData.LocationsConfig[locationId])); } availableForFinishCondition.Counter.Conditions.Add( - GenerateEliminationCondition( - botTypeToEliminate, - bodyPartsToClient, - distance, - allowedWeapon, - allowedWeaponsCategory - ) + GenerateEliminationCondition(botTypeToEliminate, bodyPartsToClient, distance, allowedWeapon, allowedWeaponsCategory) ); availableForFinishCondition.Value = desiredKillCount; availableForFinishCondition.Id = new MongoId(); @@ -316,15 +268,9 @@ public class EliminationQuestGenerator( return quest; } - protected EliminationQuestGenerationData? GetGenerationData( - RepeatableQuestConfig repeatableConfig, - int pmcLevel - ) + protected EliminationQuestGenerationData? GetGenerationData(RepeatableQuestConfig repeatableConfig, int pmcLevel) { - var eliminationConfig = repeatableQuestHelper.GetEliminationConfigByPmcLevel( - pmcLevel, - repeatableConfig - ); + var eliminationConfig = repeatableQuestHelper.GetEliminationConfigByPmcLevel(pmcLevel, repeatableConfig); if (eliminationConfig is null) { @@ -334,22 +280,13 @@ public class EliminationQuestGenerator( var locationsConfig = repeatableConfig.Locations; - var targetsConfig = new ProbabilityObjectArray( - cloner, - eliminationConfig.Targets - ); - var bodyPartsConfig = new ProbabilityObjectArray>( - cloner, - eliminationConfig.BodyParts - ); + var targetsConfig = new ProbabilityObjectArray(cloner, eliminationConfig.Targets); + var bodyPartsConfig = new ProbabilityObjectArray>(cloner, eliminationConfig.BodyParts); var weaponCategoryRequirementConfig = new ProbabilityObjectArray>( cloner, eliminationConfig.WeaponCategoryRequirements ); - var weaponRequirementConfig = new ProbabilityObjectArray>( - cloner, - eliminationConfig.WeaponRequirements - ); + var weaponRequirementConfig = new ProbabilityObjectArray>(cloner, eliminationConfig.WeaponRequirements); return new EliminationQuestGenerationData( eliminationConfig, @@ -374,9 +311,7 @@ public class EliminationQuestGenerator( { var targetPool = questTypePool.Pool.Elimination; - var targetsConfig = generationData.TargetsConfig.Filter(x => - targetPool.Targets.ContainsKey(x.Key) - ); + var targetsConfig = generationData.TargetsConfig.Filter(x => targetPool.Targets.ContainsKey(x.Key)); if (targetsConfig.Count != 0 && !targetsConfig.All(x => x.Data?.IsBoss ?? false)) { @@ -407,9 +342,7 @@ public class EliminationQuestGenerator( out string? locationKey ) { - var useSpecificLocation = randomUtil.GetChance100( - generationData.EliminationConfig.SpecificLocationChance - ); + var useSpecificLocation = randomUtil.GetChance100(generationData.EliminationConfig.SpecificLocationChance); switch (useSpecificLocation) { @@ -432,11 +365,7 @@ public class EliminationQuestGenerator( if (locations.Count == 0) { // Never should reach this if everything works out - logger.Error( - localisationService.GetText( - "quest-repeatable_elimination_generation_failed_please_report" - ) - ); + logger.Error(localisationService.GetText("quest-repeatable_elimination_generation_failed_please_report")); locationKey = null; return false; @@ -459,9 +388,7 @@ public class EliminationQuestGenerator( var tmpKey = locationKey; // Filter locations bot can be killed on to just those not chosen by key - possibleLocationPool.Locations = possibleLocationPool - .Locations?.Where(location => location != tmpKey) - .ToList(); + possibleLocationPool.Locations = possibleLocationPool.Locations?.Where(location => location != tmpKey).ToList(); // None left after filtering if (possibleLocationPool.Locations?.Count is null or 0) @@ -480,10 +407,7 @@ public class EliminationQuestGenerator( /// Generation data /// BodyPartDifficulty to modify based on selection /// List of selected body parts - protected List GenerateBodyParts( - EliminationQuestGenerationData generationData, - ref double bodyPartDifficulty - ) + protected List GenerateBodyParts(EliminationQuestGenerationData generationData, ref double bodyPartDifficulty) { // if we add a bodyPart condition, we draw randomly one or two parts // each bodyPart of the BODYPARTS ProbabilityObjectArray includes the string(s) @@ -533,9 +457,7 @@ public class EliminationQuestGenerator( ) { // This location is can be chosen for a distance requirement - var whitelisted = !generationData.EliminationConfig.DistLocationBlacklist.Contains( - locationKey - ); + var whitelisted = !generationData.EliminationConfig.DistLocationBlacklist.Contains(locationKey); // We're not whitelisted, exit early to avoid doing a roll for no reason if (!whitelisted) @@ -544,9 +466,7 @@ public class EliminationQuestGenerator( } // Are we allowed a distance condition by chance? - var isAllowedByChance = randomUtil.GetChance100( - generationData.EliminationConfig.DistanceProbability - ); + var isAllowedByChance = randomUtil.GetChance100(generationData.EliminationConfig.DistanceProbability); // Not allowed by chance, return early. // We now just assume we rolled this condition and don't take it into account anymore. @@ -567,25 +487,15 @@ public class EliminationQuestGenerator( .GetDictionary() .Select(x => x.Value) .Where(location => location.Base?.Id != null) - .Select(location => new - { - location.Base.Id, - BossSpawn = location.Base.BossLocationSpawn, - }); + .Select(location => new { location.Base.Id, BossSpawn = location.Base.BossLocationSpawn }); // filter for the current boss to spawn on map var thisBossSpawns = bossSpawns - .Select(x => new - { - x.Id, - BossSpawn = x.BossSpawn.Where(e => e.BossName == botTypeToEliminate), - }) + .Select(x => new { x.Id, BossSpawn = x.BossSpawn.Where(e => e.BossName == botTypeToEliminate) }) .Where(x => x.BossSpawn.Any()); // remove blacklisted locations - var allowedSpawns = thisBossSpawns.Where(x => - !generationData.EliminationConfig.DistLocationBlacklist.Contains(x.Id) - ); + var allowedSpawns = thisBossSpawns.Where(x => !generationData.EliminationConfig.DistLocationBlacklist.Contains(x.Id)); // if the boss spawns on non-blacklisted locations and the current location is allowed, // we can generate a distance kill requirement @@ -603,19 +513,13 @@ public class EliminationQuestGenerator( var distance = (int) Math.Floor( Math.Abs(randomUtil.Random.NextDouble() - randomUtil.Random.NextDouble()) - * ( - 1 - + generationData.EliminationConfig.MaxDistance - - generationData.EliminationConfig.MinDistance - ) + * (1 + generationData.EliminationConfig.MaxDistance - generationData.EliminationConfig.MinDistance) + generationData.EliminationConfig.MinDistance ); distance = (int)Math.Ceiling((decimal)(distance / 5d)) * 5; - var distanceDifficulty = (int)( - MaxDistDifficulty * distance / generationData.EliminationConfig.MaxDistance - ); + var distanceDifficulty = (int)(MaxDistDifficulty * distance / generationData.EliminationConfig.MaxDistance); return (distance, distanceDifficulty); } @@ -626,10 +530,7 @@ public class EliminationQuestGenerator( /// Generation data /// Distance to generate it for, pass null if not required /// Weapon requirement category selected - protected string? GenerateWeaponCategoryRequirement( - EliminationQuestGenerationData generationData, - int? distance - ) + protected string? GenerateWeaponCategoryRequirement(EliminationQuestGenerationData generationData, int? distance) { switch (distance) { @@ -639,9 +540,7 @@ public class EliminationQuestGenerator( HashSet weaponTypeBlacklist = ["Shotgun", "Pistol"]; // Filter out close range weapons from long distance requirement - generationData.WeaponCategoryRequirementConfig.RemoveAll(category => - weaponTypeBlacklist.Contains(category.Key) - ); + generationData.WeaponCategoryRequirementConfig.RemoveAll(category => weaponTypeBlacklist.Contains(category.Key)); break; } // Filter out long range weapons from close distance requirement @@ -650,9 +549,7 @@ public class EliminationQuestGenerator( HashSet weaponTypeBlacklist = ["MarksmanRifle", "DMR"]; // Filter out far range weapons from close distance requirement - generationData.WeaponCategoryRequirementConfig.RemoveAll(category => - weaponTypeBlacklist.Contains(category.Key) - ); + generationData.WeaponCategoryRequirementConfig.RemoveAll(category => weaponTypeBlacklist.Contains(category.Key)); break; } } @@ -669,20 +566,14 @@ public class EliminationQuestGenerator( /// /// Generation data /// Weapon to use - protected MongoId GenerateSpecificWeaponRequirement( - EliminationQuestGenerationData generationData - ) + protected MongoId GenerateSpecificWeaponRequirement(EliminationQuestGenerationData generationData) { var weaponRequirement = generationData.WeaponRequirementConfig.Draw(1, false); - var specificAllowedWeaponCategory = generationData.WeaponRequirementConfig.Data( - weaponRequirement[0] - ); + var specificAllowedWeaponCategory = generationData.WeaponRequirementConfig.Data(weaponRequirement[0]); if (specificAllowedWeaponCategory?[0] is null) { - logger.Error( - localisationService.GetText("repeatable-elimination-specific-weapon-null") - ); + logger.Error(localisationService.GetText("repeatable-elimination-specific-weapon-null")); return MongoId.Empty(); } @@ -706,30 +597,18 @@ public class EliminationQuestGenerator( { if (targetsConfig.Data(targetKey)?.IsBoss ?? false) { - return randomUtil.RandInt( - eliminationConfig.MinBossKills, - eliminationConfig.MaxBossKills + 1 - ); + return randomUtil.RandInt(eliminationConfig.MinBossKills, eliminationConfig.MaxBossKills + 1); } if (targetsConfig.Data(targetKey)?.IsPmc ?? false) { - return randomUtil.RandInt( - eliminationConfig.MinPmcKills, - eliminationConfig.MaxPmcKills + 1 - ); + return randomUtil.RandInt(eliminationConfig.MinPmcKills, eliminationConfig.MaxPmcKills + 1); } return randomUtil.RandInt(eliminationConfig.MinKills, eliminationConfig.MaxKills + 1); } - protected double DifficultyWeighing( - double target, - double bodyPart, - int dist, - int kill, - int weaponRequirement - ) + protected double DifficultyWeighing(double target, double bodyPart, int dist, int kill, int weaponRequirement) { return Math.Sqrt(Math.Sqrt(target) + bodyPart + dist + weaponRequirement) * kill; } @@ -796,11 +675,7 @@ public class EliminationQuestGenerator( // Don't allow distance + melee requirement if (distance is not null && allowedWeaponCategory != "5b5f7a0886f77409407a7f96") { - killConditionProps.Distance = new CounterConditionDistance - { - CompareMethod = ">=", - Value = distance.Value, - }; + killConditionProps.Distance = new CounterConditionDistance { CompareMethod = ">=", Value = distance.Value }; } // Has specific weapon requirement diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs index e3996b76..1ea5ae8b 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/ExplorationQuestGenerator.cs @@ -54,20 +54,9 @@ public class ExplorationQuestGenerator( var explorationConfig = repeatableConfig.QuestConfig.Exploration; // Try and get a location to generate for - if ( - !TryGetLocationInfo( - repeatableConfig, - explorationConfig, - questTypePool, - out var locationInfo - ) || locationInfo is null - ) + if (!TryGetLocationInfo(repeatableConfig, explorationConfig, questTypePool, out var locationInfo) || locationInfo is null) { - logger.Warning( - localisationService.GetText( - "repeatable-no_location_found_for_exploration_quest_generation" - ) - ); + logger.Warning(localisationService.GetText("repeatable-no_location_found_for_exploration_quest_generation")); return null; } @@ -82,12 +71,7 @@ public class ExplorationQuestGenerator( if (quest is null) { - logger.Error( - localisationService.GetText( - "repeatable-quest_generation_failed_no_template", - "exploration" - ) - ); + logger.Error(localisationService.GetText("repeatable-quest_generation_failed_no_template", "exploration")); return null; } @@ -95,45 +79,24 @@ public class ExplorationQuestGenerator( if (!TryGenerateAvailableForFinish(quest, locationInfo)) { logger.Error( - localisationService.GetText( - "repeatable-available_for_finish_condition_failed_to_generate", - locationInfo.LocationName - ) + localisationService.GetText("repeatable-available_for_finish_condition_failed_to_generate", locationInfo.LocationName) ); return null; } // If we require a specific extract requirement, generate it - if ( - locationInfo.RequiresSpecificExtract - && !TryGenerateSpecificExtractRequirement(quest, repeatableConfig, locationInfo) - ) + if (locationInfo.RequiresSpecificExtract && !TryGenerateSpecificExtractRequirement(quest, repeatableConfig, locationInfo)) { logger.Error( - localisationService.GetText( - "repeatable-specific_extract_condition_failed_to_generate", - locationInfo.LocationName - ) + localisationService.GetText("repeatable-specific_extract_condition_failed_to_generate", locationInfo.LocationName) ); return null; } // Difficulty for exploration goes from 1 extract to maxExtracts // Difficulty for reward goes from 0.2...1 -> map - var difficulty = mathUtil.MapToRange( - locationInfo.NumOfExtractsRequired, - 1, - explorationConfig.MaximumExtracts, - 0.2, - 1 - ); - quest.Rewards = repeatableQuestRewardGenerator.GenerateReward( - pmcLevel, - difficulty, - traderId, - repeatableConfig, - explorationConfig - ); + var difficulty = mathUtil.MapToRange(locationInfo.NumOfExtractsRequired, 1, explorationConfig.MaximumExtracts, 0.2, 1); + quest.Rewards = repeatableQuestRewardGenerator.GenerateReward(pmcLevel, difficulty, traderId, repeatableConfig, explorationConfig); return quest; } @@ -168,18 +131,11 @@ public class ExplorationQuestGenerator( // Make the location info object var locationTarget = pool.Pool!.Exploration!.Locations![locationKey]; - var requiresSpecificExtract = randomUtil.GetChance100( - repeatableConfig.QuestConfig.Exploration.SpecificExits.Chance - ); + var requiresSpecificExtract = randomUtil.GetChance100(repeatableConfig.QuestConfig.Exploration.SpecificExits.Chance); var numExtracts = GetNumberOfExits(explorationConfig, requiresSpecificExtract); - locationInfo = new LocationInfo( - locationKey, - locationTarget.ToList(), - requiresSpecificExtract, - numExtracts - ); + locationInfo = new LocationInfo(locationKey, locationTarget.ToList(), requiresSpecificExtract, numExtracts); // Remove the location from the available pool pool.Pool.Exploration.Locations.Remove(locationKey); @@ -196,9 +152,7 @@ public class ExplorationQuestGenerator( protected int GetNumberOfExits(Exploration config, bool requiresSpecificExtract) { // Different max extract count when specific extract needed - var exitTimesMax = requiresSpecificExtract - ? config.MaximumExtractsWithSpecificExit - : config.MaximumExtracts + 1; + var exitTimesMax = requiresSpecificExtract ? config.MaximumExtractsWithSpecificExit : config.MaximumExtracts + 1; return randomUtil.RandInt(1, exitTimesMax); } @@ -209,10 +163,7 @@ public class ExplorationQuestGenerator( /// Map id (e.g. factory4_day) /// Pmc/Scav /// List of Exit objects - protected IEnumerable? GetLocationExitsForSide( - string locationKey, - PlayerGroup playerGroup - ) + protected IEnumerable? GetLocationExitsForSide(string locationKey, PlayerGroup playerGroup) { var mapExtracts = databaseService.GetLocation(locationKey.ToLowerInvariant())?.AllExtracts; @@ -235,18 +186,11 @@ public class ExplorationQuestGenerator( } // Lookup the location - var location = repeatableQuestHelper.GetQuestLocationByMapId( - locationInfo.LocationName.ToString() - ); + var location = repeatableQuestHelper.GetQuestLocationByMapId(locationInfo.LocationName.ToString()); if (location is null) { - logger.Error( - localisationService.GetText( - "repeatable-unable_to_find_location_id_for_location_name", - locationInfo.LocationName - ) - ); + logger.Error(localisationService.GetText("repeatable-unable_to_find_location_id_for_location_name", locationInfo.LocationName)); return false; } @@ -267,11 +211,7 @@ public class ExplorationQuestGenerator( }; quest.Conditions.AvailableForFinish![0].Counter!.Id = new MongoId(); - quest.Conditions.AvailableForFinish![0].Counter!.Conditions = - [ - exitStatusCondition, - locationCondition, - ]; + quest.Conditions.AvailableForFinish![0].Counter!.Conditions = [exitStatusCondition, locationCondition]; quest.Conditions.AvailableForFinish[0].Value = locationInfo.NumOfExtractsRequired; quest.Conditions.AvailableForFinish[0].Id = new MongoId(); @@ -294,19 +234,11 @@ public class ExplorationQuestGenerator( ) { // Fetch extracts for the requested side - var mapExits = GetLocationExitsForSide( - locationInfo.LocationName.ToString(), - repeatableConfig.Side - ); + var mapExits = GetLocationExitsForSide(locationInfo.LocationName.ToString(), repeatableConfig.Side); if (mapExits is null) { - logger.Error( - localisationService.GetText( - "repeatable-unable_to_find_exits_for_location", - locationInfo.LocationName - ) - ); + logger.Error(localisationService.GetText("repeatable-unable_to_find_exits_for_location", locationInfo.LocationName)); return false; } @@ -315,19 +247,12 @@ public class ExplorationQuestGenerator( // Exclude exits with a requirement to leave (e.g. car extracts) var possibleExits = exitPool.Where(exit => - repeatableConfig.QuestConfig.Exploration.SpecificExits.PassageRequirementWhitelist.Contains( - "PassageRequirement" - ) + repeatableConfig.QuestConfig.Exploration.SpecificExits.PassageRequirementWhitelist.Contains("PassageRequirement") ); if (!possibleExits.Any()) { - logger.Error( - localisationService.GetText( - "repeatable-unable_choose_exit_pool_empty", - locationInfo.LocationName - ) - ); + logger.Error(localisationService.GetText("repeatable-unable_choose_exit_pool_empty", locationInfo.LocationName)); return false; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs index b0ba4fd1..7bbf3cad 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/PickupQuestGenerator.cs @@ -42,9 +42,7 @@ public class PickupQuestGenerator( sessionId ); - var itemTypeToFetchWithCount = randomUtil.GetArrayValue( - pickupConfig.ItemTypeToFetchWithMaxCount - ); + var itemTypeToFetchWithCount = randomUtil.GetArrayValue(pickupConfig.ItemTypeToFetchWithMaxCount); var itemCountToFetch = randomUtil.RandInt( itemTypeToFetchWithCount.MinimumPickupCount.Value, @@ -54,34 +52,22 @@ public class PickupQuestGenerator( // var locationKey: string = this.randomUtil.drawRandomFromDict(questTypePool.pool.Pickup.locations)[0]; // var locationTarget = questTypePool.pool.Pickup.locations[locationKey]; - var findCondition = quest.Conditions.AvailableForFinish.FirstOrDefault(x => - x.ConditionType == "FindItem" - ); + var findCondition = quest.Conditions.AvailableForFinish.FirstOrDefault(x => x.ConditionType == "FindItem"); findCondition.Target = new ListOrT([itemTypeToFetchWithCount.ItemType], null); findCondition.Value = itemCountToFetch; - var counterCreatorCondition = quest.Conditions.AvailableForFinish.FirstOrDefault(x => - x.ConditionType == "CounterCreator" - ); + var counterCreatorCondition = quest.Conditions.AvailableForFinish.FirstOrDefault(x => x.ConditionType == "CounterCreator"); // var locationCondition = counterCreatorCondition._props.counter.conditions.find(x => x._parent === "Location"); // (locationCondition._props as ILocationConditionProps).target = [...locationTarget]; - var equipmentCondition = counterCreatorCondition.Counter.Conditions.FirstOrDefault(x => - x.ConditionType == "Equipment" - ); + var equipmentCondition = counterCreatorCondition.Counter.Conditions.FirstOrDefault(x => x.ConditionType == "Equipment"); equipmentCondition.EquipmentInclusive = [ [itemTypeToFetchWithCount.ItemType], ]; // Add rewards - quest.Rewards = repeatableQuestRewardGenerator.GenerateReward( - pmcLevel, - 1, - traderId, - repeatableConfig, - pickupConfig - ); + quest.Rewards = repeatableQuestRewardGenerator.GenerateReward(pmcLevel, 1, traderId, repeatableConfig, pickupConfig); return quest; } diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs index 205598d8..abe33ab0 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGeneration/RepeatableQuestRewardGenerator.cs @@ -68,11 +68,7 @@ public class RepeatableQuestRewardGenerator( ) { // Get vars to configure rewards with - var rewardParams = GetQuestRewardValues( - repeatableConfig.RewardScaling, - difficulty, - pmcLevel - ); + var rewardParams = GetQuestRewardValues(repeatableConfig.RewardScaling, difficulty, pmcLevel); // Get budget to spend on item rewards (copy of raw roubles given) var itemRewardBudget = rewardParams.RewardRoubles; @@ -112,13 +108,12 @@ public class RepeatableQuestRewardGenerator( rewardIndex++; // Add GP coin reward - rewards["Success"] - .Add(GenerateItemReward(Money.GP, rewardParams.GpCoinRewardCount, rewardIndex)); + rewards["Success"].Add(GenerateItemReward(Money.GP, rewardParams.GpCoinRewardCount, rewardIndex)); rewardIndex++; // Add preset weapon to reward if checks pass - var traderWhitelistDetails = repeatableConfig.TraderWhitelist.FirstOrDefault( - traderWhitelist => traderWhitelist.TraderId == traderId + var traderWhitelistDetails = repeatableConfig.TraderWhitelist.FirstOrDefault(traderWhitelist => + traderWhitelist.TraderId == traderId ); if (traderWhitelistDetails is null) @@ -127,10 +122,7 @@ public class RepeatableQuestRewardGenerator( return null; } - if ( - traderWhitelistDetails.RewardCanBeWeapon - && randomUtil.GetChance100(traderWhitelistDetails.WeaponRewardChancePercent) - ) + if (traderWhitelistDetails.RewardCanBeWeapon && randomUtil.GetChance100(traderWhitelistDetails.WeaponRewardChancePercent)) { var chosenWeapon = GetRandomWeaponPresetWithinBudget(itemRewardBudget, rewardIndex); if (chosenWeapon is not null) @@ -143,17 +135,11 @@ public class RepeatableQuestRewardGenerator( } } - var inBudgetRewardItemPool = ChooseRewardItemsWithinBudget( - repeatableConfig, - itemRewardBudget, - traderId - ); + var inBudgetRewardItemPool = ChooseRewardItemsWithinBudget(repeatableConfig, itemRewardBudget, traderId); if (rewardTplBlacklist is not null) { // Filter reward pool of items from blacklist, only use if there's at least 1 item remaining - var filteredRewardItemPool = inBudgetRewardItemPool - .Where(item => !rewardTplBlacklist.Contains(item.Id)) - .ToList(); + var filteredRewardItemPool = inBudgetRewardItemPool.Where(item => !rewardTplBlacklist.Contains(item.Id)).ToList(); if (filteredRewardItemPool.Count != 0) { @@ -180,8 +166,7 @@ public class RepeatableQuestRewardGenerator( // Add item rewards foreach (var itemReward in itemsToReward) { - rewards["Success"] - .Add(GenerateItemReward(itemReward.Key.Id, itemReward.Value, rewardIndex)); + rewards["Success"].Add(GenerateItemReward(itemReward.Key.Id, itemReward.Value, rewardIndex)); rewardIndex++; } } @@ -205,9 +190,7 @@ public class RepeatableQuestRewardGenerator( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Adding: {rewardParams.RewardReputation} {traderId.ToString()} trader reputation reward" - ); + logger.Debug($"Adding: {rewardParams.RewardReputation} {traderId.ToString()} trader reputation reward"); } } @@ -230,20 +213,14 @@ public class RepeatableQuestRewardGenerator( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Adding {rewardParams.SkillPointReward} skill points to {targetSkill}" - ); + logger.Debug($"Adding {rewardParams.SkillPointReward} skill points to {targetSkill}"); } } return rewards; } - protected QuestRewardValues GetQuestRewardValues( - RewardScaling rewardScaling, - double effectiveDifficulty, - int pmcLevel - ) + protected QuestRewardValues GetQuestRewardValues(RewardScaling rewardScaling, double effectiveDifficulty, int pmcLevel) { // difficulty could go from 0.2 ... -> for lowest difficulty receive 0.2*nominal reward var levelsConfig = rewardScaling.Levels; @@ -260,35 +237,11 @@ public class RepeatableQuestRewardGenerator( { SkillPointReward = mathUtil.Interp1(pmcLevel, levelsConfig, skillPointRewardConfig), SkillRewardChance = mathUtil.Interp1(pmcLevel, levelsConfig, skillRewardChanceConfig), - RewardReputation = GetRewardRep( - effectiveDifficulty, - pmcLevel, - levelsConfig, - reputationConfig, - rewardSpreadConfig - ), + RewardReputation = GetRewardRep(effectiveDifficulty, pmcLevel, levelsConfig, reputationConfig, rewardSpreadConfig), RewardNumItems = GetRewardNumItems(pmcLevel, levelsConfig, itemsConfig), - RewardRoubles = GetRewardRoubles( - effectiveDifficulty, - pmcLevel, - levelsConfig, - roublesConfig, - rewardSpreadConfig - ), - GpCoinRewardCount = GetGpCoinRewardCount( - effectiveDifficulty, - pmcLevel, - levelsConfig, - gpCoinConfig, - rewardSpreadConfig - ), - RewardXP = GetRewardXp( - effectiveDifficulty, - pmcLevel, - levelsConfig, - xpConfig, - rewardSpreadConfig - ), + RewardRoubles = GetRewardRoubles(effectiveDifficulty, pmcLevel, levelsConfig, roublesConfig, rewardSpreadConfig), + GpCoinRewardCount = GetGpCoinRewardCount(effectiveDifficulty, pmcLevel, levelsConfig, gpCoinConfig, rewardSpreadConfig), + RewardXP = GetRewardXp(effectiveDifficulty, pmcLevel, levelsConfig, xpConfig, rewardSpreadConfig), }; } @@ -336,11 +289,7 @@ public class RepeatableQuestRewardGenerator( return Math.Round(multiplier) / 100; } - protected int GetRewardNumItems( - int pmcLevel, - List levelsConfig, - List itemsConfig - ) + protected int GetRewardNumItems(int pmcLevel, List levelsConfig, List itemsConfig) { var interpolatedNumItems = mathUtil.Interp1(pmcLevel, levelsConfig, itemsConfig); @@ -395,21 +344,14 @@ public class RepeatableQuestRewardGenerator( if (itemHelper.IsOfBaseclass(chosenItemFromPool.Id, BaseClasses.AMMO)) { // Don't reward ammo that stacks to less than what's allowed in config - if ( - chosenItemFromPool.Properties.StackMaxSize - < repeatableConfig.RewardAmmoStackMinSize - ) + if (chosenItemFromPool.Properties.StackMaxSize < repeatableConfig.RewardAmmoStackMinSize) { i--; continue; } // Choose the smallest value between budget, fitting size and stack max - rewardItemStackCount = CalculateAmmoStackSizeThatFitsBudget( - chosenItemFromPool, - itemRewardBudget, - maxItemCount - ); + rewardItemStackCount = CalculateAmmoStackSizeThatFitsBudget(chosenItemFromPool, itemRewardBudget, maxItemCount); } // 25% chance to double, triple or quadruple reward stack @@ -425,9 +367,7 @@ public class RepeatableQuestRewardGenerator( var calculatedItemRewardBudget = itemRewardBudget - rewardItemStackCount * itemCost; if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Added item: {chosenItemFromPool.Id} with price: {rewardItemStackCount * itemCost}" - ); + logger.Debug($"Added item: {chosenItemFromPool.Id} with price: {rewardItemStackCount * itemCost}"); } // If we still have budget narrow down possible items @@ -444,9 +384,7 @@ public class RepeatableQuestRewardGenerator( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Reward pool empty with: {calculatedItemRewardBudget} roubles of budget remaining" - ); + logger.Debug($"Reward pool empty with: {calculatedItemRewardBudget} roubles of budget remaining"); } } } @@ -466,11 +404,7 @@ public class RepeatableQuestRewardGenerator( /// Rouble budget /// Count of rewarded items /// Count that fits budget (min 1) - protected int CalculateAmmoStackSizeThatFitsBudget( - TemplateItem itemSelected, - double roublesBudget, - int rewardNumItems - ) + protected int CalculateAmmoStackSizeThatFitsBudget(TemplateItem itemSelected, double roublesBudget, int rewardNumItems) { // Calculate budget per reward item var stackRoubleBudget = roublesBudget / rewardNumItems; @@ -487,18 +421,11 @@ public class RepeatableQuestRewardGenerator( return (int)Math.Clamp(stackSizeThatFitsBudget, 1, stackMaxCount); } - protected bool CanIncreaseRewardItemStackSize( - TemplateItem item, - int maxRoublePriceToStack, - int randomChanceToPass = 100 - ) + protected bool CanIncreaseRewardItemStackSize(TemplateItem item, int maxRoublePriceToStack, int randomChanceToPass = 100) { var isEligibleForStackSizeIncrease = presetHelper.GetDefaultPresetOrItemPrice(item.Id) < maxRoublePriceToStack - && !itemHelper.IsOfBaseclasses( - item.Id, - [BaseClasses.WEAPON, BaseClasses.ARMORED_EQUIPMENT, BaseClasses.AMMO] - ) + && !itemHelper.IsOfBaseclasses(item.Id, [BaseClasses.WEAPON, BaseClasses.ARMORED_EQUIPMENT, BaseClasses.AMMO]) && !itemHelper.ItemRequiresSoftInserts(item.Id); return isEligibleForStackSizeIncrease && randomUtil.GetChance100(randomChanceToPass); @@ -548,25 +475,14 @@ public class RepeatableQuestRewardGenerator( var rewardableItemPool = GetRewardableItems(repeatableConfig, traderId); var minPrice = Math.Min(25000, 0.5 * roublesBudget.Value); - var rewardableItemPoolWithinBudget = FilterRewardPoolWithinBudget( - rewardableItemPool, - roublesBudget.Value, - minPrice - ); + var rewardableItemPoolWithinBudget = FilterRewardPoolWithinBudget(rewardableItemPool, roublesBudget.Value, minPrice); if (rewardableItemPoolWithinBudget.Count == 0) { - logger.Warning( - localisationService.GetText( - "repeatable-no_reward_item_found_in_price_range", - new { minPrice, roublesBudget } - ) - ); + logger.Warning(localisationService.GetText("repeatable-no_reward_item_found_in_price_range", new { minPrice, roublesBudget })); // In case we don't find any items in the price range - rewardableItemPoolWithinBudget = rewardableItemPool - .Where(x => itemHelper.GetItemPrice(x.Id) < roublesBudget) - .ToList(); + rewardableItemPoolWithinBudget = rewardableItemPool.Where(x => itemHelper.GetItemPrice(x.Id) < roublesBudget).ToList(); } return rewardableItemPoolWithinBudget; @@ -579,11 +495,7 @@ public class RepeatableQuestRewardGenerator( /// The budget remaining for rewards /// The minimum priced item to include /// List of Items - protected List FilterRewardPoolWithinBudget( - List rewardItems, - double roublesBudget, - double minPrice - ) + protected List FilterRewardPoolWithinBudget(List rewardItems, double roublesBudget, double minPrice) { return rewardItems .Where(item => @@ -600,17 +512,10 @@ public class RepeatableQuestRewardGenerator( /// Budget in roubles /// Index of the reward /// Dictionary of the reward and it's price, can return null. - protected KeyValuePair? GetRandomWeaponPresetWithinBudget( - double roublesBudget, - int rewardIndex - ) + protected KeyValuePair? GetRandomWeaponPresetWithinBudget(double roublesBudget, int rewardIndex) { // Add a random default preset weapon as reward - var defaultPresetPool = new ExhaustableArray( - presetHelper.GetDefaultWeaponPresets().Values.ToList(), - randomUtil, - cloner - ); + var defaultPresetPool = new ExhaustableArray(presetHelper.GetDefaultWeaponPresets().Values.ToList(), randomUtil, cloner); while (defaultPresetPool.HasValues()) { @@ -631,12 +536,7 @@ public class RepeatableQuestRewardGenerator( var chosenPreset = cloner.Clone(randomPreset); return new KeyValuePair( - GeneratePresetReward( - chosenPreset.Encyclopedia.Value, - 1, - rewardIndex, - chosenPreset.Items - ), + GeneratePresetReward(chosenPreset.Encyclopedia.Value, 1, rewardIndex, chosenPreset.Items), presetPrice ); } @@ -654,13 +554,7 @@ public class RepeatableQuestRewardGenerator( /// Optional list of preset items /// If generated Item is found in raid, default True /// Object of "Reward"-item-type - protected Reward GeneratePresetReward( - MongoId tpl, - int count, - int index, - List? preset, - bool foundInRaid = true - ) + protected Reward GeneratePresetReward(MongoId tpl, int count, int index, List? preset, bool foundInRaid = true) { var id = new MongoId(); var questRewardItem = new Reward @@ -704,12 +598,7 @@ public class RepeatableQuestRewardGenerator( /// All rewards will be appended to a list, for unknown reasons the client wants the index /// If generated Item is found in raid, default True /// Object of "Reward"-item-type - protected Reward GenerateItemReward( - MongoId tpl, - double count, - int index, - bool foundInRaid = true - ) + protected Reward GenerateItemReward(MongoId tpl, double count, int index, bool foundInRaid = true) { var id = new MongoId(); var questRewardItem = new Reward @@ -742,16 +631,10 @@ public class RepeatableQuestRewardGenerator( { // Determine currency based on trader // PK and Fence use Euros, everyone else is Roubles - var currency = - traderId == Traders.PEACEKEEPER || traderId == Traders.FENCE - ? Money.EUROS - : Money.ROUBLES; + var currency = traderId == Traders.PEACEKEEPER || traderId == Traders.FENCE ? Money.EUROS : Money.ROUBLES; // Convert reward amount to Euros if necessary - var rewardAmountToGivePlayer = - currency == Money.EUROS - ? handbookHelper.FromRUB(rewardRoubles, Money.EUROS) - : rewardRoubles; + var rewardAmountToGivePlayer = currency == Money.EUROS ? handbookHelper.FromRUB(rewardRoubles, Money.EUROS) : rewardRoubles; // Get chosen currency + amount and return return GenerateItemReward(currency, rewardAmountToGivePlayer, rewardIndex, false); @@ -767,10 +650,7 @@ public class RepeatableQuestRewardGenerator( /// Config /// ID of trader who will give reward to player /// List of rewardable items [[_tpl, itemTemplate],...] - public List GetRewardableItems( - RepeatableQuestConfig repeatableQuestConfig, - MongoId traderId - ) + public List GetRewardableItems(RepeatableQuestConfig repeatableQuestConfig, MongoId traderId) { // Get an array of seasonal items that should not be shown right now as seasonal event is not active var seasonalItems = seasonalEventService.GetInactiveSeasonalEventItems(); @@ -793,9 +673,7 @@ public class RepeatableQuestRewardGenerator( return false; } - var traderWhitelist = repeatableQuestConfig.TraderWhitelist.FirstOrDefault(trader => - trader.TraderId == traderId - ); + var traderWhitelist = repeatableQuestConfig.TraderWhitelist.FirstOrDefault(trader => trader.TraderId == traderId); return IsValidRewardItem( itemTemplate.Id, diff --git a/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs index e8072f87..bea999d8 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/ScavCaseRewardGenerator.cs @@ -45,51 +45,25 @@ public class ScavCaseRewardGenerator( CacheDbItems(); // Get scavcase details from hideout/scavcase.json - var scavCaseDetails = databaseService - .GetHideout() - .Production.ScavRecipes.FirstOrDefault(r => r.Id == recipeId); + var scavCaseDetails = databaseService.GetHideout().Production.ScavRecipes.FirstOrDefault(r => r.Id == recipeId); var rewardItemCounts = GetScavCaseRewardCountsAndPrices(scavCaseDetails); // Get items that fit the price criteria as set by the scavCase config var commonPricedItems = GetFilteredItemsByPrice(_dbItemsCache, rewardItemCounts.Common); var rarePricedItems = GetFilteredItemsByPrice(_dbItemsCache, rewardItemCounts.Rare); - var superRarePricedItems = GetFilteredItemsByPrice( - _dbItemsCache, - rewardItemCounts.Superrare - ); + var superRarePricedItems = GetFilteredItemsByPrice(_dbItemsCache, rewardItemCounts.Superrare); // Get randomly picked items from each item collection, the count range of which is defined in hideout/scavcase.json - var randomlyPickedCommonRewards = PickRandomRewards( - commonPricedItems, - rewardItemCounts.Common, - RewardRarity.Common - ); + var randomlyPickedCommonRewards = PickRandomRewards(commonPricedItems, rewardItemCounts.Common, RewardRarity.Common); - var randomlyPickedRareRewards = PickRandomRewards( - rarePricedItems, - rewardItemCounts.Rare, - RewardRarity.Rare - ); + var randomlyPickedRareRewards = PickRandomRewards(rarePricedItems, rewardItemCounts.Rare, RewardRarity.Rare); - var randomlyPickedSuperRareRewards = PickRandomRewards( - superRarePricedItems, - rewardItemCounts.Superrare, - RewardRarity.SuperRare - ); + var randomlyPickedSuperRareRewards = PickRandomRewards(superRarePricedItems, rewardItemCounts.Superrare, RewardRarity.SuperRare); // Add randomised stack sizes to ammo and money rewards - var commonRewards = RandomiseContainerItemRewards( - randomlyPickedCommonRewards, - RewardRarity.Common - ); - var rareRewards = RandomiseContainerItemRewards( - randomlyPickedRareRewards, - RewardRarity.Rare - ); - var superRareRewards = RandomiseContainerItemRewards( - randomlyPickedSuperRareRewards, - RewardRarity.SuperRare - ); + var commonRewards = RandomiseContainerItemRewards(randomlyPickedCommonRewards, RewardRarity.Common); + var rareRewards = RandomiseContainerItemRewards(randomlyPickedRareRewards, RewardRarity.Rare); + var superRareRewards = RandomiseContainerItemRewards(randomlyPickedSuperRareRewards, RewardRarity.SuperRare); var result = commonRewards.Concat(rareRewards).Concat(superRareRewards); @@ -142,21 +116,13 @@ public class ScavCaseRewardGenerator( return false; } - if ( - !_scavCaseConfig.AllowBossItemsAsRewards - && itemFilterService.IsBossItem(item.Id) - ) + if (!_scavCaseConfig.AllowBossItemsAsRewards && itemFilterService.IsBossItem(item.Id)) { return false; } // Skip item if parent id is blacklisted - if ( - itemHelper.IsOfBaseclasses( - item.Id, - _scavCaseConfig.RewardItemParentBlacklist - ) - ) + if (itemHelper.IsOfBaseclasses(item.Id, _scavCaseConfig.RewardItemParentBlacklist)) { return false; } @@ -195,10 +161,7 @@ public class ScavCaseRewardGenerator( } // Skip item if item id is on blacklist - if ( - _scavCaseConfig.RewardItemBlacklist.Contains(item.Id) - || itemFilterService.IsItemBlacklisted(item.Id) - ) + if (_scavCaseConfig.RewardItemBlacklist.Contains(item.Id) || itemFilterService.IsItemBlacklisted(item.Id)) { return false; } @@ -209,10 +172,7 @@ public class ScavCaseRewardGenerator( return false; } - if ( - !_scavCaseConfig.AllowBossItemsAsRewards - && itemFilterService.IsBossItem(item.Id) - ) + if (!_scavCaseConfig.AllowBossItemsAsRewards && itemFilterService.IsBossItem(item.Id)) { return false; } @@ -242,11 +202,7 @@ public class ScavCaseRewardGenerator( /// how the rewards should be filtered down (by item count) /// Rarity of reward /// - protected List PickRandomRewards( - List items, - RewardCountAndPriceDetails itemFilters, - string rarity - ) + protected List PickRandomRewards(List items, RewardCountAndPriceDetails itemFilters, string rarity) { List result = []; @@ -327,10 +283,7 @@ public class ScavCaseRewardGenerator( // Is ammo handbook price between desired range var handbookPrice = ragfairPriceService.GetStaticPriceForItem(ammo.Id); if ( - _scavCaseConfig.AmmoRewards.AmmoRewardValueRangeRub.TryGetValue( - rarity, - out var matchingAmmoRewardForRarity - ) + _scavCaseConfig.AmmoRewards.AmmoRewardValueRangeRub.TryGetValue(rarity, out var matchingAmmoRewardForRarity) && handbookPrice >= matchingAmmoRewardForRarity.Min && handbookPrice <= matchingAmmoRewardForRarity.Max ) @@ -344,9 +297,7 @@ public class ScavCaseRewardGenerator( if (!possibleAmmoPool.Any()) { // Filtered pool is empty - logger.Warning( - localisationService.GetText("scavcase-no_cartridges_found_matching_price") - ); + logger.Warning(localisationService.GetText("scavcase-no_cartridges_found_matching_price")); } // Get a random ammo and return it @@ -360,10 +311,7 @@ public class ScavCaseRewardGenerator( /// items to convert /// The rarity desired ammo reward is for /// Product array - protected List> RandomiseContainerItemRewards( - IEnumerable rewardItems, - string rarity - ) + protected List> RandomiseContainerItemRewards(IEnumerable rewardItems, string rarity) { // Each array is an item + children List> result = []; @@ -393,9 +341,7 @@ public class ScavCaseRewardGenerator( var preset = presetHelper.GetDefaultPreset(rewardItemDb.Id); if (preset is null) { - logger.Warning( - $"No preset for item: {rewardItemDb.Id} {rewardItemDb.Name}, skipping" - ); + logger.Warning($"No preset for item: {rewardItemDb.Id} {rewardItemDb.Name}, skipping"); continue; } @@ -406,14 +352,9 @@ public class ScavCaseRewardGenerator( resultItem = presetAndMods; } - else if ( - itemHelper.IsOfBaseclasses(rewardItemDb.Id, [BaseClasses.AMMO, BaseClasses.MONEY]) - ) + else if (itemHelper.IsOfBaseclasses(rewardItemDb.Id, [BaseClasses.AMMO, BaseClasses.MONEY])) { - rootItem.Upd = new Upd - { - StackObjectsCount = GetRandomAmountRewardForScavCase(rewardItemDb, rarity), - }; + rootItem.Upd = new Upd { StackObjectsCount = GetRandomAmountRewardForScavCase(rewardItemDb, rarity) }; } result.Add(resultItem); @@ -427,19 +368,13 @@ public class ScavCaseRewardGenerator( /// all items from the items.json /// controls how the dbItems will be filtered and returned (handbook price) /// filtered dbItems array - protected List GetFilteredItemsByPrice( - List dbItems, - RewardCountAndPriceDetails itemFilters - ) + protected List GetFilteredItemsByPrice(List dbItems, RewardCountAndPriceDetails itemFilters) { return dbItems .Where(item => { var handbookPrice = ragfairPriceService.GetStaticPriceForItem(item.Id); - if ( - handbookPrice >= itemFilters.MinPriceRub - && handbookPrice <= itemFilters.MaxPriceRub - ) + if (handbookPrice >= itemFilters.MinPriceRub && handbookPrice <= itemFilters.MaxPriceRub) { return true; } @@ -454,9 +389,7 @@ public class ScavCaseRewardGenerator( /// /// production.json/scavRecipes object /// ScavCaseRewardCountsAndPrices object - protected ScavCaseRewardCountsAndPrices GetScavCaseRewardCountsAndPrices( - ScavRecipe scavCaseDetails - ) + protected ScavCaseRewardCountsAndPrices GetScavCaseRewardCountsAndPrices(ScavRecipe scavCaseDetails) { return new ScavCaseRewardCountsAndPrices { @@ -516,10 +449,7 @@ public class ScavCaseRewardGenerator( /// value to set stack count to protected int GetRandomisedAmmoRewardStackSize(TemplateItem itemToCalculate) { - return randomUtil.GetInt( - _scavCaseConfig.AmmoRewards.MinStackSize, - itemToCalculate.Properties.StackMaxSize ?? 0 - ); + return randomUtil.GetInt(_scavCaseConfig.AmmoRewards.MinStackSize, itemToCalculate.Properties.StackMaxSize ?? 0); } /// diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs index c5ecebaa..85362fe4 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/BarrelInventoryMagGen.cs @@ -6,10 +6,9 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] -public class BarrelInventoryMagGen( - RandomUtil randomUtil, - BotWeaponGeneratorHelper botWeaponGeneratorHelper -) : InventoryMagGen, IInventoryMagGen +public class BarrelInventoryMagGen(RandomUtil randomUtil, BotWeaponGeneratorHelper botWeaponGeneratorHelper) + : InventoryMagGen, + IInventoryMagGen { public int GetPriority() { diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs index f0418272..d723b04c 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/ExternalInventoryMagGen.cs @@ -44,9 +44,7 @@ public class ExternalInventoryMagGen( var defaultMagazineTpl = weapon.GetWeaponsDefaultMagazineTpl(); var isShotgun = itemHelper.IsOfBaseclass(weapon.Id, BaseClasses.SHOTGUN); - var randomizedMagazineCount = botWeaponGeneratorHelper.GetRandomizedMagazineCount( - inventoryMagGen.GetMagCount() - ); + var randomizedMagazineCount = botWeaponGeneratorHelper.GetRandomizedMagazineCount(inventoryMagGen.GetMagCount()); for (var i = 0; i < randomizedMagazineCount; i++) { var magazineWithAmmo = botWeaponGeneratorHelper.CreateMagazineWithAmmo( @@ -77,9 +75,7 @@ public class ExternalInventoryMagGen( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Failed {fitAttempts} times to add magazine {magazineTpl} to bot inventory, stopping" - ); + logger.Debug($"Failed {fitAttempts} times to add magazine {magazineTpl} to bot inventory, stopping"); } break; @@ -115,12 +111,7 @@ public class ExternalInventoryMagGen( magTemplate = itemHelper.GetItem(magazineTpl).Value; if (magTemplate is null) { - logger.Error( - serverLocalisationService.GetText( - "bot-unable_to_find_default_magazine_item", - magazineTpl - ) - ); + logger.Error(serverLocalisationService.GetText("bot-unable_to_find_default_magazine_item", magazineTpl)); break; } @@ -174,15 +165,10 @@ public class ExternalInventoryMagGen( /// Weapon to get mag for /// Blacklisted magazines /// Item of chosen magazine - public TemplateItem? GetRandomExternalMagazineForInternalMagazineGun( - MongoId weaponTpl, - HashSet magazineBlacklist - ) + public TemplateItem? GetRandomExternalMagazineForInternalMagazineGun(MongoId weaponTpl, HashSet magazineBlacklist) { // The mag Slot data for the weapon - var magSlot = itemHelper - .GetItem(weaponTpl) - .Value.Properties.Slots.FirstOrDefault(x => x.Name == "mod_magazine"); + var magSlot = itemHelper.GetItem(weaponTpl).Value.Properties.Slots.FirstOrDefault(x => x.Name == "mod_magazine"); if (magSlot is null) { return null; @@ -199,9 +185,7 @@ public class ExternalInventoryMagGen( } // Non-internal magazines that fit into the weapon - var externalMagazineOnlyPool = magazinePool.Where(x => - x.Properties.ReloadMagType != ReloadMode.InternalMagazine - ); + var externalMagazineOnlyPool = magazinePool.Where(x => x.Properties.ReloadMagType != ReloadMode.InternalMagazine); if (externalMagazineOnlyPool is null || !externalMagazineOnlyPool.Any()) { return null; diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs index bed0238e..c49003bf 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/InternalMagazineInventoryMagGen.cs @@ -5,9 +5,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] -public class InternalMagazineInventoryMagGen(BotWeaponGeneratorHelper botWeaponGeneratorHelper) - : InventoryMagGen, - IInventoryMagGen +public class InternalMagazineInventoryMagGen(BotWeaponGeneratorHelper botWeaponGeneratorHelper) : InventoryMagGen, IInventoryMagGen { public int GetPriority() { @@ -16,8 +14,7 @@ public class InternalMagazineInventoryMagGen(BotWeaponGeneratorHelper botWeaponG public bool CanHandleInventoryMagGen(InventoryMagGen inventoryMagGen) { - return inventoryMagGen.GetMagazineTemplate().Properties.ReloadMagType - == ReloadMode.InternalMagazine; + return inventoryMagGen.GetMagazineTemplate().Properties.ReloadMagType == ReloadMode.InternalMagazine; } public void Process(InventoryMagGen inventoryMagGen) diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs index 9c1377d7..5d196db6 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeaponGen/Implementations/UbglExternalMagGen.cs @@ -5,9 +5,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Generators.WeaponGen.Implementations; [Injectable] -public class UbglExternalMagGen(BotWeaponGeneratorHelper botWeaponGeneratorHelper) - : InventoryMagGen, - IInventoryMagGen +public class UbglExternalMagGen(BotWeaponGeneratorHelper botWeaponGeneratorHelper) : InventoryMagGen, IInventoryMagGen { public int GetPriority() { diff --git a/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs index f1a1a929..6bddaaae 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/WeatherGenerator.cs @@ -69,19 +69,9 @@ public class WeatherGenerator( Pressure = GetRandomDouble(weatherValues.Pressure.Min, weatherValues.Pressure.Max), Temperature = 0, Fog = GetWeightedFog(weatherValues), - RainIntensity = - rain > 1 - ? GetRandomDouble( - weatherValues.RainIntensity.Min, - weatherValues.RainIntensity.Max - ) - : 0, + RainIntensity = rain > 1 ? GetRandomDouble(weatherValues.RainIntensity.Min, weatherValues.RainIntensity.Max) : 0, Rain = rain, - WindGustiness = GetRandomDouble( - weatherValues.WindGustiness.Min, - weatherValues.WindGustiness.Max, - 2 - ), + WindGustiness = GetRandomDouble(weatherValues.WindGustiness.Min, weatherValues.WindGustiness.Max, 2), WindDirection = GetWeightedWindDirection(weatherValues), WindSpeed = GetWeightedWindSpeed(weatherValues), Cloud = clouds, @@ -100,10 +90,7 @@ public class WeatherGenerator( protected SeasonalValues GetWeatherValuesBySeason(Season currentSeason) { - var result = _weatherConfig.Weather.SeasonValues.TryGetValue( - currentSeason.ToString(), - out var value - ); + var result = _weatherConfig.Weather.SeasonValues.TryGetValue(currentSeason.ToString(), out var value); if (!result) { return _weatherConfig.Weather.SeasonValues["default"]; @@ -122,9 +109,7 @@ public class WeatherGenerator( { // Convert timestamp to date so we can get current hour and check if its day or night var currentRaidTime = new DateTime(inRaidTimestamp); - var minMax = weatherHelper.IsHourAtNightTime(currentRaidTime.Hour) - ? weather.Temp.Night - : weather.Temp.Day; + var minMax = weatherHelper.IsHourAtNightTime(currentRaidTime.Hour) ? weather.Temp.Night : weather.Temp.Day; return Math.Round(randomUtil.GetDouble(minMax.Min, minMax.Max), 2); } @@ -136,15 +121,9 @@ public class WeatherGenerator( /// Optional, timestamp used protected void SetCurrentDateTime(Weather weather, long? timestamp = null) { - var inRaidTime = timestamp is null - ? weatherHelper.GetInRaidTime() - : weatherHelper.GetInRaidTime(timestamp.Value); + var inRaidTime = timestamp is null ? weatherHelper.GetInRaidTime() : weatherHelper.GetInRaidTime(timestamp.Value); var normalTime = inRaidTime.GetBsgFormattedWeatherTime(); - var formattedDate = ( - timestamp.HasValue - ? timeUtil.GetDateTimeFromTimeStamp(timestamp.Value) - : DateTime.UtcNow - ).FormatToBsgDate(); + var formattedDate = (timestamp.HasValue ? timeUtil.GetDateTimeFromTimeStamp(timestamp.Value) : DateTime.UtcNow).FormatToBsgDate(); var datetimeBsgFormat = $"{formattedDate} {normalTime}"; weather.Timestamp = timestamp ?? timeUtil.GetTimeStamp(); // matches weather.date @@ -155,23 +134,17 @@ public class WeatherGenerator( protected WindDirection GetWeightedWindDirection(SeasonalValues weather) { - return weightedRandomHelper - .WeightedRandom(weather.WindDirection.Values, weather.WindDirection.Weights) - .Item; + return weightedRandomHelper.WeightedRandom(weather.WindDirection.Values, weather.WindDirection.Weights).Item; } protected double GetWeightedClouds(SeasonalValues weather) { - return weightedRandomHelper - .WeightedRandom(weather.Clouds.Values, weather.Clouds.Weights) - .Item; + return weightedRandomHelper.WeightedRandom(weather.Clouds.Values, weather.Clouds.Weights).Item; } protected double GetWeightedWindSpeed(SeasonalValues weather) { - return weightedRandomHelper - .WeightedRandom(weather.WindSpeed.Values, weather.WindSpeed.Weights) - .Item; + return weightedRandomHelper.WeightedRandom(weather.WindSpeed.Values, weather.WindSpeed.Weights).Item; } protected double GetWeightedFog(SeasonalValues weather) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs index 8036f34a..fc0165ab 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs @@ -10,10 +10,7 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Helpers; [Injectable] -public class AssortHelper( - ISptLogger logger, - ServerLocalisationService serverLocalisationService -) +public class AssortHelper(ISptLogger logger, ServerLocalisationService serverLocalisationService) { /// /// Remove assorts from a trader that have not been unlocked yet (via player completing corresponding quest) @@ -37,9 +34,7 @@ public class AssortHelper( // Trader assort does not always contain loyal_level_items if (traderAssorts.LoyalLevelItems is null) { - logger.Warning( - serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId) - ); + logger.Warning(serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId)); return traderAssorts; } @@ -81,28 +76,18 @@ public class AssortHelper( { return new KeyValuePair>( mergedQuestAssorts["started"][assortId], - [ - QuestStatusEnum.Started, - QuestStatusEnum.AvailableForFinish, - QuestStatusEnum.Success, - ] + [QuestStatusEnum.Started, QuestStatusEnum.AvailableForFinish, QuestStatusEnum.Success] ); } if (mergedQuestAssorts.TryGetValue("success", out var dict2) && dict2.ContainsKey(assortId)) { - return new KeyValuePair>( - mergedQuestAssorts["success"][assortId], - [QuestStatusEnum.Success] - ); + return new KeyValuePair>(mergedQuestAssorts["success"][assortId], [QuestStatusEnum.Success]); } if (mergedQuestAssorts.TryGetValue("fail", out var dict3) && dict3.ContainsKey(assortId)) { - return new KeyValuePair>( - mergedQuestAssorts["fail"][assortId], - [QuestStatusEnum.Fail] - ); + return new KeyValuePair>(mergedQuestAssorts["fail"][assortId], [QuestStatusEnum.Fail]); } return null; @@ -115,20 +100,14 @@ public class AssortHelper( /// Traders id /// Traders assorts /// Trader assorts minus locked loyalty assorts - public TraderAssort StripLockedLoyaltyAssort( - PmcData pmcProfile, - MongoId traderId, - TraderAssort assort - ) + public TraderAssort StripLockedLoyaltyAssort(PmcData pmcProfile, MongoId traderId, TraderAssort assort) { var strippedAssort = assort; // Trader assort does not always contain loyal_level_items if (assort.LoyalLevelItems is null) { - logger.Warning( - serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId) - ); + logger.Warning(serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId)); return strippedAssort; } @@ -136,10 +115,7 @@ public class AssortHelper( // Remove items restricted by loyalty levels above those reached by the player foreach (var item in assort.LoyalLevelItems) { - if ( - pmcProfile.TradersInfo.TryGetValue(traderId, out var info) - && assort.LoyalLevelItems[item.Key] > info.LoyaltyLevel - ) + if (pmcProfile.TradersInfo.TryGetValue(traderId, out var info) && assort.LoyalLevelItems[item.Key] > info.LoyaltyLevel) { strippedAssort = assort.RemoveItemFromAssort(item.Key); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs index 0c9a704a..7c479d33 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs @@ -30,21 +30,13 @@ public class BotDifficultyHelper( /// difficulty to get settings for (easy/normal etc) /// bots from database /// Difficulty object - public DifficultyCategories GetBotDifficultySettings( - string type, - string desiredDifficulty, - Bots botDb - ) + public DifficultyCategories GetBotDifficultySettings(string type, string desiredDifficulty, Bots botDb) { - var desiredType = botHelper.IsBotPmc(type) - ? botHelper.GetPmcSideByRole(type).ToLowerInvariant() - : type.ToLowerInvariant(); + var desiredType = botHelper.IsBotPmc(type) ? botHelper.GetPmcSideByRole(type).ToLowerInvariant() : type.ToLowerInvariant(); if (!botDb.Types.ContainsKey(desiredType)) { // No bot found, get fallback difficulty values - logger.Warning( - serverLocalisationService.GetText("bot-unable_to_get_bot_fallback_to_assault", type) - ); + logger.Warning(serverLocalisationService.GetText("bot-unable_to_get_bot_fallback_to_assault", type)); botDb.Types[desiredType] = cloner.Clone(botDb.Types["assault"]); } @@ -76,11 +68,7 @@ public class BotDifficultyHelper( /// Difficulty object protected DifficultyCategories GetDifficultySettings(string type, string difficulty) { - var difficultySetting = string.Equals( - _pmcConfig.Difficulty, - "asonline", - StringComparison.OrdinalIgnoreCase - ) + var difficultySetting = string.Equals(_pmcConfig.Difficulty, "asonline", StringComparison.OrdinalIgnoreCase) ? difficulty : _pmcConfig.Difficulty.ToLowerInvariant(); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs index f47fbf46..64a99867 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs @@ -37,11 +37,7 @@ public class BotGeneratorHelper( nameof(EquipmentSlots.ArmBand), ]; - private static readonly FrozenSet _pmcTypes = - [ - Sides.PmcBear.ToLowerInvariant(), - Sides.PmcUsec.ToLowerInvariant(), - ]; + private static readonly FrozenSet _pmcTypes = [Sides.PmcBear.ToLowerInvariant(), Sides.PmcUsec.ToLowerInvariant()]; private readonly BotConfig _botConfig = configServer.GetConfig(); @@ -55,43 +51,29 @@ public class BotGeneratorHelper( public Upd GenerateExtraPropertiesForItem(TemplateItem? itemTemplate, string? botRole = null) { // Get raid settings, if no raid, default to day - var raidSettings = profileActivityService - .GetFirstProfileActivityRaidData() - ?.RaidConfiguration; + var raidSettings = profileActivityService.GetFirstProfileActivityRaidData()?.RaidConfiguration; RandomisedResourceDetails? randomisationSettings = null; if (botRole is not null) { - _botConfig.LootItemResourceRandomization.TryGetValue( - botRole, - out randomisationSettings - ); + _botConfig.LootItemResourceRandomization.TryGetValue(botRole, out randomisationSettings); } Upd itemProperties = new(); var hasProperties = false; - if ( - itemTemplate?.Properties?.MaxDurability is not null - && itemTemplate.Properties.MaxDurability > 0 - ) + if (itemTemplate?.Properties?.MaxDurability is not null && itemTemplate.Properties.MaxDurability > 0) { if (itemTemplate.Properties.WeapClass is not null) { // Is weapon - itemProperties.Repairable = GenerateWeaponRepairableProperties( - itemTemplate, - botRole - ); + itemProperties.Repairable = GenerateWeaponRepairableProperties(itemTemplate, botRole); hasProperties = true; } else if (itemTemplate.Properties.ArmorClass is not null) { // Is armor - itemProperties.Repairable = GenerateArmorRepairableProperties( - itemTemplate, - botRole - ); + itemProperties.Repairable = GenerateArmorRepairableProperties(itemTemplate, botRole); hasProperties = true; } } @@ -112,10 +94,7 @@ public class BotGeneratorHelper( { itemProperties.FireMode = itemTemplate.Properties.WeapFireType.Contains("fullauto") ? new UpdFireMode { FireMode = "fullauto" } - : new UpdFireMode - { - FireMode = randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType), - }; + : new UpdFireMode { FireMode = randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType) }; hasProperties = true; } @@ -123,25 +102,16 @@ public class BotGeneratorHelper( { itemProperties.MedKit = new UpdMedKit { - HpResource = GetRandomizedResourceValue( - itemTemplate.Properties.MaxHpResource ?? 0, - randomisationSettings?.Meds - ), + HpResource = GetRandomizedResourceValue(itemTemplate.Properties.MaxHpResource ?? 0, randomisationSettings?.Meds), }; hasProperties = true; } - if ( - itemTemplate?.Properties?.MaxResource is not null - && itemTemplate.Properties?.FoodUseTime is not null - ) + if (itemTemplate?.Properties?.MaxResource is not null && itemTemplate.Properties?.FoodUseTime is not null) { itemProperties.FoodDrink = new UpdFoodDrink { - HpPercent = GetRandomizedResourceValue( - itemTemplate.Properties.MaxResource ?? 0, - randomisationSettings?.Food - ), + HpPercent = GetRandomizedResourceValue(itemTemplate.Properties.MaxResource ?? 0, randomisationSettings?.Food), }; hasProperties = true; } @@ -154,11 +124,7 @@ public class BotGeneratorHelper( ? equipmentSettings?.LightIsActiveNightChancePercent ?? 50 : equipmentSettings?.LightIsActiveDayChancePercent ?? 25; - itemProperties.Light = new UpdLight - { - IsActive = randomUtil.GetChance100(lightLaserActiveChance), - SelectedMode = 0, - }; + itemProperties.Light = new UpdLight { IsActive = randomUtil.GetChance100(lightLaserActiveChance), SelectedMode = 0 }; hasProperties = true; } else if (itemTemplate?.Parent == BaseClasses.TACTICAL_COMBO) @@ -166,11 +132,7 @@ public class BotGeneratorHelper( // Get chance from botconfig for bot type, use 50% if no value found var lightLaserActiveChance = equipmentSettings?.LaserIsActiveChancePercent ?? 50; - itemProperties.Light = new UpdLight - { - IsActive = randomUtil.GetChance100(lightLaserActiveChance), - SelectedMode = 0, - }; + itemProperties.Light = new UpdLight { IsActive = randomUtil.GetChance100(lightLaserActiveChance), SelectedMode = 0 }; hasProperties = true; } @@ -182,24 +144,15 @@ public class BotGeneratorHelper( ? equipmentSettings?.NvgIsActiveChanceNightPercent ?? 90 : equipmentSettings?.NvgIsActiveChanceDayPercent ?? 15; - itemProperties.Togglable = new UpdTogglable - { - On = randomUtil.GetChance100(nvgActiveChance), - }; + itemProperties.Togglable = new UpdTogglable { On = randomUtil.GetChance100(nvgActiveChance) }; hasProperties = true; } // Togglable face shield - if ( - (itemTemplate?.Properties?.HasHinge ?? false) - && (itemTemplate.Properties.FaceShieldComponent ?? false) - ) + if ((itemTemplate?.Properties?.HasHinge ?? false) && (itemTemplate.Properties.FaceShieldComponent ?? false)) { var faceShieldActiveChance = equipmentSettings?.FaceShieldIsActiveChancePercent ?? 75; - itemProperties.Togglable = new UpdTogglable - { - On = randomUtil.GetChance100(faceShieldActiveChance), - }; + itemProperties.Togglable = new UpdTogglable { On = randomUtil.GetChance100(faceShieldActiveChance) }; hasProperties = true; } @@ -213,10 +166,7 @@ public class BotGeneratorHelper( /// Max resource value of medical items /// Value provided from config /// Randomized value from maxHpResource - protected double GetRandomizedResourceValue( - double maxResource, - RandomisedResourceValues? randomizationValues - ) + protected double GetRandomizedResourceValue(double maxResource, RandomisedResourceValues? randomizationValues) { if (randomizationValues is null) { @@ -228,10 +178,7 @@ public class BotGeneratorHelper( return maxResource; } - return randomUtil.GetDouble( - randomUtil.GetPercentOfValue(randomizationValues.ResourcePercent, maxResource, 0), - maxResource - ); + return randomUtil.GetDouble(randomUtil.GetPercentOfValue(randomizationValues.ResourcePercent, maxResource, 0), maxResource); } /// @@ -250,26 +197,12 @@ public class BotGeneratorHelper( /// weapon object being generated for /// type of bot being generated for /// Repairable object - protected UpdRepairable GenerateWeaponRepairableProperties( - TemplateItem itemTemplate, - string? botRole = null - ) + protected UpdRepairable GenerateWeaponRepairableProperties(TemplateItem itemTemplate, string? botRole = null) { - var maxDurability = durabilityLimitsHelper.GetRandomizedMaxWeaponDurability( - itemTemplate, - botRole - ); - var currentDurability = durabilityLimitsHelper.GetRandomizedWeaponDurability( - itemTemplate, - botRole, - maxDurability - ); + var maxDurability = durabilityLimitsHelper.GetRandomizedMaxWeaponDurability(itemTemplate, botRole); + var currentDurability = durabilityLimitsHelper.GetRandomizedWeaponDurability(itemTemplate, botRole, maxDurability); - return new UpdRepairable - { - Durability = Math.Round(currentDurability, 5), - MaxDurability = Math.Round(maxDurability, 5), - }; + return new UpdRepairable { Durability = Math.Round(currentDurability, 5), MaxDurability = Math.Round(maxDurability, 5) }; } /// @@ -278,10 +211,7 @@ public class BotGeneratorHelper( /// weapon object being generated for /// type of bot being generated for /// Repairable object - protected UpdRepairable GenerateArmorRepairableProperties( - TemplateItem itemTemplate, - string? botRole = null - ) + protected UpdRepairable GenerateArmorRepairableProperties(TemplateItem itemTemplate, string? botRole = null) { double maxDurability; double currentDurability; @@ -292,22 +222,11 @@ public class BotGeneratorHelper( } else { - maxDurability = durabilityLimitsHelper.GetRandomizedMaxArmorDurability( - itemTemplate, - botRole - ); - currentDurability = durabilityLimitsHelper.GetRandomizedArmorDurability( - itemTemplate, - botRole, - maxDurability - ); + maxDurability = durabilityLimitsHelper.GetRandomizedMaxArmorDurability(itemTemplate, botRole); + currentDurability = durabilityLimitsHelper.GetRandomizedArmorDurability(itemTemplate, botRole, maxDurability); } - return new UpdRepairable - { - Durability = Math.Round(currentDurability, 5), - MaxDurability = Math.Round(maxDurability, 5), - }; + return new UpdRepairable { Durability = Math.Round(currentDurability, 5), MaxDurability = Math.Round(maxDurability, 5) }; } /// @@ -335,9 +254,7 @@ public class BotGeneratorHelper( } // TODO: Can probably be optimized to cache itemTemplates as items are added to inventory - var equippedItemsDb = itemsEquipped.Select(equippedItem => - itemHelper.GetItem(equippedItem.Template).Value - ); + var equippedItemsDb = itemsEquipped.Select(equippedItem => itemHelper.GetItem(equippedItem.Template).Value); var (itemIsValid, itemToEquip) = itemHelper.GetItem(tplToCheck); @@ -382,9 +299,7 @@ public class BotGeneratorHelper( // Does an equipped item have a property that blocks the desired item - check for prop "BlocksX" .e.g BlocksEarpiece / BlocksFaceCover var templateItems = equippedItemsDb; - var blockingItem = templateItems.FirstOrDefault(item => - HasBlockingProperty(item, equipmentSlot) - ); + var blockingItem = templateItems.FirstOrDefault(item => HasBlockingProperty(item, equipmentSlot)); if (blockingItem is not null) // this.logger.warning(`1 incompatibility found between - {itemToEquip[1]._name} and {blockingItem._name} - {equipmentSlot}`); { @@ -392,16 +307,13 @@ public class BotGeneratorHelper( { Incompatible = true, Found = false, - Reason = - $"{tplToCheck} {itemToEquip.Name} in slot: {equipmentSlot} blocked by: {blockingItem.Id} {blockingItem.Name}", + Reason = $"{tplToCheck} {itemToEquip.Name} in slot: {equipmentSlot} blocked by: {blockingItem.Id} {blockingItem.Name}", SlotBlocked = true, }; } // Check if any of the current inventory templates have the incoming item defined as incompatible - blockingItem = templateItems.FirstOrDefault(x => - x?.Properties?.ConflictingItems?.Contains(tplToCheck) ?? false - ); + blockingItem = templateItems.FirstOrDefault(x => x?.Properties?.ConflictingItems?.Contains(tplToCheck) ?? false); if (blockingItem is not null) // this.logger.warning(`2 incompatibility found between - {itemToEquip[1]._name} and {blockingItem._props.Name} - {equipmentSlot}`); { @@ -409,8 +321,7 @@ public class BotGeneratorHelper( { Incompatible = true, Found = false, - Reason = - $"{tplToCheck} {itemToEquip.Name} in slot: {equipmentSlot} blocked by: {blockingItem.Id} {blockingItem.Name}", + Reason = $"{tplToCheck} {itemToEquip.Name} in slot: {equipmentSlot} blocked by: {blockingItem.Id} {blockingItem.Name}", SlotBlocked = true, }; } @@ -418,9 +329,7 @@ public class BotGeneratorHelper( // Does item being checked get blocked/block existing item if (itemToEquip.Properties.BlocksHeadwear ?? false) { - var existingHeadwear = itemsEquipped.FirstOrDefault(x => - x.SlotId == Containers.Headwear - ); + var existingHeadwear = itemsEquipped.FirstOrDefault(x => x.SlotId == Containers.Headwear); if (existingHeadwear is not null) { return new ChooseRandomCompatibleModResult @@ -437,9 +346,7 @@ public class BotGeneratorHelper( // Does item being checked get blocked/block existing item if (itemToEquip.Properties.BlocksFaceCover.GetValueOrDefault(false)) { - var existingFaceCover = itemsEquipped.FirstOrDefault(item => - item.SlotId == Containers.FaceCover - ); + var existingFaceCover = itemsEquipped.FirstOrDefault(item => item.SlotId == Containers.FaceCover); if (existingFaceCover is not null) { return new ChooseRandomCompatibleModResult @@ -456,9 +363,7 @@ public class BotGeneratorHelper( // Does item being checked get blocked/block existing item if (itemToEquip.Properties.BlocksEarpiece.GetValueOrDefault(false)) { - var existingEarpiece = itemsEquipped.FirstOrDefault(item => - item.SlotId == Containers.Earpiece - ); + var existingEarpiece = itemsEquipped.FirstOrDefault(item => item.SlotId == Containers.Earpiece); if (existingEarpiece is not null) { return new ChooseRandomCompatibleModResult @@ -475,9 +380,7 @@ public class BotGeneratorHelper( // Does item being checked get blocked/block existing item if (itemToEquip.Properties.BlocksArmorVest.GetValueOrDefault(false)) { - var existingArmorVest = itemsEquipped.FirstOrDefault(item => - item.SlotId == Containers.ArmorVest - ); + var existingArmorVest = itemsEquipped.FirstOrDefault(item => item.SlotId == Containers.ArmorVest); if (existingArmorVest is not null) { return new ChooseRandomCompatibleModResult @@ -502,8 +405,7 @@ public class BotGeneratorHelper( { Incompatible = true, Found = false, - Reason = - $"{tplToCheck} blocks existing item {blockingInventoryItem.Template} in slot {blockingInventoryItem.SlotId}", + Reason = $"{tplToCheck} blocks existing item {blockingInventoryItem.Template} in slot {blockingInventoryItem.SlotId}", }; } @@ -512,9 +414,7 @@ public class BotGeneratorHelper( protected bool HasBlockingProperty(TemplateItem? item, string blockingPropertyName) { - return item != null - && item.Blocks.TryGetValue(blockingPropertyName, out var blocks) - && blocks; + return item != null && item.Blocks.TryGetValue(blockingPropertyName, out var blocks) && blocks; } /// @@ -556,9 +456,7 @@ public class BotGeneratorHelper( } // Get container to put item into - var container = inventory.Items.FirstOrDefault(item => - item.SlotId == equipmentSlotId.ToString() - ); + var container = inventory.Items.FirstOrDefault(item => item.SlotId == equipmentSlotId.ToString()); if (container is null) { missingContainerCount++; @@ -583,12 +481,7 @@ public class BotGeneratorHelper( var (isValidItem, itemDbDetails) = itemHelper.GetItem(container.Template); if (!isValidItem) { - logger.Warning( - serverLocalisationService.GetText( - "bot-missing_container_with_tpl", - container.Template - ) - ); + logger.Warning(serverLocalisationService.GetText("bot-missing_container_with_tpl", container.Template)); // Bad item, skip continue; @@ -601,11 +494,7 @@ public class BotGeneratorHelper( } // Get x/y grid size of item - var (itemWidth, itemHeight) = inventoryHelper.GetItemSize( - rootItemTplId, - rootItemId, - itemWithChildren - ); + var (itemWidth, itemHeight) = inventoryHelper.GetItemSize(rootItemTplId, rootItemId, itemWithChildren); // Iterate over each grid in the container and look for a big enough space for the item to be placed in var currentGridCount = 1; @@ -631,13 +520,8 @@ public class BotGeneratorHelper( ); // Get root items in container we can iterate over to find out what space is free - var containerItemsToCheck = existingContainerItems - .Where(x => x.SlotId == slotGrid.Name) - .ToList(); - var containerItemsWithChildren = GetContainerItemsWithChildren( - containerItemsToCheck, - inventory.Items - ); + var containerItemsToCheck = existingContainerItems.Where(x => x.SlotId == slotGrid.Name).ToList(); + var containerItemsWithChildren = GetContainerItemsWithChildren(containerItemsToCheck, inventory.Items); if (slotGrid.Props is not null) { @@ -666,10 +550,7 @@ public class BotGeneratorHelper( { X = findSlotResult.X, Y = findSlotResult.Y, - R = - findSlotResult.Rotation ?? false - ? ItemRotation.Vertical - : ItemRotation.Horizontal, + R = findSlotResult.Rotation ?? false ? ItemRotation.Vertical : ItemRotation.Horizontal, }; } @@ -718,10 +599,7 @@ public class BotGeneratorHelper( /// /// /// - protected List GetContainerItemsWithChildren( - IEnumerable containerRootItems, - IEnumerable inventoryItems - ) + protected List GetContainerItemsWithChildren(IEnumerable containerRootItems, IEnumerable inventoryItems) { var result = new List(); if (!containerRootItems.Any()) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs index a1fc26cf..3856ae2f 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs @@ -13,12 +13,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers; [Injectable] -public class BotHelper( - ISptLogger logger, - DatabaseService databaseService, - RandomUtil randomUtil, - ConfigServer configServer -) +public class BotHelper(ISptLogger logger, DatabaseService databaseService, RandomUtil randomUtil, ConfigServer configServer) { private static readonly FrozenSet _pmcTypeIds = [ @@ -61,10 +56,7 @@ public class BotHelper( public bool IsBotBoss(string botRole) { - return !IsBotFollower(botRole) - && _botConfig.Bosses.Any(x => - string.Equals(x, botRole, StringComparison.CurrentCultureIgnoreCase) - ); + return !IsBotFollower(botRole) && _botConfig.Bosses.Any(x => string.Equals(x, botRole, StringComparison.CurrentCultureIgnoreCase)); } public bool IsBotFollower(string botRole) @@ -132,10 +124,7 @@ public class BotHelper( /// level of bot /// bot equipment json /// RandomisationDetails - public RandomisationDetails? GetBotRandomizationDetails( - int botLevel, - EquipmentFilters botEquipConfig - ) + public RandomisationDetails? GetBotRandomizationDetails(int botLevel, EquipmentFilters botEquipConfig) { // No randomisation details found, skip @@ -199,26 +188,18 @@ public class BotHelper( /// name of PMC public string GetPmcNicknameOfMaxLength(int maxLength, string? side = null) { - var chosenFaction = ( - side ?? (randomUtil.GetInt(0, 1) == 0 ? Sides.Usec : Sides.Bear) - ).ToLowerInvariant(); + var chosenFaction = (side ?? (randomUtil.GetInt(0, 1) == 0 ? Sides.Usec : Sides.Bear)).ToLowerInvariant(); var cacheKey = $"{chosenFaction}{maxLength}"; if (!_pmcNameCache.TryGetValue(cacheKey, out var eligibleNames)) { - if ( - !databaseService - .GetBots() - .Types.TryGetValue(chosenFaction, out var chosenFactionDetails) - ) + if (!databaseService.GetBots().Types.TryGetValue(chosenFaction, out var chosenFactionDetails)) { logger.Error($"Unknown faction: {chosenFaction} Defaulting to: {Sides.Usec}"); chosenFaction = Sides.Usec.ToLowerInvariant(); chosenFactionDetails = databaseService.GetBots().Types[chosenFaction]; } - var matchingNames = chosenFactionDetails - .FirstNames.Where(name => name.Length <= maxLength) - .ToList(); + var matchingNames = chosenFactionDetails.FirstNames.Where(name => name.Length <= maxLength).ToList(); if (!matchingNames.Any()) { logger.Warning( diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs index 2bddd52d..1ea7e84c 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs @@ -15,11 +15,7 @@ public class BotWeaponGeneratorHelper( BotGeneratorHelper botGeneratorHelper ) { - private static readonly FrozenSet _magCheck = - [ - "CylinderMagazine", - "SpringDrivenCylinder", - ]; + private static readonly FrozenSet _magCheck = ["CylinderMagazine", "SpringDrivenCylinder"]; /// /// Get a randomized number of bullets for a specific magazine @@ -35,12 +31,8 @@ public class BotWeaponGeneratorHelper( if (MagazineIsCylinderRelated(parentItem.Name)) { var firstSlotAmmoTpl = - magTemplate - .Properties.Cartridges.FirstOrDefault() - ?.Props.Filters.First() - .Filter.FirstOrDefault() ?? new MongoId(null); - var ammoMaxStackSize = - itemHelper.GetItem(firstSlotAmmoTpl).Value?.Properties?.StackMaxSize ?? 1; + magTemplate.Properties.Cartridges.FirstOrDefault()?.Props.Filters.First().Filter.FirstOrDefault() ?? new MongoId(null); + var ammoMaxStackSize = itemHelper.GetItem(firstSlotAmmoTpl).Value?.Properties?.StackMaxSize ?? 1; chamberBulletCount = ammoMaxStackSize == 1 ? 1 // Rotating grenade launcher @@ -88,11 +80,7 @@ public class BotWeaponGeneratorHelper( /// Ammo to add to magazine /// Template object of magazine /// Item array - public List CreateMagazineWithAmmo( - MongoId magazineTpl, - MongoId ammoTpl, - TemplateItem magTemplate - ) + public List CreateMagazineWithAmmo(MongoId magazineTpl, MongoId ammoTpl, TemplateItem magTemplate) { List magazine = [new() { Id = new MongoId(), Template = magazineTpl }]; @@ -139,9 +127,7 @@ public class BotWeaponGeneratorHelper( if (result != ItemAddedResult.SUCCESS) { - logger.Debug( - $"Unable to add ammo: {ammoItem.Template} to bot inventory, {result.ToString()}" - ); + logger.Debug($"Unable to add ammo: {ammoItem.Template} to bot inventory, {result.ToString()}"); if (result == ItemAddedResult.NO_SPACE || result == ItemAddedResult.NO_CONTAINERS) // If there's no space for 1 stack or no containers to hold item, there's no space for the others diff --git a/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs index e9e43751..9ada626e 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs @@ -144,21 +144,13 @@ public class CertificateHelper(ISptLogger logger, FileUtil fi var distinguishedName = new X500DistinguishedName($"CN={subjectName}"); using var rsa = RSA.Create(2048); - var request = new CertificateRequest( - distinguishedName, - rsa, - HashAlgorithmName.SHA256, - RSASignaturePadding.Pkcs1 - ); + var request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); request.CertificateExtensions.Add(sanBuilder.Build()); //Todo: Enable when Pfx methods can be removed //SavePrivateKey(rsa); - return request.CreateSelfSigned( - new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), - new DateTimeOffset(DateTime.UtcNow.AddDays(3650)) - ); + return request.CreateSelfSigned(new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddDays(3650))); } /// @@ -172,10 +164,7 @@ public class CertificateHelper(ISptLogger logger, FileUtil fi // Save as PEM (ensure the certificate is in PEM format) var certPem = "-----BEGIN CERTIFICATE-----\n" - + Convert.ToBase64String( - certificate.Export(X509ContentType.Cert), - Base64FormattingOptions.InsertLineBreaks - ) + + Convert.ToBase64String(certificate.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks) + "\n-----END CERTIFICATE-----"; fileUtil.WriteFile(certificatePath, certPem); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/AbstractDialogChatBot.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/AbstractDialogChatBot.cs index 6024286c..57bfd314 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/AbstractDialogChatBot.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/AbstractDialogChatBot.cs @@ -14,9 +14,7 @@ public abstract class AbstractDialogChatBot( IEnumerable chatCommands ) : IDialogueChatBot { - protected readonly IDictionary _chatCommands = chatCommands.ToDictionary( - command => command.CommandPrefix - ); + protected readonly IDictionary _chatCommands = chatCommands.ToDictionary(command => command.CommandPrefix); public abstract UserDialogInfo GetChatBot(); @@ -40,36 +38,19 @@ public abstract class AbstractDialogChatBot( return await commando.Handle(splitCommand[1], GetChatBot(), sessionId, request); } - if ( - string.Equals(splitCommand.FirstOrDefault(), "help", StringComparison.OrdinalIgnoreCase) - ) + if (string.Equals(splitCommand.FirstOrDefault(), "help", StringComparison.OrdinalIgnoreCase)) { return await SendPlayerHelpMessage(sessionId, request); } - _mailSendService.SendUserMessageToPlayer( - sessionId, - GetChatBot(), - GetUnrecognizedCommandMessage(), - [], - null - ); + _mailSendService.SendUserMessageToPlayer(sessionId, GetChatBot(), GetUnrecognizedCommandMessage(), [], null); return string.Empty; } - protected async ValueTask SendPlayerHelpMessage( - MongoId sessionId, - SendMessageRequest request - ) + protected async ValueTask SendPlayerHelpMessage(MongoId sessionId, SendMessageRequest request) { - _mailSendService.SendUserMessageToPlayer( - sessionId, - GetChatBot(), - "The available commands will be listed below:", - [], - null - ); + _mailSendService.SendUserMessageToPlayer(sessionId, GetChatBot(), "The available commands will be listed below:", [], null); foreach (var chatCommand in _chatCommands.Values) { // due to BSG being dumb with messages we need a mandatory timeout between messages so they get out on the right order @@ -107,9 +88,7 @@ public abstract class AbstractDialogChatBot( var prefix = chatCommand.CommandPrefix; if (!_chatCommands.TryAdd(prefix, chatCommand)) { - throw new Exception( - $"The command \"{prefix}\" attempting to be registered already exists." - ); + throw new Exception($"The command \"{prefix}\" attempting to be registered already exists."); } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/IChatCommand.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/IChatCommand.cs index b8cbc238..6d1c3d71 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/IChatCommand.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/IChatCommand.cs @@ -9,10 +9,5 @@ public interface IChatCommand public string CommandPrefix { get; } public string GetCommandHelp(string command); public List Commands { get; } - public ValueTask Handle( - string command, - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ); + public ValueTask Handle(string command, UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommandoCommands.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommandoCommands.cs index cb1a5b56..02340df6 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommandoCommands.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommandoCommands.cs @@ -51,12 +51,7 @@ public class SptCommandoCommands : IChatCommand get { return _sptCommands.Keys.ToList(); } } - public async ValueTask Handle( - string command, - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ) + public async ValueTask Handle(string command, UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request) { return await _sptCommands[command].PerformAction(commandHandler, sessionId, request); } @@ -66,12 +61,7 @@ public class SptCommandoCommands : IChatCommand var key = command.Command; if (!_sptCommands.TryAdd(key, command)) { - throw new Exception( - _serverLocalisationService.GetText( - "chat-unable_to_register_command_already_registered", - key - ) - ); + throw new Exception(_serverLocalisationService.GetText("chat-unable_to_register_command_already_registered", key)); } } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs index 4a2618eb..cd7d240b 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs @@ -27,9 +27,7 @@ public class GiveSptCommand( ) : ISptCommand { private const double _acceptableConfidence = 0.9d; - private static readonly Regex _commandRegex = new( - @"^spt give (((([a-z]{2,5}) )?""(.+)""|\w+) )?([0-9]+)$" - ); + private static readonly Regex _commandRegex = new(@"^spt give (((([a-z]{2,5}) )?""(.+)""|\w+) )?([0-9]+)$"); // Exception for flares protected static readonly FrozenSet _excludedPresetItems = @@ -56,11 +54,7 @@ public class GiveSptCommand( } } - public ValueTask PerformAction( - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ) + public ValueTask PerformAction(UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request) { if (!_commandRegex.IsMatch(request.Text)) { @@ -117,10 +111,7 @@ public class GiveSptCommand( _savedCommand.Remove(sessionId); isItemName = (!string.IsNullOrEmpty(result.Groups[5].Value)); - item = - (!string.IsNullOrEmpty(result.Groups[5].Value)) - ? result.Groups[5].Value - : result.Groups[2].Value; + item = (!string.IsNullOrEmpty(result.Groups[5].Value)) ? result.Groups[5].Value : result.Groups[2].Value; quantity = +int.Parse(result.Groups[6].Value); if (quantity <= 0) { @@ -136,8 +127,7 @@ public class GiveSptCommand( { try { - locale = - result.Groups[4].Value ?? _localeService.GetDesiredGameLocale() ?? "en"; + locale = result.Groups[4].Value ?? _localeService.GetDesiredGameLocale() ?? "en"; } catch (Exception ex) { @@ -155,19 +145,11 @@ public class GiveSptCommand( var allAllowedItemNames = databaseService .GetItems() .Values.Where(IsItemAllowed) - .Select(i => - localizedGlobal - .GetValueOrDefault($"{i.Id} Name", i.Properties.Name) - ?.ToLowerInvariant() - ) + .Select(i => localizedGlobal.GetValueOrDefault($"{i.Id} Name", i.Properties.Name)?.ToLowerInvariant()) .Where(i => !string.IsNullOrEmpty(i)); var closestItemsMatchedByName = allAllowedItemNames - .Select(i => new - { - Match = StringSimilarity.Match(item, i, 2, true), - ItemName = i, - }) + .Select(i => new { Match = StringSimilarity.Match(item, i, 2, true), ItemName = i }) .ToList(); closestItemsMatchedByName.Sort((a1, a2) => a2.Match.CompareTo(a1.Match)); @@ -181,17 +163,8 @@ public class GiveSptCommand( var i = 1; var slicedItems = closestItemsMatchedByName.Slice(0, 10); // max 10 item names and map them - var itemList = slicedItems.Select(match => - $"{i++}. {match.ItemName} (conf: {Math.Round(match.Match * 100d), 2})" - ); - _savedCommand.Add( - sessionId, - new SavedCommand( - quantity, - slicedItems.Select(item => item.ItemName).ToList(), - locale - ) - ); + var itemList = slicedItems.Select(match => $"{i++}. {match.ItemName} (conf: {Math.Round(match.Match * 100d), 2})"); + _savedCommand.Add(sessionId, new SavedCommand(quantity, slicedItems.Select(item => item.ItemName).ToList(), locale)); _mailSendService.SendUserMessageToPlayer( sessionId, commandHandler, @@ -210,10 +183,7 @@ public class GiveSptCommand( ? databaseService .GetItems() .Values.Where(IsItemAllowed) - .FirstOrDefault(i => - (localizedGlobal[$"{i?.Id} Name"]?.ToLowerInvariant() ?? i.Properties.Name) - == item - ) + .FirstOrDefault(i => (localizedGlobal[$"{i?.Id} Name"]?.ToLowerInvariant() ?? i.Properties.Name) == item) .Id : item; @@ -299,11 +269,7 @@ public class GiveSptCommand( // Flag the items as FiR _itemHelper.SetFoundInRaid(itemsToSend); - _mailSendService.SendSystemMessageToPlayer( - sessionId, - $"SPT GIVE DELIVERY: {item}", - itemsToSend - ); + _mailSendService.SendSystemMessageToPlayer(sessionId, $"SPT GIVE DELIVERY: {item}", itemsToSend); return new ValueTask(request.DialogId); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs index dc59af7d..0d54c2db 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs @@ -5,12 +5,7 @@ public static class StringSimilarity /// /// Converted from: https://github.com/stephenjjbrown/string-similarity-js/blob/master/src/string-similarity.ts /// - public static double Match( - string str1, - string str2, - int substringLength = 2, - bool caseSensitive = false - ) + public static double Match(string str1, string str2, int substringLength = 2, bool caseSensitive = false) { if (!caseSensitive) { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ISptCommand.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ISptCommand.cs index b31d4fbd..ca381847 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ISptCommand.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ISptCommand.cs @@ -8,9 +8,5 @@ public interface ISptCommand { public string Command { get; } public string CommandHelp { get; } - public ValueTask PerformAction( - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ); + public ValueTask PerformAction(UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ProfileCommand/ProfileSptCommand.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ProfileCommand/ProfileSptCommand.cs index 1df68e54..b1dd7b88 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ProfileCommand/ProfileSptCommand.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/ProfileCommand/ProfileSptCommand.cs @@ -13,11 +13,8 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Helpers.Dialogue.Commando.SptCommands.ProfileCommand; [Injectable] -public class ProfileSptCommand( - ISptLogger _logger, - MailSendService _mailSendService, - ProfileHelper _profileHelper -) : ISptCommand +public class ProfileSptCommand(ISptLogger _logger, MailSendService _mailSendService, ProfileHelper _profileHelper) + : ISptCommand { /// /// Regex to account for all these cases @@ -45,11 +42,7 @@ public class ProfileSptCommand( } } - public ValueTask PerformAction( - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ) + public ValueTask PerformAction(UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request) { var isCommand = _commandRegex.IsMatch(request.Text); var isExamine = _examineRegex.IsMatch(request.Text); @@ -66,13 +59,9 @@ public class ProfileSptCommand( var result = _commandRegex.Match(request.Text); - var command = - result.Groups["command"].Length > 0 ? result.Groups["command"].Captures[0].Value : null; - var skill = - result.Groups["skill"].Length > 0 ? result.Groups["skill"].Captures[0].Value : null; - var quantity = int.Parse( - result.Groups["quantity"].Length > 0 ? result.Groups["quantity"].Captures[0].Value : "0" - ); + var command = result.Groups["command"].Length > 0 ? result.Groups["command"].Captures[0].Value : null; + var skill = result.Groups["skill"].Length > 0 ? result.Groups["skill"].Captures[0].Value : null; + var quantity = int.Parse(result.Groups["quantity"].Length > 0 ? result.Groups["quantity"].Captures[0].Value : "0"); ProfileChangeEvent profileChangeEvent; switch (command) @@ -94,9 +83,7 @@ public class ProfileSptCommand( { var enumSkill = Enum.GetValues() .Cast() - .FirstOrDefault(t => - string.Equals(t?.ToString(), skill, StringComparison.OrdinalIgnoreCase) - ); + .FirstOrDefault(t => string.Equals(t?.ToString(), skill, StringComparison.OrdinalIgnoreCase)); if (enumSkill == null) { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/TraderCommand/TraderSptCommand.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/TraderCommand/TraderSptCommand.cs index 05582a36..75687376 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/TraderCommand/TraderSptCommand.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/Commando/SptCommands/TraderCommand/TraderSptCommand.cs @@ -14,15 +14,10 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Helpers.Dialogue.Commando.SptCommands.TraderCommand; [Injectable] -public class TraderSptCommand( - ISptLogger _logger, - TraderHelper _traderHelper, - MailSendService _mailSendService -) : ISptCommand +public class TraderSptCommand(ISptLogger _logger, TraderHelper _traderHelper, MailSendService _mailSendService) + : ISptCommand { - protected readonly Regex _commandRegex = new( - @"^spt trader (?[\w]+) (?rep|spend) (?(?!0+)[0-9]+)$" - ); + protected readonly Regex _commandRegex = new(@"^spt trader (?[\w]+) (?rep|spend) (?(?!0+)[0-9]+)$"); public string Command { @@ -37,11 +32,7 @@ public class TraderSptCommand( } } - public ValueTask PerformAction( - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ) + public ValueTask PerformAction(UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request) { if (!_commandRegex.IsMatch(request.Text)) { @@ -55,19 +46,9 @@ public class TraderSptCommand( var result = _commandRegex.Match(request.Text); - var trader = - result.Groups["trader"].Captures.Count > 0 - ? result.Groups["trader"].Captures[0].Value - : null; - var command = - result.Groups["command"].Captures.Count > 0 - ? result.Groups["command"].Captures[0].Value - : null; - var quantity = double.Parse( - result.Groups["command"].Captures.Count > 0 - ? result.Groups["quantity"].Captures[0].Value - : "0" - ); + var trader = result.Groups["trader"].Captures.Count > 0 ? result.Groups["trader"].Captures[0].Value : null; + var command = result.Groups["command"].Captures.Count > 0 ? result.Groups["command"].Captures[0].Value : null; + var quantity = double.Parse(result.Groups["command"].Captures.Count > 0 ? result.Groups["quantity"].Captures[0].Value : "0"); var dbTrader = _traderHelper.GetTraderByNickName(trader); if (dbTrader == null) @@ -123,11 +104,7 @@ public class TraderSptCommand( return new ValueTask(request.DialogId); } - protected ProfileChangeEvent CreateProfileChangeEvent( - NotificationEventType profileChangeEventType, - double quantity, - string dbTraderId - ) + protected ProfileChangeEvent CreateProfileChangeEvent(NotificationEventType profileChangeEventType, double quantity, string dbTraderId) { return new ProfileChangeEvent { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/AreYouABotMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/AreYouABotMessageHandler.cs index d9c12828..b96bb860 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/AreYouABotMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/AreYouABotMessageHandler.cs @@ -8,8 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers.Dialogue.SPTFriend.Commands; [Injectable] -public class AreYouABotMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) - : IChatMessageHandler +public class AreYouABotMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) : IChatMessageHandler { public int GetPriority() { @@ -21,19 +20,12 @@ public class AreYouABotMessageHandler(MailSendService _mailSendService, RandomUt return string.Equals(message, "are you a bot", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _mailSendService.SendUserMessageToPlayer( sessionId, sptFriendUser, - _randomUtil.GetArrayValue( - ["beep boop", "**sad boop**", "probably", "sometimes", "yeah lol"] - ), + _randomUtil.GetArrayValue(["beep boop", "**sad boop**", "probably", "sometimes", "yeah lol"]), [], null ); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplayLocationsHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplayLocationsHandler.cs index 24883669..6bdc0950 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplayLocationsHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplayLocationsHandler.cs @@ -20,12 +20,7 @@ public class DisplayLocationsHandler(MailSendService _mailSendService) : IChatMe return string.Equals(message, "locations", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { // Get all items as an array var locations = Enum.GetNames(typeof(ELocationName)); @@ -44,13 +39,7 @@ public class DisplayLocationsHandler(MailSendService _mailSendService) : IChatMe Thread.Sleep(500); // Send to player - _mailSendService.SendUserMessageToPlayer( - sessionId, - sptFriendUser, - itemsToSendCsv, - [], - null - ); + _mailSendService.SendUserMessageToPlayer(sessionId, sptFriendUser, itemsToSendCsv, [], null); // Increment processed count parsedCount += itemsToSend.Count(); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplaySkillNamesHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplaySkillNamesHandler.cs index 787048b6..77ac9e20 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplaySkillNamesHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/DisplaySkillNamesHandler.cs @@ -20,12 +20,7 @@ public class DisplaySkillNamesHandler(MailSendService _mailSendService) : IChatM return string.Equals(message, "skills", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { // Get all items as an array var skills = Enum.GetNames(typeof(SkillTypes)).Order(); @@ -44,13 +39,7 @@ public class DisplaySkillNamesHandler(MailSendService _mailSendService) : IChatM Thread.Sleep(500); // Send to player - _mailSendService.SendUserMessageToPlayer( - sessionId, - sptFriendUser, - itemsToSendCsv, - [], - null - ); + _mailSendService.SendUserMessageToPlayer(sessionId, sptFriendUser, itemsToSendCsv, [], null); // Increment processed count parsedCount += itemsToSend.Count(); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/FishMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/FishMessageHandler.cs index ad5f1bf4..00449e17 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/FishMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/FishMessageHandler.cs @@ -19,12 +19,7 @@ public class FishMessageHandler(MailSendService _mailSendService) : IChatMessage return string.Equals(message, "fish", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _mailSendService.SendUserMessageToPlayer(sessionId, sptFriendUser, "blub", [], null); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceChristmasMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceChristmasMessageHandler.cs index 06a95afe..58e79a48 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceChristmasMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceChristmasMessageHandler.cs @@ -26,28 +26,16 @@ public class ForceChristmasMessageHandler( return string.Equals(message, "hohoho", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { - var enableEventResult = _seasonalEventService.ForceSeasonalEvent( - SeasonalEventType.Christmas - ); + var enableEventResult = _seasonalEventService.ForceSeasonalEvent(SeasonalEventType.Christmas); if (enableEventResult) { _mailSendService.SendUserMessageToPlayer( sessionId, sptFriendUser, _randomUtil.GetArrayValue( - [ - _serverLocalisationService.GetText( - "chatbot-forced_event_enabled", - SeasonalEventType.Christmas - ), - ] + [_serverLocalisationService.GetText("chatbot-forced_event_enabled", SeasonalEventType.Christmas)] ), [], null diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceHalloweenMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceHalloweenMessageHandler.cs index 0e95e6b6..39671c11 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceHalloweenMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceHalloweenMessageHandler.cs @@ -26,28 +26,16 @@ public class ForceHalloweenMessageHandler( return string.Equals(message, "veryspooky", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { - var enableEventResult = _seasonalEventService.ForceSeasonalEvent( - SeasonalEventType.Halloween - ); + var enableEventResult = _seasonalEventService.ForceSeasonalEvent(SeasonalEventType.Halloween); if (enableEventResult) { _mailSendService.SendUserMessageToPlayer( sessionId, sptFriendUser, _randomUtil.GetArrayValue( - [ - _serverLocalisationService.GetText( - "chatbot-forced_event_enabled", - SeasonalEventType.Halloween - ), - ] + [_serverLocalisationService.GetText("chatbot-forced_event_enabled", SeasonalEventType.Halloween)] ), [], null diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSnowMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSnowMessageHandler.cs index 1e0ac916..672981e0 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSnowMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSnowMessageHandler.cs @@ -30,12 +30,7 @@ public class ForceSnowMessageHandler( return string.Equals(message, "itsonlysnowalan", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _weatherConfig.OverrideSeason = Season.WINTER; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSummerMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSummerMessageHandler.cs index 068814be..64f71d98 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSummerMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/ForceSummerMessageHandler.cs @@ -30,21 +30,14 @@ public class ForceSummerMessageHandler( return string.Equals(message, "givemesunshine", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _weatherConfig.OverrideSeason = Season.SUMMER; _mailSendService.SendUserMessageToPlayer( sessionId, sptFriendUser, - _randomUtil.GetArrayValue( - [_serverLocalisationService.GetText("chatbot-summer_enabled")] - ), + _randomUtil.GetArrayValue([_serverLocalisationService.GetText("chatbot-summer_enabled")]), [], null ); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GarbageMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GarbageMessageHandler.cs index 706662e5..d47c5d4a 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GarbageMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GarbageMessageHandler.cs @@ -19,12 +19,7 @@ public class GarbageMessageHandler(MailSendService _mailSendService) : IChatMess return string.Equals(message, "garbage", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { var beforeCollect = GC.GetTotalMemory(false) / 1024 / 1024; @@ -32,12 +27,6 @@ public class GarbageMessageHandler(MailSendService _mailSendService) : IChatMess var afterCollect = GC.GetTotalMemory(false) / 1024 / 1024; - _mailSendService.SendUserMessageToPlayer( - sessionId, - sptFriendUser, - $"Before: {beforeCollect}MB, After: {afterCollect}MB", - [], - null - ); + _mailSendService.SendUserMessageToPlayer(sessionId, sptFriendUser, $"Before: {beforeCollect}MB, After: {afterCollect}MB", [], null); } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GiveMeSpaceMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GiveMeSpaceMessageHandler.cs index 604fad78..1c3502d1 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GiveMeSpaceMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/GiveMeSpaceMessageHandler.cs @@ -32,23 +32,11 @@ public class GiveMeSpaceMessageHandler( return string.Equals(message, "givemespace", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { const string stashRowGiftId = "StashRows"; - var maxGiftsToSendCount = - _coreConfig.Features.ChatbotFeatures.CommandUseLimits[stashRowGiftId] ?? 5; - if ( - profileHelper.PlayerHasReceivedMaxNumberOfGift( - sessionId, - stashRowGiftId, - maxGiftsToSendCount - ) - ) + var maxGiftsToSendCount = _coreConfig.Features.ChatbotFeatures.CommandUseLimits[stashRowGiftId] ?? 5; + if (profileHelper.PlayerHasReceivedMaxNumberOfGift(sessionId, stashRowGiftId, maxGiftsToSendCount)) { mailSendService.SendUserMessageToPlayer( sessionId, @@ -76,9 +64,7 @@ public class GiveMeSpaceMessageHandler( mailSendService.SendUserMessageToPlayer( sessionId, sptFriendUser, - randomUtil.GetArrayValue( - [serverLocalisationService.GetText("chatbot-added_stash_rows_please_restart")] - ), + randomUtil.GetArrayValue([serverLocalisationService.GetText("chatbot-added_stash_rows_please_restart")]), [], null ); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/HelloMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/HelloMessageHandler.cs index 66c83fce..043275e8 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/HelloMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/HelloMessageHandler.cs @@ -10,18 +10,9 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers.Dialogue.SPTFriend.Commands; [Injectable] -public class HelloMessageHandler(MailSendService mailSendService, RandomUtil randomUtil) - : IChatMessageHandler +public class HelloMessageHandler(MailSendService mailSendService, RandomUtil randomUtil) : IChatMessageHandler { - protected static readonly FrozenSet _greetings = - [ - "hello", - "hi", - "sup", - "yo", - "hey", - "bonjour", - ]; + protected static readonly FrozenSet _greetings = ["hello", "hi", "sup", "yo", "hey", "bonjour"]; public int GetPriority() { @@ -33,12 +24,7 @@ public class HelloMessageHandler(MailSendService mailSendService, RandomUtil ran return _greetings.Contains(message, StringComparer.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { mailSendService.SendUserMessageToPlayer( sessionId, @@ -78,29 +64,12 @@ public class HelloMessageHandler(MailSendService mailSendService, RandomUtil ran return "'hello' replies to the player with a random greeting"; } - public string PerformAction( - UserDialogInfo commandHandler, - MongoId sessionId, - SendMessageRequest request - ) + public string PerformAction(UserDialogInfo commandHandler, MongoId sessionId, SendMessageRequest request) { mailSendService.SendUserMessageToPlayer( sessionId, commandHandler, - randomUtil.GetArrayValue( - [ - "Howdy", - "Hi", - "Greetings", - "Hello", - "Bonjor", - "Yo", - "Sup", - "Heyyyyy", - "Hey there", - "OH its you", - ] - ), + randomUtil.GetArrayValue(["Howdy", "Hi", "Greetings", "Hello", "Bonjor", "Yo", "Sup", "Heyyyyy", "Hey there", "OH its you"]), [], null ); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/IChatMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/IChatMessageHandler.cs index f583be29..ed048fb6 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/IChatMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/IChatMessageHandler.cs @@ -10,10 +10,5 @@ public interface IChatMessageHandler int GetPriority(); public bool CanHandle(string? message); - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ); + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/LoveYouChatMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/LoveYouChatMessageHandler.cs index 498ef0c4..c0e25745 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/LoveYouChatMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/LoveYouChatMessageHandler.cs @@ -8,8 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers.Dialogue.SPTFriend.Commands; [Injectable] -public class LoveYouChatMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) - : IChatMessageHandler +public class LoveYouChatMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) : IChatMessageHandler { public int GetPriority() { @@ -21,12 +20,7 @@ public class LoveYouChatMessageHandler(MailSendService _mailSendService, RandomU return string.Equals(message, "love you", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _mailSendService.SendUserMessageToPlayer( sessionId, diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/NikitaMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/NikitaMessageHandler.cs index 3570ecab..9d63a85c 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/NikitaMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/NikitaMessageHandler.cs @@ -8,8 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers.Dialogue.SPTFriend.Commands; [Injectable] -public class NikitaMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) - : IChatMessageHandler +public class NikitaMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) : IChatMessageHandler { public int GetPriority() { @@ -21,12 +20,7 @@ public class NikitaMessageHandler(MailSendService _mailSendService, RandomUtil _ return string.Equals(message, "nikita", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _mailSendService.SendUserMessageToPlayer( sessionId, diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SendGiftMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SendGiftMessageHandler.cs index 1fca7ddd..8cceaabe 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SendGiftMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SendGiftMessageHandler.cs @@ -31,12 +31,7 @@ public class SendGiftMessageHandler( return _giftService.GiftExists(message); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { // Gifts may be disabled via config if (!_coreConfig.Features.ChatbotFeatures.SptFriendGiftsEnabled) @@ -70,9 +65,7 @@ public class SendGiftMessageHandler( _mailSendService.SendUserMessageToPlayer( sessionId, sptFriendUser, - _randomUtil.GetArrayValue( - ["Looks like you already used that code", "You already have that!!"] - ), + _randomUtil.GetArrayValue(["Looks like you already used that code", "You already have that!!"]), [], null ); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SptMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SptMessageHandler.cs index 0ce8ff94..79509cd1 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SptMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SPTFriend/Commands/SptMessageHandler.cs @@ -8,8 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers.Dialogue.SPTFriend.Commands; [Injectable] -public class SptMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) - : IChatMessageHandler +public class SptMessageHandler(MailSendService _mailSendService, RandomUtil _randomUtil) : IChatMessageHandler { public int GetPriority() { @@ -21,12 +20,7 @@ public class SptMessageHandler(MailSendService _mailSendService, RandomUtil _ran return string.Equals(message, "spt", StringComparison.OrdinalIgnoreCase); } - public void Process( - MongoId sessionId, - UserDialogInfo sptFriendUser, - PmcData? sender, - object? extraInfo = null - ) + public void Process(MongoId sessionId, UserDialogInfo sptFriendUser, PmcData? sender, object? extraInfo = null) { _mailSendService.SendUserMessageToPlayer( sessionId, diff --git a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SptDialogueChatBot.cs b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SptDialogueChatBot.cs index 158713c8..8d305f56 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SptDialogueChatBot.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/Dialogue/SptDialogueChatBot.cs @@ -18,8 +18,7 @@ public class SptDialogueChatBot( IEnumerable chatMessageHandlers ) : IDialogueChatBot { - protected readonly IEnumerable _chatMessageHandlers = - ChatMessageHandlerSetup(chatMessageHandlers); + protected readonly IEnumerable _chatMessageHandlers = ChatMessageHandlerSetup(chatMessageHandlers); protected readonly CoreConfig _coreConfig = _configServer.GetConfig(); public UserDialogInfo GetChatBot() @@ -57,20 +56,12 @@ public class SptDialogueChatBot( return new ValueTask(request.DialogId); } - _mailSendService.SendUserMessageToPlayer( - sessionId, - GetChatBot(), - GetUnrecognizedCommandMessage(), - [], - null - ); + _mailSendService.SendUserMessageToPlayer(sessionId, GetChatBot(), GetUnrecognizedCommandMessage(), [], null); return new ValueTask(request.DialogId); } - protected static List ChatMessageHandlerSetup( - IEnumerable components - ) + protected static List ChatMessageHandlerSetup(IEnumerable components) { var chatMessageHandlers = components.ToList(); chatMessageHandlers.Sort((a, b) => a.GetPriority() - b.GetPriority()); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs index 348af721..1c888fd3 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs @@ -95,8 +95,7 @@ public class DialogueHelper(ISptLogger logger, ProfileHelper pro public Dictionary GetDialogsForProfile(MongoId sessionId) { var profile = profileHelper.GetFullProfile(sessionId); - return profile.DialogueRecords - ?? (profile.DialogueRecords = new Dictionary()); + return profile.DialogueRecords ?? (profile.DialogueRecords = new Dictionary()); } /// diff --git a/Libraries/SPTarkov.Server.Core/Helpers/DurabilityLimitsHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/DurabilityLimitsHelper.cs index d760c911..da4c8746 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/DurabilityLimitsHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/DurabilityLimitsHelper.cs @@ -23,10 +23,7 @@ public class DurabilityLimitsHelper( /// UNUSED - Item to get durability for /// Role of bot to get max durability for /// Max durability of weapon - public double GetRandomizedMaxWeaponDurability( - TemplateItem itemTemplate, - string? botRole = null - ) + public double GetRandomizedMaxWeaponDurability(TemplateItem itemTemplate, string? botRole = null) { var durabilityRole = GetDurabilityRole(botRole); @@ -39,10 +36,7 @@ public class DurabilityLimitsHelper( /// Item to get max durability for /// Role of bot to get max durability for /// max durability - public double GetRandomizedMaxArmorDurability( - TemplateItem? itemTemplate, - string? botRole = null - ) + public double GetRandomizedMaxArmorDurability(TemplateItem? itemTemplate, string? botRole = null) { var itemMaxDurability = itemTemplate.Properties.MaxDurability.Value; if (botRole is null) @@ -66,11 +60,7 @@ public class DurabilityLimitsHelper( /// Role of bot to get current durability for /// Max durability of weapon /// Current weapon durability - public double GetRandomizedWeaponDurability( - TemplateItem itemTemplate, - string? botRole, - double maxDurability - ) + public double GetRandomizedWeaponDurability(TemplateItem itemTemplate, string? botRole, double maxDurability) { var durabilityRole = GetDurabilityRole(botRole); @@ -115,9 +105,7 @@ public class DurabilityLimitsHelper( return botRole; } - logger.Debug( - $"{botRole} doesn't exist in bot config durability values, using default fallback" - ); + logger.Debug($"{botRole} doesn't exist in bot config durability values, using default fallback"); return "default"; } @@ -129,11 +117,7 @@ public class DurabilityLimitsHelper( /// Role of bot to get current durability for /// Max durability of armor /// Current armor durability - public double GetRandomizedArmorDurability( - TemplateItem? itemTemplate, - string? botRole, - double maxDurability - ) + public double GetRandomizedArmorDurability(TemplateItem? itemTemplate, string? botRole, double maxDurability) { var durabilityRole = GetDurabilityRole(botRole); @@ -195,9 +179,7 @@ public class DurabilityLimitsHelper( var maxDelta = GetMaxWeaponDeltaFromConfig(botRole); var delta = randomUtil.GetInt(minDelta, maxDelta); var result = maxDurability - delta; - var durabilityValueMinLimit = Math.Round( - GetMinWeaponLimitPercentFromConfig(botRole) / 100 * maxDurability - ); + var durabilityValueMinLimit = Math.Round(GetMinWeaponLimitPercentFromConfig(botRole) / 100 * maxDurability); // Don't let weapon durability go below the percent defined in config return result >= durabilityValueMinLimit ? result : durabilityValueMinLimit; @@ -209,9 +191,7 @@ public class DurabilityLimitsHelper( var maxDelta = GetMaxArmorDeltaFromConfig(botRole); var delta = randomUtil.GetInt(minDelta, maxDelta); var result = maxDurability - delta; - var durabilityValueMinLimit = Math.Round( - GetMinArmorLimitPercentFromConfig(botRole) / 100 * maxDurability - ); + var durabilityValueMinLimit = Math.Round(GetMinArmorLimitPercentFromConfig(botRole) / 100 * maxDurability); // Don't let armor durability go below the percent defined in config return result >= durabilityValueMinLimit ? result : durabilityValueMinLimit; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs index 342301bd..febc4fc6 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs @@ -10,11 +10,7 @@ using SPTarkov.Server.Core.Utils.Cloners; namespace SPTarkov.Server.Core.Helpers; [Injectable(InjectionType.Singleton)] -public class HandbookHelper( - DatabaseService databaseService, - ConfigServer configServer, - ICloner cloner -) +public class HandbookHelper(DatabaseService databaseService, ConfigServer configServer, ICloner cloner) { private LookupCollection? _handbookPriceCache; protected virtual LookupCollection HandbookPriceCache @@ -75,10 +71,7 @@ public class HandbookHelper( result.Categories.ByParent.TryAdd(handbookCategory.ParentId.Value, []); } - result.Categories.ByParent.TryGetValue( - handbookCategory.ParentId.Value, - out var itemIds - ); + result.Categories.ByParent.TryGetValue(handbookCategory.ParentId.Value, out var itemIds); itemIds.Add(handbookCategory.Id); } @@ -100,9 +93,7 @@ public class HandbookHelper( return itemPrice; } - var handbookItem = databaseService - .GetHandbook() - .Items?.FirstOrDefault(item => item.Id == tpl); + var handbookItem = databaseService.GetHandbook().Items?.FirstOrDefault(item => item.Id == tpl); if (handbookItem is null) { const int newValue = 0; @@ -207,9 +198,7 @@ public class HandbookHelper( public HandbookCategory GetCategoryById(MongoId handbookId) { - return databaseService - .GetHandbook() - .Categories.FirstOrDefault(category => category.Id == handbookId); + return databaseService.GetHandbook().Categories.FirstOrDefault(category => category.Id == handbookId); } protected record LookupItem diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs index c424548e..67484d55 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs @@ -10,12 +10,7 @@ using BodyPartHealth = SPTarkov.Server.Core.Models.Eft.Common.Tables.BodyPartHea namespace SPTarkov.Server.Core.Helpers; [Injectable] -public class HealthHelper( - TimeUtil timeUtil, - SaveServer saveServer, - ProfileHelper profileHelper, - ConfigServer configServer -) +public class HealthHelper(TimeUtil timeUtil, SaveServer saveServer, ProfileHelper profileHelper, ConfigServer configServer) { protected readonly HealthConfig _healthConfig = configServer.GetConfig(); @@ -26,12 +21,7 @@ public class HealthHelper( /// Player profile to apply changes to /// Changes to apply /// OPTIONAL - Is player dead - public void ApplyHealthChangesToProfile( - MongoId sessionID, - PmcData pmcProfileToUpdate, - BotBaseHealth healthChanges, - bool isDead = false - ) + public void ApplyHealthChangesToProfile(MongoId sessionID, PmcData pmcProfileToUpdate, BotBaseHealth healthChanges, bool isDead = false) { var fullProfile = saveServer.GetProfile(sessionID); var profileEdition = fullProfile.ProfileInfo.Edition; @@ -40,15 +30,10 @@ public class HealthHelper( // Get matching 'side' e.g. USEC var matchingSide = profileHelper.GetProfileTemplateForSide(profileEdition, profileSide); - var defaultTemperature = - matchingSide?.Character?.Health?.Temperature ?? new CurrentMinMax { Current = 36.6 }; + var defaultTemperature = matchingSide?.Character?.Health?.Temperature ?? new CurrentMinMax { Current = 36.6 }; // Alter saved profiles Health with values from post-raid client data - ModifyProfileHealthProperties( - pmcProfileToUpdate, - healthChanges.BodyParts, - ["Dehydration", "Exhaustion"] - ); + ModifyProfileHealthProperties(pmcProfileToUpdate, healthChanges.BodyParts, ["Dehydration", "Exhaustion"]); // Adjust hydration/energy/temperature AdjustProfileHydrationEnergyTemperature(pmcProfileToUpdate, healthChanges); @@ -71,9 +56,7 @@ public class HealthHelper( { foreach (var (partName, partProperties) in bodyPartChanges) { - if ( - !profileToAdjust.Health.BodyParts.TryGetValue(partName, out var matchingProfilePart) - ) + if (!profileToAdjust.Health.BodyParts.TryGetValue(partName, out var matchingProfilePart)) { continue; } @@ -128,10 +111,7 @@ public class HealthHelper( /// /// Profile to update /// - protected void AdjustProfileHydrationEnergyTemperature( - PmcData profileToUpdate, - BotBaseHealth healthChanges - ) + protected void AdjustProfileHydrationEnergyTemperature(PmcData profileToUpdate, BotBaseHealth healthChanges) { // Ensure current hydration/energy/temp are copied over and don't exceed maximum var profileHealth = profileToUpdate.Health; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs index 0a9eeb0b..2592e15d 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs @@ -43,25 +43,14 @@ public class HideoutHelper( /// Production request /// Session id /// client response - public void RegisterProduction( - PmcData pmcData, - HideoutSingleProductionStartRequestData productionRequest, - MongoId sessionID - ) + public void RegisterProduction(PmcData pmcData, HideoutSingleProductionStartRequestData productionRequest, MongoId sessionID) { var recipe = databaseService .GetHideout() - .Production.Recipes.FirstOrDefault(production => - production.Id == productionRequest.RecipeId - ); + .Production.Recipes.FirstOrDefault(production => production.Id == productionRequest.RecipeId); if (recipe is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-missing_recipe_in_db", - productionRequest.RecipeId - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-missing_recipe_in_db", productionRequest.RecipeId)); httpResponseUtil.AppendErrorToOutput(eventOutputHolder.GetOutput(sessionID)); } @@ -71,16 +60,9 @@ public class HideoutHelper( // - scav case recipe: Production time value is stored in attribute "ProductionType" with capital "P" pmcData.Hideout.Production ??= []; - var modifiedProductionTime = GetAdjustedCraftTimeWithSkills( - pmcData, - productionRequest.RecipeId - ); + var modifiedProductionTime = GetAdjustedCraftTimeWithSkills(pmcData, productionRequest.RecipeId); - var production = InitProduction( - productionRequest.RecipeId, - modifiedProductionTime ?? 0, - recipe.NeedFuelForAllProductionTime - ); + var production = InitProduction(productionRequest.RecipeId, modifiedProductionTime ?? 0, recipe.NeedFuelForAllProductionTime); // Store the tools used for this production, so we can return them later if (productionRequest.Tools?.Count > 0) @@ -89,9 +71,7 @@ public class HideoutHelper( foreach (var tool in productionRequest.Tools) { - var toolItem = cloner.Clone( - pmcData.Inventory.Items.FirstOrDefault(x => x.Id == tool.Id) - ); + var toolItem = cloner.Clone(pmcData.Inventory.Items.FirstOrDefault(x => x.Id == tool.Id)); // Make sure we only return as many as we took itemHelper.AddUpdObjectToItem(toolItem); @@ -119,25 +99,14 @@ public class HideoutHelper( /// Production request /// Session id /// client response - public void RegisterProduction( - PmcData pmcData, - HideoutContinuousProductionStartRequestData productionRequest, - MongoId sessionID - ) + public void RegisterProduction(PmcData pmcData, HideoutContinuousProductionStartRequestData productionRequest, MongoId sessionID) { var recipe = databaseService .GetHideout() - .Production.Recipes.FirstOrDefault(production => - production.Id == productionRequest.RecipeId - ); + .Production.Recipes.FirstOrDefault(production => production.Id == productionRequest.RecipeId); if (recipe is null) { - logger.Error( - serverLocalisationService.GetText( - "hideout-missing_recipe_in_db", - productionRequest.RecipeId - ) - ); + logger.Error(serverLocalisationService.GetText("hideout-missing_recipe_in_db", productionRequest.RecipeId)); httpResponseUtil.AppendErrorToOutput(eventOutputHolder.GetOutput(sessionID)); } @@ -147,16 +116,9 @@ public class HideoutHelper( // - scav case recipe: Production time value is stored in attribute "ProductionType" with capital "P" pmcData.Hideout.Production ??= []; - var modifiedProductionTime = GetAdjustedCraftTimeWithSkills( - pmcData, - productionRequest.RecipeId.Value - ); + var modifiedProductionTime = GetAdjustedCraftTimeWithSkills(pmcData, productionRequest.RecipeId.Value); - var production = InitProduction( - productionRequest.RecipeId.Value, - modifiedProductionTime ?? 0, - recipe.NeedFuelForAllProductionTime - ); + var production = InitProduction(productionRequest.RecipeId.Value, modifiedProductionTime ?? 0, recipe.NeedFuelForAllProductionTime); pmcData.Hideout.Production[productionRequest.RecipeId.Value] = production; } @@ -165,11 +127,7 @@ public class HideoutHelper( /// This convenience function initializes new Production Object /// with all the constants. /// - public Production InitProduction( - MongoId recipeId, - double productionTime, - bool? needFuelForAllProductionTime - ) + public Production InitProduction(MongoId recipeId, double productionTime, bool? needFuelForAllProductionTime) { return new Production { @@ -200,9 +158,7 @@ public class HideoutHelper( case BonusType.StashSize: { // Find stash item and adjust tpl to new tpl from bonus - var stashItem = profileData.Inventory.Items.FirstOrDefault(x => - x.Id == profileData.Inventory.Stash - ); + var stashItem = profileData.Inventory.Items.FirstOrDefault(x => x.Id == profileData.Inventory.Stash); if (stashItem is null) { logger.Warning( @@ -262,22 +218,15 @@ public class HideoutHelper( /// Hideout-related values protected HideoutProperties GetHideoutProperties(PmcData pmcData) { - var bitcoinFarm = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.BitcoinFarm - ); + var bitcoinFarm = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.BitcoinFarm); var bitcoinCount = (bitcoinFarm?.Slots).Count(slot => slot.Items is not null); // Get slots with an item property var hideoutProperties = new HideoutProperties { BtcFarmGcs = bitcoinCount, - IsGeneratorOn = - pmcData - .Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.Generator) - ?.Active ?? false, + IsGeneratorOn = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.Generator)?.Active ?? false, WaterCollectorHasFilter = DoesWaterCollectorHaveFilter( - pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.WaterCollector - ) + pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.WaterCollector) ), }; @@ -324,12 +273,7 @@ public class HideoutHelper( if (craft.Progress == null) { - logger.Warning( - serverLocalisationService.GetText( - "hideout-craft_has_undefined_progress_value_defaulting", - prodId - ) - ); + logger.Warning(serverLocalisationService.GetText("hideout-craft_has_undefined_progress_value_defaulting", prodId)); craft.Progress = 0; } @@ -379,9 +323,7 @@ public class HideoutHelper( var recipe = recipes?.Recipes?.FirstOrDefault(r => r.Id == prodId.Key); if (recipe is null) { - logger.Error( - serverLocalisationService.GetText("hideout-missing_recipe_for_area", prodId) - ); + logger.Error(serverLocalisationService.GetText("hideout-missing_recipe_for_area", prodId)); continue; } @@ -396,16 +338,9 @@ public class HideoutHelper( /// profile to update /// id of water collection production to update /// Hideout properties - protected void UpdateWaterCollectorProductionTimer( - PmcData pmcData, - string productionId, - HideoutProperties hideoutProperties - ) + protected void UpdateWaterCollectorProductionTimer(PmcData pmcData, string productionId, HideoutProperties hideoutProperties) { - var timeElapsed = GetTimeElapsedSinceLastServerTick( - pmcData, - hideoutProperties.IsGeneratorOn - ); + var timeElapsed = GetTimeElapsedSinceLastServerTick(pmcData, hideoutProperties.IsGeneratorOn); if (hideoutProperties.WaterCollectorHasFilter) { pmcData.Hideout.Production[productionId].Progress += timeElapsed; @@ -419,12 +354,7 @@ public class HideoutHelper( /// Production id being crafted /// Recipe data being crafted /// - protected void UpdateProductionProgress( - PmcData pmcData, - string prodId, - HideoutProduction recipe, - HideoutProperties hideoutProperties - ) + protected void UpdateProductionProgress(PmcData pmcData, string prodId, HideoutProduction recipe, HideoutProperties hideoutProperties) { // Production is complete, no need to do any calculations if (DoesProgressMatchProductionTime(pmcData, prodId)) @@ -433,20 +363,13 @@ public class HideoutHelper( } // Get seconds since last hideout update + now - var timeElapsed = GetTimeElapsedSinceLastServerTick( - pmcData, - hideoutProperties.IsGeneratorOn, - recipe - ); + var timeElapsed = GetTimeElapsedSinceLastServerTick(pmcData, hideoutProperties.IsGeneratorOn, recipe); // Increment progress by time passed pmcData.Hideout.Production.TryGetValue(prodId, out var production); // Some items NEED power to craft (e.g. DSP) - if ( - production.needFuelForAllProductionTime.GetValueOrDefault() - && hideoutProperties.IsGeneratorOn - ) + if (production.needFuelForAllProductionTime.GetValueOrDefault() && hideoutProperties.IsGeneratorOn) { production.Progress += timeElapsed; } @@ -460,10 +383,7 @@ public class HideoutHelper( if (!(recipe.Continuous ?? false)) // If progress is larger than prod time, return ProductionTime, hard cap the value { - production.Progress = Math.Min( - production.Progress ?? 0, - production.ProductionTime ?? 0 - ); + production.Progress = Math.Min(production.Progress ?? 0, production.ProductionTime ?? 0); } } @@ -472,17 +392,13 @@ public class HideoutHelper( pmcData.Hideout.Production.TryGetValue(prodId, out var production); // Check if we're already complete, skip - if ( - (production.AvailableForFinish ?? false) - && !production.InProgress.GetValueOrDefault(false) - ) + if ((production.AvailableForFinish ?? false) && !production.InProgress.GetValueOrDefault(false)) { return; } // Get seconds since last hideout update - var timeElapsedSeconds = - timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp; + var timeElapsedSeconds = timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp; // Increment progress by time passed if progress is less than time needed if (production.Progress < production.ProductionTime) @@ -520,8 +436,7 @@ public class HideoutHelper( /// progress matches productionTime from recipe protected static bool DoesProgressMatchProductionTime(PmcData pmcData, string prodId) { - return pmcData.Hideout.Production[prodId].Progress - == pmcData.Hideout.Production[prodId].ProductionTime; + return pmcData.Hideout.Production[prodId].Progress == pmcData.Hideout.Production[prodId].ProductionTime; } /// @@ -545,11 +460,7 @@ public class HideoutHelper( /// Session id /// Profile to update areas of /// hideout properties - protected void UpdateAreasWithResources( - MongoId sessionID, - PmcData pmcData, - HideoutProperties hideoutProperties - ) + protected void UpdateAreasWithResources(MongoId sessionID, PmcData pmcData, HideoutProperties hideoutProperties) { foreach (var area in pmcData.Hideout.Areas) { @@ -588,13 +499,10 @@ public class HideoutHelper( // 1 resource last 14 min 27 sec, 1/14.45/60 = 0.00115 // 10-10-2021 From wiki, 1 resource last 12 minutes 38 seconds, 1/12.63333/60 = 0.00131 var fuelUsedSinceLastTick = - databaseService.GetHideout().Settings.GeneratorFuelFlowRate - * GetTimeElapsedSinceLastServerTick(pmcData, isGeneratorOn); + databaseService.GetHideout().Settings.GeneratorFuelFlowRate * GetTimeElapsedSinceLastServerTick(pmcData, isGeneratorOn); // Get all fuel consumption bonuses, returns an empty array if none found - var profileFuelConsomptionBonusSum = pmcData.GetBonusValueFromProfile( - BonusType.FuelConsumption - ); + var profileFuelConsomptionBonusSum = pmcData.GetBonusValueFromProfile(BonusType.FuelConsumption); // An increase in "bonus" consumption is actually an increase in consumption, so invert this for later use var fuelConsumptionBonusRate = -(profileFuelConsomptionBonusSum / 100); @@ -602,8 +510,7 @@ public class HideoutHelper( // An increase in hideout management bonus is a decrease in consumption var hideoutManagementConsumptionBonusRate = GetHideoutManagementConsumptionBonus(pmcData); - var combinedBonus = - 1.0 - (fuelConsumptionBonusRate + hideoutManagementConsumptionBonusRate); + var combinedBonus = 1.0 - (fuelConsumptionBonusRate + hideoutManagementConsumptionBonusRate); // Sanity check, never let fuel consumption go negative, otherwise it returns fuel to the player if (combinedBonus < 0) @@ -648,9 +555,7 @@ public class HideoutHelper( else { // Fuel exists already, deduct fuel from item remaining value - pointsConsumed = (double)( - (fuelItemInSlot.Upd.Resource.UnitsConsumed ?? 0) + fuelUsedSinceLastTick - ); + pointsConsumed = (double)((fuelItemInSlot.Upd.Resource.UnitsConsumed ?? 0) + fuelUsedSinceLastTick); fuelRemaining -= fuelUsedSinceLastTick; } @@ -669,18 +574,11 @@ public class HideoutHelper( if (fuelRemaining > 0) { // Deducted all used fuel from this container, clean up and exit loop - fuelItemInSlot.Upd = GetAreaUpdObject( - 1, - fuelRemaining, - pointsConsumed, - isFuelItemFoundInRaid - ); + fuelItemInSlot.Upd = GetAreaUpdObject(1, fuelRemaining, pointsConsumed, isFuelItemFoundInRaid); if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Profile: {pmcData.Id} Generator has: {fuelRemaining} fuel left in slot {i + 1}" - ); + logger.Debug($"Profile: {pmcData.Id} Generator has: {fuelRemaining} fuel left in slot {i + 1}"); } hasFuelRemaining = true; @@ -705,12 +603,7 @@ public class HideoutHelper( } } - protected void UpdateWaterCollector( - MongoId sessionId, - PmcData pmcData, - BotHideoutArea area, - HideoutProperties hideoutProperties - ) + protected void UpdateWaterCollector(MongoId sessionId, PmcData pmcData, BotHideoutArea area, HideoutProperties hideoutProperties) { // Skip water collector when not level 3 (cant collect until 3) if (area.Level != 3) @@ -730,11 +623,7 @@ public class HideoutHelper( ) { // Update craft time to account for increases in players craft time skill - purifiedWaterCraft.ProductionTime = GetAdjustedCraftTimeWithSkills( - pmcData, - purifiedWaterCraft.RecipeId, - true - ); + purifiedWaterCraft.ProductionTime = GetAdjustedCraftTimeWithSkills(pmcData, purifiedWaterCraft.RecipeId, true); UpdateWaterFilters(area, purifiedWaterCraft, hideoutProperties.IsGeneratorOn, pmcData); } @@ -762,22 +651,14 @@ public class HideoutHelper( /// Recipe being crafted /// Should the hideout management bonus be applied to the calculation /// Items craft time with bonuses subtracted - public double? GetAdjustedCraftTimeWithSkills( - PmcData pmcData, - MongoId recipeId, - bool applyHideoutManagementBonus = false - ) + public double? GetAdjustedCraftTimeWithSkills(PmcData pmcData, MongoId recipeId, bool applyHideoutManagementBonus = false) { var globalSkillsDb = databaseService.GetGlobals().Configuration.SkillsSettings; - var recipe = databaseService - .GetHideout() - .Production.Recipes.FirstOrDefault(production => production.Id == recipeId); + var recipe = databaseService.GetHideout().Production.Recipes.FirstOrDefault(production => production.Id == recipeId); if (recipe is null) { - logger.Error( - serverLocalisationService.GetText("hideout-missing_recipe_in_db", recipeId) - ); + logger.Error(serverLocalisationService.GetText("hideout-missing_recipe_in_db", recipeId)); return null; } @@ -829,12 +710,7 @@ public class HideoutHelper( /// Production object /// Is generator enabled /// Player profile - protected void UpdateWaterFilters( - BotHideoutArea waterFilterArea, - Production production, - bool isGeneratorOn, - PmcData pmcData - ) + protected void UpdateWaterFilters(BotHideoutArea waterFilterArea, Production production, bool isGeneratorOn, PmcData pmcData) { var filterDrainRate = GetWaterFilterDrainRate(pmcData); var craftProductionTime = GetTotalProductionTimeSeconds(WaterCollectorId); @@ -876,8 +752,7 @@ public class HideoutHelper( } else { - pointsConsumed = - (waterFilterItemInSlot.Upd.Resource.UnitsConsumed ?? 0) + filterDrainRate; + pointsConsumed = (waterFilterItemInSlot.Upd.Resource.UnitsConsumed ?? 0) + filterDrainRate; resourceValue -= filterDrainRate; } @@ -898,12 +773,7 @@ public class HideoutHelper( var isWaterFilterFoundInRaid = waterFilterItemInSlot.Upd?.SpawnedInSession ?? false; // Set filters consumed amount - waterFilterItemInSlot.Upd = GetAreaUpdObject( - 1, - resourceValue, - pointsConsumed, - isWaterFilterFoundInRaid - ); + waterFilterItemInSlot.Upd = GetAreaUpdObject(1, resourceValue, pointsConsumed, isWaterFilterFoundInRaid); if (logger.IsLogEnabled(LogLevel.Debug)) { logger.Debug($"Water filter has: {resourceValue} units left in slot {i + 1}"); @@ -983,10 +853,7 @@ public class HideoutHelper( /// Seconds to produce item protected double GetTotalProductionTimeSeconds(MongoId prodId) { - return databaseService - .GetHideout() - .Production.Recipes.FirstOrDefault(prod => prod.Id == prodId) - ?.ProductionTime ?? 0; + return databaseService.GetHideout().Production.Recipes.FirstOrDefault(prod => prod.Id == prodId)?.ProductionTime ?? 0; } /// @@ -997,38 +864,24 @@ public class HideoutHelper( /// /// /// Upd - protected Upd GetAreaUpdObject( - double stackCount, - double? resourceValue, - double resourceUnitsConsumed, - bool isFoundInRaid - ) + protected Upd GetAreaUpdObject(double stackCount, double? resourceValue, double resourceUnitsConsumed, bool isFoundInRaid) { return new Upd { StackObjectsCount = stackCount, - Resource = new UpdResource - { - Value = resourceValue, - UnitsConsumed = resourceUnitsConsumed, - }, + Resource = new UpdResource { Value = resourceValue, UnitsConsumed = resourceUnitsConsumed }, SpawnedInSession = isFoundInRaid, }; } - protected void UpdateAirFilters( - BotHideoutArea airFilterArea, - PmcData pmcData, - bool isGeneratorOn - ) + protected void UpdateAirFilters(BotHideoutArea airFilterArea, PmcData pmcData, bool isGeneratorOn) { // 300 resources last 20 hrs, 300/20/60/60 = 0.00416 // 10-10-2021 from WIKI (https://escapefromtarkov.fandom.com/wiki/FP-100_filter_absorber) // Lasts for 17 hours 38 minutes and 49 seconds (23 hours 31 minutes and 45 seconds with elite hideout management skill), // 300/17.64694/60/60 = 0.004722 var filterDrainRate = - databaseService.GetHideout().Settings.AirFilterUnitFlowRate - * GetTimeElapsedSinceLastServerTick(pmcData, isGeneratorOn); + databaseService.GetHideout().Settings.AirFilterUnitFlowRate * GetTimeElapsedSinceLastServerTick(pmcData, isGeneratorOn); // Hideout management resource consumption bonus: var hideoutManagementConsumptionBonus = 1.0 - GetHideoutManagementConsumptionBonus(pmcData); @@ -1053,10 +906,7 @@ public class HideoutHelper( } else { - pointsConsumed = - (airFilterArea.Slots[i].Items[0].Upd.Resource.UnitsConsumed ?? 0) - + filterDrainRate - ?? 0; + pointsConsumed = (airFilterArea.Slots[i].Items[0].Upd.Resource.UnitsConsumed ?? 0) + filterDrainRate ?? 0; resourceValue -= filterDrainRate; } @@ -1075,11 +925,7 @@ public class HideoutHelper( airFilterArea.Slots[i].Items[0].Upd = new Upd { StackObjectsCount = 1, - Resource = new UpdResource - { - Value = resourceValue, - UnitsConsumed = pointsConsumed, - }, + Resource = new UpdResource { Value = resourceValue, UnitsConsumed = pointsConsumed }, }; if (logger.IsLogEnabled(LogLevel.Debug)) { @@ -1102,12 +948,7 @@ public class HideoutHelper( /// Hideout btc craft /// /// Is hideout generator powered - protected void UpdateBitcoinFarm( - PmcData pmcData, - Production? btcProduction, - int? btcFarmCGs, - bool isGeneratorOn - ) + protected void UpdateBitcoinFarm(PmcData pmcData, Production? btcProduction, int? btcFarmCGs, bool isGeneratorOn) { if (btcProduction is null) { @@ -1180,11 +1021,8 @@ public class HideoutHelper( // BSG finally fixed their settings, they now get loaded from the settings and used in the client var adjustedCraftTime = - ( - profileHelper.IsDeveloperAccount(pmcData.SessionId.Value) - ? 40 - : bitcoinProdData.ProductionTime - ) / (1 + (btcFarmCGs - 1) * databaseService.GetHideout().Settings.GpuBoostRate); + (profileHelper.IsDeveloperAccount(pmcData.SessionId.Value) ? 40 : bitcoinProdData.ProductionTime) + / (1 + (btcFarmCGs - 1) * databaseService.GetHideout().Settings.GpuBoostRate); // The progress should be adjusted based on the GPU boost rate, but the target is still the base productionTime var timeMultiplier = bitcoinProdData.ProductionTime / adjustedCraftTime; @@ -1235,20 +1073,14 @@ public class HideoutHelper( /// Is the generator on for the duration of elapsed time /// Hideout production recipe being crafted we need the ticks for /// Amount of time elapsed in seconds - protected long? GetTimeElapsedSinceLastServerTick( - PmcData pmcData, - bool isGeneratorOn, - HideoutProduction? recipe = null - ) + protected long? GetTimeElapsedSinceLastServerTick(PmcData pmcData, bool isGeneratorOn, HideoutProduction? recipe = null) { // Reduce time elapsed (and progress) when generator is off var timeElapsed = timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp; if (recipe is not null) { - var hideoutArea = databaseService - .GetHideout() - .Areas.FirstOrDefault(area => area.Type == recipe.AreaType); + var hideoutArea = databaseService.GetHideout().Areas.FirstOrDefault(area => area.Type == recipe.AreaType); if (!(hideoutArea.NeedsFuel ?? false)) // e.g. Lavatory works at 100% when power is on / off { @@ -1258,9 +1090,7 @@ public class HideoutHelper( if (!isGeneratorOn) { - timeElapsed = (long)( - timeElapsed * databaseService.GetHideout().Settings.GeneratorSpeedWithoutFuel - ); + timeElapsed = (long)(timeElapsed * databaseService.GetHideout().Settings.GeneratorSpeedWithoutFuel); } return timeElapsed; @@ -1277,10 +1107,7 @@ public class HideoutHelper( .GetHideout() .Production.Recipes.FirstOrDefault(production => production.Id == BitcoinProductionId); var productionSlots = bitcoinProductions?.ProductionLimitCount ?? 3; // Default to 3 if none found - var hasManagementSkillSlots = profileHelper.HasEliteSkillLevel( - SkillTypes.HideoutManagement, - pmcData - ); + var hasManagementSkillSlots = profileHelper.HasEliteSkillLevel(SkillTypes.HideoutManagement, pmcData); var managementSlotsCount = GetEliteSkillAdditionalBitcoinSlotCount() ?? 2; return productionSlots + (hasManagementSkillSlots ? managementSlotsCount : 0); @@ -1291,9 +1118,7 @@ public class HideoutHelper( /// protected double? GetEliteSkillAdditionalBitcoinSlotCount() { - return databaseService - .GetGlobals() - .Configuration.SkillsSettings.HideoutManagement.EliteSlots.BitcoinFarm.Container; + return databaseService.GetGlobals().Configuration.SkillsSettings.HideoutManagement.EliteSlots.BitcoinFarm.Container; } /// @@ -1317,9 +1142,7 @@ public class HideoutHelper( roundedLevel = roundedLevel == 51 ? roundedLevel - 1 : roundedLevel; return roundedLevel - * databaseService - .GetGlobals() - .Configuration.SkillsSettings.HideoutManagement.ConsumptionReductionPerLevel + * databaseService.GetGlobals().Configuration.SkillsSettings.HideoutManagement.ConsumptionReductionPerLevel / 100; } @@ -1330,11 +1153,7 @@ public class HideoutHelper( /// Player skill from profile /// Value from globals.config.SkillsSettings - `PerLevel` /// Multiplier from 0 to 1 - protected double GetSkillBonusMultipliedBySkillLevel( - PmcData pmcData, - SkillTypes skill, - double valuePerLevel - ) + protected double GetSkillBonusMultipliedBySkillLevel(PmcData pmcData, SkillTypes skill, double valuePerLevel) { var profileSkill = pmcData.GetSkillFromProfile(skill); if (profileSkill is null || profileSkill.Progress == 0) @@ -1358,18 +1177,9 @@ public class HideoutHelper( /// Skill bonus to get reduction from /// Skill bonus amount to apply /// Seconds to reduce craft time by - public double GetSkillProductionTimeReduction( - PmcData pmcData, - double productionTime, - SkillTypes skill, - double amountPerLevel - ) + public double GetSkillProductionTimeReduction(PmcData pmcData, double productionTime, SkillTypes skill, double amountPerLevel) { - var skillTimeReductionMultiplier = GetSkillBonusMultipliedBySkillLevel( - pmcData, - skill, - amountPerLevel - ); + var skillTimeReductionMultiplier = GetSkillBonusMultipliedBySkillLevel(pmcData, skill, amountPerLevel); return productionTime * skillTimeReductionMultiplier; } @@ -1382,12 +1192,7 @@ public class HideoutHelper( /// Take production request /// Session id /// Output object to update - public void GetBTC( - PmcData pmcData, - HideoutTakeProductionRequestData request, - MongoId sessionId, - ItemEventRouterResponse output - ) + public void GetBTC(PmcData pmcData, HideoutTakeProductionRequestData request, MongoId sessionId, ItemEventRouterResponse output) { // Get how many coins were crafted and ready to pick up pmcData.Hideout.Production.TryGetValue(BitcoinProductionId, out var bitcoinCraft); @@ -1438,8 +1243,7 @@ public class HideoutHelper( if (pmcData.Hideout.Production[BitcoinProductionId].Products.Count >= coinSlotCount) // Set start to now { - pmcData.Hideout.Production[BitcoinProductionId].StartTimestamp = - timeUtil.GetTimeStamp(); + pmcData.Hideout.Production[BitcoinProductionId].StartTimestamp = timeUtil.GetTimeStamp(); } // Remove crafted coins from production in profile now they've been collected @@ -1465,20 +1269,12 @@ public class HideoutHelper( { foreach (var improvementId in profileData.Hideout.Improvements) { - if ( - !profileData.Hideout.Improvements.TryGetValue( - improvementId.Key, - out var improvementDetails - ) - ) + if (!profileData.Hideout.Improvements.TryGetValue(improvementId.Key, out var improvementDetails)) { continue; } - if ( - improvementDetails.Completed == false - && improvementDetails.ImproveCompleteTimestamp < timeUtil.GetTimeStamp() - ) + if (improvementDetails.Completed == false && improvementDetails.ImproveCompleteTimestamp < timeUtil.GetTimeStamp()) { improvementDetails.Completed = true; } @@ -1491,14 +1287,10 @@ public class HideoutHelper( /// Player profile public void ApplyPlaceOfFameDogtagBonus(PmcData pmcData) { - var fameAreaProfile = pmcData.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.PlaceOfFame - ); + var fameAreaProfile = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.PlaceOfFame); // Get hideout area 16 bonus array - var fameAreaDb = databaseService - .GetHideout() - .Areas.FirstOrDefault(area => area.Type == HideoutAreas.PlaceOfFame); + var fameAreaDb = databaseService.GetHideout().Areas.FirstOrDefault(area => area.Type == HideoutAreas.PlaceOfFame); // Get SkillGroupLevelingBoost object var combatBoostBonusDb = fameAreaDb @@ -1506,21 +1298,15 @@ public class HideoutHelper( .Bonuses.FirstOrDefault(bonus => bonus.Type.ToString() == "SkillGroupLevelingBoost"); // Get SkillGroupLevelingBoost object in profile - var combatBonusProfile = pmcData.Bonuses.FirstOrDefault(bonus => - bonus.Id == combatBoostBonusDb.Id - ); + var combatBonusProfile = pmcData.Bonuses.FirstOrDefault(bonus => bonus.Id == combatBoostBonusDb.Id); // Get all slotted dogtag items - var activeDogtags = pmcData.Inventory.Items.Where(item => - item?.SlotId?.StartsWith("dogtag") ?? false - ); + var activeDogtags = pmcData.Inventory.Items.Where(item => item?.SlotId?.StartsWith("dogtag") ?? false); // Calculate bonus percent (apply hideoutManagement bonus) var hideoutManagementSkill = pmcData.GetSkillFromProfile(SkillTypes.HideoutManagement); var hideoutManagementSkillBonusPercent = 1 + hideoutManagementSkill.Progress / 10000; // 5100 becomes 0.51, add 1 to it, 1.51 - var bonus = - GetDogtagCombatSkillBonusPercent(pmcData, activeDogtags) - * hideoutManagementSkillBonusPercent; + var bonus = GetDogtagCombatSkillBonusPercent(pmcData, activeDogtags) * hideoutManagementSkillBonusPercent; // Update bonus value to above calcualted value combatBonusProfile.Value = Math.Round(bonus ?? 0, 2); @@ -1533,10 +1319,7 @@ public class HideoutHelper( /// Player profile /// Active dogtags in place of fame dogtag slots /// Combat bonus - protected static double GetDogtagCombatSkillBonusPercent( - PmcData pmcData, - IEnumerable activeDogtags - ) + protected static double GetDogtagCombatSkillBonusPercent(PmcData pmcData, IEnumerable activeDogtags) { // Not own dogtag // Side = opposite of player @@ -1583,8 +1366,6 @@ public class HideoutHelper( } // Remove the wall bonuses from profile by id - pmcData.Bonuses = pmcData - .Bonuses.Where(bonus => !bonusIdsToRemove.Contains(bonus.Id)) - .ToList(); + pmcData.Bonuses = pmcData.Bonuses.Where(bonus => !bonusIdsToRemove.Contains(bonus.Id)).ToList(); } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs index 28c49bc3..f689352d 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs @@ -13,23 +13,11 @@ using SPTarkov.Server.Core.Utils.Cloners; namespace SPTarkov.Server.Core.Helpers; [Injectable] -public class InRaidHelper( - InventoryHelper inventoryHelper, - ConfigServer configServer, - ICloner cloner, - DatabaseService databaseService -) +public class InRaidHelper(InventoryHelper inventoryHelper, ConfigServer configServer, ICloner cloner, DatabaseService databaseService) { - protected static readonly FrozenSet _pocketSlots = - [ - "pocket1", - "pocket2", - "pocket3", - "pocket4", - ]; + protected static readonly FrozenSet _pocketSlots = ["pocket1", "pocket2", "pocket3", "pocket4"]; protected readonly InRaidConfig _inRaidConfig = configServer.GetConfig(); - protected readonly LostOnDeathConfig _lostOnDeathConfig = - configServer.GetConfig(); + protected readonly LostOnDeathConfig _lostOnDeathConfig = configServer.GetConfig(); /// /// Deprecated. Reset the skill points earned in a raid to 0, ready for next raid. @@ -54,40 +42,22 @@ public class InRaidHelper( /// Profile returned by client after a raid /// Indicates if the player survived the raid /// Indicates if it is a transfer operation - public void SetInventory( - MongoId sessionID, - PmcData serverProfile, - PmcData postRaidProfile, - bool isSurvived, - bool isTransfer - ) + public void SetInventory(MongoId sessionID, PmcData serverProfile, PmcData postRaidProfile, bool isSurvived, bool isTransfer) { // Store insurance (as removeItem() removes insured items) var insured = cloner.Clone(serverProfile.InsuredItems); // Remove equipment and loot items stored on player from server profile in preparation for data from client being added - inventoryHelper.RemoveItem( - serverProfile, - serverProfile.Inventory.Equipment.Value, - sessionID - ); + inventoryHelper.RemoveItem(serverProfile, serverProfile.Inventory.Equipment.Value, sessionID); // Remove quest items stored on player from server profile in preparation for data from client being added - inventoryHelper.RemoveItem( - serverProfile, - serverProfile.Inventory.QuestRaidItems.Value, - sessionID - ); + inventoryHelper.RemoveItem(serverProfile, serverProfile.Inventory.QuestRaidItems.Value, sessionID); // Get all items that have a parent of `serverProfile.Inventory.equipment` (All items player had on them at end of raid) - var postRaidInventoryItems = postRaidProfile.Inventory.Items.GetItemWithChildren( - postRaidProfile.Inventory.Equipment.Value - ); + var postRaidInventoryItems = postRaidProfile.Inventory.Items.GetItemWithChildren(postRaidProfile.Inventory.Equipment.Value); // Get all items that have a parent of `serverProfile.Inventory.questRaidItems` (Quest items player had on them at end of raid) - var postRaidQuestItems = postRaidProfile.Inventory.Items.GetItemWithChildren( - postRaidProfile.Inventory.QuestRaidItems.Value - ); + var postRaidQuestItems = postRaidProfile.Inventory.Items.GetItemWithChildren(postRaidProfile.Inventory.QuestRaidItems.Value); // Handle Removing of FIR status if player did not survive + not transferring // Do after above filtering code to reduce work done @@ -119,10 +89,7 @@ public class InRaidHelper( // Has upd object + upd.SpawnedInSession property + not a quest item return (item.Upd?.SpawnedInSession ?? false) && !(dbItems[item.Template].Properties.QuestItem ?? false) - && !( - _inRaidConfig.KeepFiRSecureContainerOnDeath - && item.ItemIsInsideContainer("SecuredContainer", items) - ); + && !(_inRaidConfig.KeepFiRSecureContainerOnDeath && item.ItemIsInsideContainer("SecuredContainer", items)); }); foreach (var item in itemsToRemovePropertyFrom) @@ -139,17 +106,12 @@ public class InRaidHelper( /// /// Items we want to add /// Location to add items to - protected void AddItemsToInventory( - IEnumerable itemsToAdd, - List serverInventoryItems - ) + protected void AddItemsToInventory(IEnumerable itemsToAdd, List serverInventoryItems) { foreach (var itemToAdd in itemsToAdd) { // Try to find index of item to determine if we should add or replace - var existingItemIndex = serverInventoryItems.FindIndex(inventoryItem => - inventoryItem.Id == itemToAdd.Id - ); + var existingItemIndex = serverInventoryItems.FindIndex(inventoryItem => inventoryItem.Id == itemToAdd.Id); if (existingItemIndex != -1) { // Replace existing item @@ -188,11 +150,7 @@ public class InRaidHelper( /// Session id /// Player profile /// Container slot id to find items for and remove FiR from - public void RemoveFiRStatusFromItemsInContainer( - MongoId sessionId, - PmcData pmcData, - string secureContainerSlotId - ) + public void RemoveFiRStatusFromItemsInContainer(MongoId sessionId, PmcData pmcData, string secureContainerSlotId) { if (!pmcData.Inventory.Items.Any(item => item.SlotId == secureContainerSlotId)) { @@ -200,11 +158,7 @@ public class InRaidHelper( } List itemsInsideContainer = []; - foreach ( - var inventoryItem in pmcData.Inventory.Items.Where(item => - item.Upd is not null && item.SlotId != "hideout" - ) - ) + foreach (var inventoryItem in pmcData.Inventory.Items.Where(item => item.Upd is not null && item.SlotId != "hideout")) { if (inventoryItem.ItemIsInsideContainer(secureContainerSlotId, pmcData.Inventory.Items)) { @@ -212,9 +166,7 @@ public class InRaidHelper( } } - foreach ( - var item in itemsInsideContainer.Where(item => item.Upd?.SpawnedInSession ?? false) - ) + foreach (var item in itemsInsideContainer.Where(item => item.Upd?.SpawnedInSession ?? false)) { item.Upd.SpawnedInSession = false; } @@ -247,10 +199,7 @@ public class InRaidHelper( // Pocket items are lost on death // Ensure we don't pick up pocket items from mannequins - if ( - item.SlotId.StartsWith("pocket") - && pmcProfile.DoesItemHaveRootId(item, pmcProfile.Inventory.Equipment.Value) - ) + if (item.SlotId.StartsWith("pocket") && pmcProfile.DoesItemHaveRootId(item, pmcProfile.Inventory.Equipment.Value)) { return true; } @@ -294,19 +243,13 @@ public class InRaidHelper( } // Is quest item + quest item not lost on death - if ( - itemToCheck.ParentId == pmcData.Inventory.QuestRaidItems - && !_lostOnDeathConfig.QuestItems - ) + if (itemToCheck.ParentId == pmcData.Inventory.QuestRaidItems && !_lostOnDeathConfig.QuestItems) { return true; } // special slots are always kept after death - if ( - (itemToCheck.SlotId?.Contains("SpecialSlot") ?? false) - && _lostOnDeathConfig.SpecialSlotItems - ) + if ((itemToCheck.SlotId?.Contains("SpecialSlot") ?? false) && _lostOnDeathConfig.SpecialSlotItems) { return true; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs index 277d32fe..a733c707 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs @@ -33,12 +33,7 @@ public class InventoryHelper( ICloner cloner ) { - private static readonly FrozenSet _variableSizeItemTypes = - [ - BaseClasses.WEAPON, - BaseClasses.FUNCTIONAL_MOD, - BaseClasses.MOD, - ]; + private static readonly FrozenSet _variableSizeItemTypes = [BaseClasses.WEAPON, BaseClasses.FUNCTIONAL_MOD, BaseClasses.MOD]; protected readonly InventoryConfig _inventoryConfig = configServer.GetConfig(); @@ -49,12 +44,7 @@ public class InventoryHelper( /// AddItemsDirectRequest request /// Player profile /// Client response object - public void AddItemsToStash( - MongoId sessionId, - AddItemsDirectRequest request, - PmcData pmcData, - ItemEventRouterResponse output - ) + public void AddItemsToStash(MongoId sessionId, AddItemsDirectRequest request, PmcData pmcData, ItemEventRouterResponse output) { // Check all items fit into inventory before adding if (!CanPlaceItemsInInventory(sessionId, request.ItemsWithModsToAdd)) @@ -95,12 +85,7 @@ public class InventoryHelper( /// AddItemDirect request /// Player profile /// Client response object - public void AddItemToStash( - MongoId sessionId, - AddItemDirectRequest request, - PmcData pmcData, - ItemEventRouterResponse output - ) + public void AddItemToStash(MongoId sessionId, AddItemDirectRequest request, PmcData pmcData, ItemEventRouterResponse output) { var itemWithModsToAddClone = cloner.Clone(request.ItemWithModsToAdd); @@ -131,10 +116,7 @@ public class InventoryHelper( } // Apply/remove FiR to item + mods - SetFindInRaidStatusForItem( - itemWithModsToAddClone, - request.FoundInRaid.GetValueOrDefault(false) - ); + SetFindInRaidStatusForItem(itemWithModsToAddClone, request.FoundInRaid.GetValueOrDefault(false)); // Remove trader properties from root item RemoveTraderRagfairRelatedUpdProperties(itemWithModsToAddClone[0].Upd); @@ -180,9 +162,7 @@ public class InventoryHelper( itemHelper.AddUpdObjectToItem(item); // Ammo / currency can NEVER be FiR or have a 'SpawnedInSession' property - item.Upd.SpawnedInSession = itemHelper.IsOfBaseclass(item.Template, BaseClasses.AMMO) - ? null - : foundInRaid; + item.Upd.SpawnedInSession = itemHelper.IsOfBaseclass(item.Template, BaseClasses.AMMO) ? null : foundInRaid; } } @@ -214,10 +194,7 @@ public class InventoryHelper( /// Player id /// Array of items with children to try and fit /// True all items fit - public bool CanPlaceItemsInInventory( - MongoId sessionId, - IEnumerable> itemsWithChildren - ) + public bool CanPlaceItemsInInventory(MongoId sessionId, IEnumerable> itemsWithChildren) { var pmcData = profileHelper.GetPmcProfile(sessionId); @@ -230,9 +207,7 @@ public class InventoryHelper( } // False if ALL items don't fit - return itemsWithChildren.All(itemWithChildren => - CanPlaceItemInContainer(stashFS2D, itemWithChildren) - ); + return itemsWithChildren.All(itemWithChildren => CanPlaceItemInContainer(stashFS2D, itemWithChildren)); } /// @@ -241,14 +216,9 @@ public class InventoryHelper( /// Container grid to fit items into /// Items to try and fit into grid /// True all fit - public bool CanPlaceItemsInContainer( - int[,] containerFS2D, - IEnumerable> itemsWithChildren - ) + public bool CanPlaceItemsInContainer(int[,] containerFS2D, IEnumerable> itemsWithChildren) { - return itemsWithChildren.All(itemWithChildren => - CanPlaceItemInContainer(containerFS2D, itemWithChildren) - ); + return itemsWithChildren.All(itemWithChildren => CanPlaceItemInContainer(containerFS2D, itemWithChildren)); } /// @@ -279,12 +249,7 @@ public class InventoryHelper( } catch (Exception ex) { - logger.Error( - serverLocalisationService.GetText( - "inventory-unable_to_fit_item_into_inventory", - ex.Message - ) - ); + logger.Error(serverLocalisationService.GetText("inventory-unable_to_fit_item_into_inventory", ex.Message)); return false; } @@ -312,11 +277,7 @@ public class InventoryHelper( { // Get x/y size of item var rootItemAdded = itemWithChildren[0]; - var (sizeX, sizeY) = GetItemSize( - rootItemAdded.Template, - rootItemAdded.Id, - itemWithChildren - ); + var (sizeX, sizeY) = GetItemSize(rootItemAdded.Template, rootItemAdded.Id, itemWithChildren); // Look for a place to slot item into var findSlotResult = containerFS2D.FindSlotForItem(sizeX, sizeY); @@ -334,9 +295,7 @@ public class InventoryHelper( } catch (Exception ex) { - logger.Error( - serverLocalisationService.GetText("inventory-fill_container_failed", ex.Message) - ); + logger.Error(serverLocalisationService.GetText("inventory-fill_container_failed", ex.Message)); return findSlotResult; } @@ -348,9 +307,7 @@ public class InventoryHelper( { X = findSlotResult.X, Y = findSlotResult.Y, - R = findSlotResult.Rotation.GetValueOrDefault(false) - ? ItemRotation.Vertical - : ItemRotation.Horizontal, + R = findSlotResult.Rotation.GetValueOrDefault(false) ? ItemRotation.Vertical : ItemRotation.Horizontal, Rotation = findSlotResult.Rotation, }; @@ -446,9 +403,7 @@ public class InventoryHelper( { X = findSortingSlotResult.X, Y = findSortingSlotResult.Y, - R = findSortingSlotResult.Rotation.Value - ? ItemRotation.Vertical - : ItemRotation.Horizontal, + R = findSortingSlotResult.Rotation.Value ? ItemRotation.Vertical : ItemRotation.Horizontal, Rotation = findSortingSlotResult.Rotation, }; } @@ -464,14 +419,9 @@ public class InventoryHelper( protected void HandleContainerPlacementError(string errorText, ItemEventRouterResponse output) { - logger.Error( - serverLocalisationService.GetText("inventory-fill_container_failed", errorText) - ); + logger.Error(serverLocalisationService.GetText("inventory-fill_container_failed", errorText)); - httpResponseUtil.AppendErrorToOutput( - output, - serverLocalisationService.GetText("inventory-no_stash_space") - ); + httpResponseUtil.AppendErrorToOutput(output, serverLocalisationService.GetText("inventory-no_stash_space")); } /// @@ -483,18 +433,11 @@ public class InventoryHelper( /// Items id to remove /// Session id /// OPTIONAL - ItemEventRouterResponse - public void RemoveItem( - PmcData profile, - MongoId itemId, - MongoId sessionId, - ItemEventRouterResponse? output = null - ) + public void RemoveItem(PmcData profile, MongoId itemId, MongoId sessionId, ItemEventRouterResponse? output = null) { if (itemId.IsEmpty()) { - logger.Warning( - serverLocalisationService.GetText("inventory-unable_to_remove_item_no_id_given") - ); + logger.Warning(serverLocalisationService.GetText("inventory-unable_to_remove_item_no_id_given")); return; } @@ -526,9 +469,7 @@ public class InventoryHelper( { // We expect that each inventory item and each insured item has unique "_id", respective "itemId". // Therefore, we want to use a NON-Greedy function and escape the iteration as soon as we find requested item. - var inventoryIndex = inventoryItems.FindIndex(inventoryItem => - inventoryItem.Id == item.Id - ); + var inventoryIndex = inventoryItems.FindIndex(inventoryItem => inventoryItem.Id == item.Id); if (inventoryIndex != -1) { inventoryItems.RemoveAt(inventoryIndex); @@ -543,9 +484,7 @@ public class InventoryHelper( ); } - var insuredItemIndex = insuredItems.FindIndex(insuredItem => - insuredItem.ItemId == item.Id - ); + var insuredItemIndex = insuredItems.FindIndex(insuredItem => insuredItem.ItemId == item.Id); if (insuredItemIndex != -1) { insuredItems.RemoveAt(insuredItemIndex); @@ -571,15 +510,11 @@ public class InventoryHelper( var dialogs = fullProfile.DialogueRecords; foreach (var (_, dialog) in dialogs) { - var messageWithReward = dialog.Messages.FirstOrDefault(message => - message.Id == removeRequest.FromOwner.Id - ); + var messageWithReward = dialog.Messages.FirstOrDefault(message => message.Id == removeRequest.FromOwner.Id); if (messageWithReward is not null) { // Find item + any possible children and remove them from mails items array - var itemWithChildren = messageWithReward.Items.Data.GetItemWithChildren( - removeRequest.Item - ); + var itemWithChildren = messageWithReward.Items.Data.GetItemWithChildren(removeRequest.Item); foreach (var itemToDelete in itemWithChildren) { // Get index of item to remove from reward array + remove it @@ -589,11 +524,7 @@ public class InventoryHelper( logger.Error( serverLocalisationService.GetText( "inventory-unable_to_remove_item_restart_immediately", - new - { - item = removeRequest.Item, - mailId = removeRequest.FromOwner.Id, - } + new { item = removeRequest.Item, mailId = removeRequest.FromOwner.Id } ) ); @@ -687,46 +618,33 @@ public class InventoryHelper( /// Items id /// Hashmap of inventory items /// An array representing the [width, height] of the item - protected (int, int) GetSizeByInventoryItemHash( - MongoId itemTpl, - MongoId itemId, - InventoryItemHash inventoryItemHash - ) + protected (int, int) GetSizeByInventoryItemHash(MongoId itemTpl, MongoId itemId, InventoryItemHash inventoryItemHash) { // Invalid item var (isValidItem, itemTemplate) = itemHelper.GetItem(itemTpl); if (!isValidItem) { - logger.Error( - serverLocalisationService.GetText("inventory-invalid_item_missing_from_db", itemTpl) - ); + logger.Error(serverLocalisationService.GetText("inventory-invalid_item_missing_from_db", itemTpl)); } // Item found but no _props property if (isValidItem && itemTemplate.Properties is null) { - serverLocalisationService.GetText( - "inventory-item_missing_props_property", - new { itemTpl, itemName = itemTemplate?.Name } - ); + serverLocalisationService.GetText("inventory-item_missing_props_property", new { itemTpl, itemName = itemTemplate?.Name }); } // No item object or getItem() returned false if (!isValidItem && itemTemplate is null) { // return default size of 1x1 - logger.Error( - serverLocalisationService.GetText("inventory-return_default_size", itemTpl) - ); + logger.Error(serverLocalisationService.GetText("inventory-return_default_size", itemTpl)); return (1, 1); // Invalid input data, return defaults } if (!inventoryItemHash.ByItemId.TryGetValue(itemId, out var rootItem)) { - logger.Error( - $"Unable to get root item with Id: {itemId} from player inventory. Defaulting to 1x1" - ); + logger.Error($"Unable to get root item with Id: {itemId} from player inventory. Defaulting to 1x1"); return (1, 1); // Invalid input data, return defaults } @@ -772,9 +690,7 @@ public class InventoryHelper( foreach (var childItem in children) { // Skip mods that don't increase size. e.g. cartridges - if ( - !childItem.SlotId.StartsWith("mod_", StringComparison.OrdinalIgnoreCase) - ) + if (!childItem.SlotId.StartsWith("mod_", StringComparison.OrdinalIgnoreCase)) { continue; } @@ -787,24 +703,14 @@ public class InventoryHelper( if (!isValid) { logger.Error( - serverLocalisationService.GetText( - "inventory-get_item_size_item_not_found_by_tpl", - childItem.Template - ) + serverLocalisationService.GetText("inventory-get_item_size_item_not_found_by_tpl", childItem.Template) ); } - var childCanBeFolded = template.Properties.Foldable.GetValueOrDefault( - false - ); - var childIsFolded = - childItem.Upd?.Foldable?.Folded.GetValueOrDefault(false) ?? false; + var childCanBeFolded = template.Properties.Foldable.GetValueOrDefault(false); + var childIsFolded = childItem.Upd?.Foldable?.Folded.GetValueOrDefault(false) ?? false; - if ( - rootCanBeFolded - && foldedSlot == childItem.SlotId - && (rootIsFolded || childIsFolded) - ) + if (rootCanBeFolded && foldedSlot == childItem.SlotId && (rootIsFolded || childIsFolded)) { continue; } @@ -825,22 +731,11 @@ public class InventoryHelper( } else { - sizeUp = - sizeUp < template.Properties.ExtraSizeUp - ? template.Properties.ExtraSizeUp.Value - : sizeUp; - sizeDown = - sizeDown < template.Properties.ExtraSizeDown - ? template.Properties.ExtraSizeDown.Value - : sizeDown; - sizeLeft = - sizeLeft < template.Properties.ExtraSizeLeft - ? template.Properties.ExtraSizeLeft.Value - : sizeLeft; + sizeUp = sizeUp < template.Properties.ExtraSizeUp ? template.Properties.ExtraSizeUp.Value : sizeUp; + sizeDown = sizeDown < template.Properties.ExtraSizeDown ? template.Properties.ExtraSizeDown.Value : sizeDown; + sizeLeft = sizeLeft < template.Properties.ExtraSizeLeft ? template.Properties.ExtraSizeLeft.Value : sizeLeft; sizeRight = - sizeRight < template.Properties.ExtraSizeRight - ? template.Properties.ExtraSizeRight.Value - : sizeRight; + sizeRight < template.Properties.ExtraSizeRight ? template.Properties.ExtraSizeRight.Value : sizeRight; } } } @@ -850,10 +745,7 @@ public class InventoryHelper( } } - return ( - outX.Value + sizeLeft + sizeRight + forcedLeft + forcedRight, - outY.Value + sizeUp + sizeDown + forcedUp + forcedDown - ); + return (outX.Value + sizeLeft + sizeRight + forcedLeft + forcedRight, outY.Value + sizeUp + sizeDown + forcedUp + forcedDown); } /// @@ -864,12 +756,7 @@ public class InventoryHelper( /// Players inventory items /// Id of the container /// Two-dimensional representation of container - public int[,] GetContainerMap( - int containerSizeHorizontalX, - int containerSizeVerticalY, - IEnumerable itemList, - MongoId containerId - ) + public int[,] GetContainerMap(int containerSizeHorizontalX, int containerSizeVerticalY, IEnumerable itemList, MongoId containerId) { // Create blank 2d map of container var container = itemHelper.GetBlankContainerMap( @@ -894,19 +781,13 @@ public class InventoryHelper( if (itemLocation is null) { // Item has no location property - logger.Error( - $"Unable to find 'location' property on item with id: {rootItem.Id}, skipping" - ); + logger.Error($"Unable to find 'location' property on item with id: {rootItem.Id}, skipping"); continue; } // Get x/y size of item (without rotation) - var (rawItemXWidth, rawItemYHeight) = GetSizeByInventoryItemHash( - rootItem.Template, - rootItem.Id, - inventoryItemHash - ); + var (rawItemXWidth, rawItemYHeight) = GetSizeByInventoryItemHash(rootItem.Template, rootItem.Id, inventoryItemHash); // Items horizontal size var itemHeight = itemLocation.IsVertical() ? rawItemXWidth : rawItemYHeight; @@ -923,12 +804,7 @@ public class InventoryHelper( var currentX = itemLocation.X.Value + xOffset; // Check still in containers bounds - if ( - currentY >= 0 - && currentY < containerSizeVerticalY - && currentX >= 0 - && currentX < containerSizeHorizontalX - ) + if (currentY >= 0 && currentY < containerSizeVerticalY && currentX >= 0 && currentX < containerSizeHorizontalX) { // mark slot used container[currentY, currentX] = 1; @@ -965,11 +841,7 @@ public class InventoryHelper( /// Item being moved/split/etc to inventory /// Session id / players Id /// OwnerInventoryItems with inventory of player/scav to adjust - public OwnerInventoryItems GetOwnerInventoryItems( - InventoryBaseActionRequestData request, - MongoId itemId, - MongoId sessionId - ) + public OwnerInventoryItems GetOwnerInventoryItems(InventoryBaseActionRequestData request, MongoId itemId, MongoId sessionId) { var pmcItems = profileHelper.GetPmcProfile(sessionId).Inventory.Items; var scavProfile = profileHelper.GetScavProfile(sessionId); @@ -983,16 +855,10 @@ public class InventoryHelper( fromInventoryItems = scavProfile.Inventory.Items; fromType = "scav"; } - else if ( - string.Equals(request.FromOwner.Type, "mail", StringComparison.OrdinalIgnoreCase) - ) + else if (string.Equals(request.FromOwner.Type, "mail", StringComparison.OrdinalIgnoreCase)) { // Split requests don't use 'use' but 'splitItem' property - fromInventoryItems = dialogueHelper.GetMessageItemContents( - request.FromOwner.Id.Value, - sessionId, - itemId - ); + fromInventoryItems = dialogueHelper.GetMessageItemContents(request.FromOwner.Id.Value, sessionId, itemId); fromType = "mail"; } } @@ -1030,12 +896,7 @@ public class InventoryHelper( protected int[,] GetStashSlotMap(PmcData pmcData) { var (horizontal, vertical) = GetPlayerStashSize(pmcData); - return GetContainerMap( - horizontal, - vertical, - pmcData.Inventory.Items, - pmcData.Inventory.Stash.Value - ); + return GetContainerMap(horizontal, vertical, pmcData.Inventory.Items, pmcData.Inventory.Stash.Value); } /// @@ -1061,12 +922,7 @@ public class InventoryHelper( /// two-dimensional array protected int[,] GetSortingTableSlotMap(PmcData pmcData) { - return GetContainerMap( - 10, - 45, - pmcData.Inventory.Items, - pmcData.Inventory.SortingTable.Value - ); + return GetContainerMap(10, 45, pmcData.Inventory.Items, pmcData.Inventory.SortingTable.Value); } /// @@ -1103,9 +959,7 @@ public class InventoryHelper( var stashV = firstStashItemGrid.Props.CellsV != 0 ? firstStashItemGrid.Props.CellsV : 66; // Player has a bonus, apply to vertical size - var stashRowBonus = pmcData.Bonuses.FirstOrDefault(bonus => - bonus.Type == BonusType.StashRows - ); + var stashRowBonus = pmcData.Bonuses.FirstOrDefault(bonus => bonus.Type == BonusType.StashRows); if (stashRowBonus is not null) { stashV += (int)stashRowBonus.Value; @@ -1121,9 +975,7 @@ public class InventoryHelper( /// Stash tpl protected string? GetProfileStashTpl(PmcData profile) { - var stashObj = profile.Inventory.Items.FirstOrDefault(item => - item.Id == profile.Inventory.Stash - ); + var stashObj = profile.Inventory.Items.FirstOrDefault(item => item.Id == profile.Inventory.Stash); if (stashObj is null) { logger.Error(serverLocalisationService.GetText("inventory-unable_to_find_stash")); @@ -1138,11 +990,7 @@ public class InventoryHelper( /// Inventory of the source (can be non-player) /// Inventory of the destination /// Move request - public void MoveItemToProfile( - List sourceItems, - List toItems, - InventoryMoveRequestData request - ) + public void MoveItemToProfile(List sourceItems, List toItems, InventoryMoveRequestData request) { HandleCartridgeMove(sourceItems, request); @@ -1153,12 +1001,7 @@ public class InventoryHelper( var itemToMove = sourceItems.FirstOrDefault(item => item.Id == itemId); if (itemToMove is null) { - logger.Error( - serverLocalisationService.GetText( - "inventory-unable_to_find_item_to_move", - itemId - ) - ); + logger.Error(serverLocalisationService.GetText("inventory-unable_to_find_item_to_move", itemId)); continue; } @@ -1196,13 +1039,10 @@ public class InventoryHelper( HandleCartridgeMove(inventoryItems, moveRequest); // Find item we want to 'move' - var matchingInventoryItem = inventoryItems.FirstOrDefault(item => - item.Id == moveRequest.Item - ); + var matchingInventoryItem = inventoryItems.FirstOrDefault(item => item.Id == moveRequest.Item); if (matchingInventoryItem is null) { - var noMatchingItemMessage = - $"Unable to move item: {moveRequest.Item}, cannot find in inventory"; + var noMatchingItemMessage = $"Unable to move item: {moveRequest.Item}, cannot find in inventory"; logger.Error(noMatchingItemMessage); errorMessage = noMatchingItemMessage; @@ -1217,19 +1057,12 @@ public class InventoryHelper( } // Don't move shells from camora to cartridges (happens when loading shells into mts-255 revolver shotgun) - if ( - matchingInventoryItem.SlotId?.Contains("camora_") is null - && moveRequest.To.Container == "cartridges" - ) + if (matchingInventoryItem.SlotId?.Contains("camora_") is null && moveRequest.To.Container == "cartridges") { logger.Warning( serverLocalisationService.GetText( "inventory-invalid_move_to_container", - new - { - slotId = matchingInventoryItem.SlotId, - container = moveRequest.To.Container, - } + new { slotId = matchingInventoryItem.SlotId, container = moveRequest.To.Container } ) ); @@ -1275,9 +1108,7 @@ public class InventoryHelper( } // Get moved items parent (should be container item was put into) - var itemParent = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == itemBeingMoved.ParentId - ); + var itemParent = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == itemBeingMoved.ParentId); if (itemParent is null) { return; @@ -1285,9 +1116,7 @@ public class InventoryHelper( // Reset fast panel value if item was moved to a container other than pocket/rig (cant be used from fastpanel) HashSet slots = ["pockets", "tacticalvest"]; - var wasMovedToFastPanelAccessibleContainer = slots.Contains( - itemParent?.SlotId?.ToLowerInvariant() ?? "" - ); + var wasMovedToFastPanelAccessibleContainer = slots.Contains(itemParent?.SlotId?.ToLowerInvariant() ?? ""); if (!wasMovedToFastPanelAccessibleContainer) { pmcData.Inventory.FastPanel[fastPanelSlot.ToString()] = ""; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs index 4931d949..2fe3370d 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs @@ -101,12 +101,7 @@ public class ItemHelper( "right_side_plate", ]; - protected static readonly FrozenSet _armorSlotsThatCanHoldMods = - [ - BaseClasses.HEADWEAR, - BaseClasses.VEST, - BaseClasses.ARMOR, - ]; + protected static readonly FrozenSet _armorSlotsThatCanHoldMods = [BaseClasses.HEADWEAR, BaseClasses.VEST, BaseClasses.ARMOR]; /// /// Does the provided pool of items contain the desired item @@ -120,9 +115,7 @@ public class ItemHelper( // Filter the pool by slotId if provided var filteredPool = string.IsNullOrEmpty(slotId) ? itemPool - : itemPool.Where(itemInPool => - itemInPool.SlotId?.StartsWith(slotId, StringComparison.OrdinalIgnoreCase) ?? false - ); + : itemPool.Where(itemInPool => itemInPool.SlotId?.StartsWith(slotId, StringComparison.OrdinalIgnoreCase) ?? false); // Check if any item in the filtered pool matches the provided item return filteredPool.Any(poolItem => poolItem.Template == itemTpl); @@ -140,9 +133,7 @@ public class ItemHelper( // Filter the pool by slotId if provided var filteredPool = string.IsNullOrEmpty(slotId) ? itemPool - : itemPool.Where(item => - item.SlotId?.StartsWith(slotId, StringComparison.OrdinalIgnoreCase) ?? false - ); + : itemPool.Where(item => item.SlotId?.StartsWith(slotId, StringComparison.OrdinalIgnoreCase) ?? false); // Check if any item in the filtered pool matches the provided item return filteredPool.FirstOrDefault(poolItem => poolItem.Template == tpl); @@ -156,11 +147,7 @@ public class ItemHelper( /// second item with all its children to compare /// Upd properties to compare between the items /// true if they are the same - public bool IsSameItems( - ICollection item1, - ICollection item2, - ISet? compareUpdProperties = null - ) + public bool IsSameItems(ICollection item1, ICollection item2, ISet? compareUpdProperties = null) { if (item1.Count != item2.Count) { @@ -222,30 +209,18 @@ public class ItemHelper( } else { - itemProperties.FireMode = new UpdFireMode - { - FireMode = randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType), - }; + itemProperties.FireMode = new UpdFireMode { FireMode = randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType) }; } } if (itemTemplate.Properties.MaxHpResource is not null) { - itemProperties.MedKit = new UpdMedKit - { - HpResource = itemTemplate.Properties.MaxHpResource, - }; + itemProperties.MedKit = new UpdMedKit { HpResource = itemTemplate.Properties.MaxHpResource }; } - if ( - itemTemplate.Properties.MaxResource is not null - && itemTemplate.Properties.FoodUseTime is not null - ) + if (itemTemplate.Properties.MaxResource is not null && itemTemplate.Properties.FoodUseTime is not null) { - itemProperties.FoodDrink = new UpdFoodDrink - { - HpPercent = itemTemplate.Properties.MaxResource, - }; + itemProperties.FoodDrink = new UpdFoodDrink { HpPercent = itemTemplate.Properties.MaxResource }; } if (itemTemplate.Parent == BaseClasses.FLASHLIGHT) @@ -263,10 +238,7 @@ public class ItemHelper( } // Toggleable face shield - if ( - (itemTemplate.Properties.HasHinge ?? false) - && (itemTemplate.Properties.FaceShieldComponent ?? false) - ) + if ((itemTemplate.Properties.HasHinge ?? false) && (itemTemplate.Properties.FaceShieldComponent ?? false)) { itemProperties.Togglable = new UpdTogglable { On = false }; } @@ -374,9 +346,7 @@ public class ItemHelper( var itemTemplate = GetItem(itemTpl); return itemTemplate.Value?.Properties?.Slots is not null - && itemTemplate.Value.Properties.Slots.Any(slot => - _removablePlateSlotIds.Contains(slot.Name.ToLowerInvariant()) - ); + && itemTemplate.Value.Properties.Slots.Any(slot => _removablePlateSlotIds.Contains(slot.Name.ToLowerInvariant())); } /// @@ -406,11 +376,7 @@ public class ItemHelper( } // Check if item has slots that match soft insert name ids - if ( - itemDbDetails.Value.Properties.Slots.Any(slot => - IsSoftInsertId(slot.Name.ToLowerInvariant()) - ) - ) + if (itemDbDetails.Value.Properties.Slots.Any(slot => IsSoftInsertId(slot.Name.ToLowerInvariant()))) { return true; } @@ -446,10 +412,7 @@ public class ItemHelper( public double GetItemAndChildrenPrice(IEnumerable tpls) { // Run getItemPrice for each tpl in tpls array, return sum - return tpls.Aggregate( - 0, - (total, tpl) => total + (int)GetItemPrice(tpl).GetValueOrDefault(0) - ); + return tpls.Aggregate(0, (total, tpl) => total + (int)GetItemPrice(tpl).GetValueOrDefault(0)); } /// @@ -570,10 +533,7 @@ public class ItemHelper( /// An offers item to process /// Skip over armor items without durability /// % quality modifier between 0 and 1 - public double GetItemQualityModifierForItems( - IEnumerable itemWithChildren, - bool skipArmorItemsWithoutDurability = false - ) + public double GetItemQualityModifierForItems(IEnumerable itemWithChildren, bool skipArmorItemsWithoutDurability = false) { if (IsOfBaseclass(itemWithChildren.First().Template, BaseClasses.WEAPON)) { @@ -620,9 +580,7 @@ public class ItemHelper( var itemDetails = GetItem(item.Template).Value; if (itemDetails?.Properties is null) { - logger.Warning( - $"Item: {item.Template} lacks properties, cannot ascertain quality level, assuming 100%" - ); + logger.Warning($"Item: {item.Template} lacks properties, cannot ascertain quality level, assuming 100%"); return 1; } @@ -641,8 +599,7 @@ public class ItemHelper( if (item.Upd.MedKit is not null) { // Meds - result = - (item.Upd.MedKit.HpResource ?? 0) / (itemDetails.Properties.MaxHpResource ?? 0); + result = (item.Upd.MedKit.HpResource ?? 0) / (itemDetails.Properties.MaxHpResource ?? 0); } else if (item.Upd.Repairable is not null) { @@ -650,13 +607,9 @@ public class ItemHelper( } else if (item.Upd.FoodDrink is not null) { - result = - (item.Upd.FoodDrink.HpPercent ?? 0) / (itemDetails.Properties.MaxResource ?? 0); + result = (item.Upd.FoodDrink.HpPercent ?? 0) / (itemDetails.Properties.MaxResource ?? 0); } - else if ( - item.Upd.Key?.NumberOfUsages > 0 - && itemDetails.Properties.MaximumNumberOfUsage > 0 - ) + else if (item.Upd.Key?.NumberOfUsages > 0 && itemDetails.Properties.MaximumNumberOfUsage > 0) { // keys - keys count upwards, not down like everything else var maxNumOfUsages = itemDetails.Properties.MaximumNumberOfUsage; @@ -669,9 +622,7 @@ public class ItemHelper( } else if (item.Upd.RepairKit is not null) { - result = - (item.Upd.RepairKit.Resource ?? 0) - / (itemDetails.Properties.MaxRepairResource ?? 0); + result = (item.Upd.RepairKit.Resource ?? 0) / (itemDetails.Properties.MaxRepairResource ?? 0); } if (result == 0) @@ -691,11 +642,7 @@ public class ItemHelper( /// Repairable properties /// Item quality value is for /// number between 0 and 1 - protected double GetRepairableItemQualityValue( - TemplateItem itemDetails, - UpdRepairable repairable, - Item item - ) + protected double GetRepairableItemQualityValue(TemplateItem itemDetails, UpdRepairable repairable, Item item) { // Edge case, durability above max if (repairable.Durability > repairable.MaxDurability) @@ -707,18 +654,12 @@ public class ItemHelper( } // Attempt to get the max durability from _props. If not available, use Repairable max durability value instead. - var maxPossibleDurability = - itemDetails.Properties?.MaxDurability ?? repairable.MaxDurability; + var maxPossibleDurability = itemDetails.Properties?.MaxDurability ?? repairable.MaxDurability; var durability = repairable.Durability / maxPossibleDurability; if (durability == 0) { - logger.Error( - serverLocalisationService.GetText( - "item-durability_value_invalid_use_default", - item.Template - ) - ); + logger.Error(serverLocalisationService.GetText("item-durability_value_invalid_use_default", item.Template)); return 1; } @@ -739,14 +680,10 @@ public class ItemHelper( foreach (var itemFromAssort in assort) { // Parent matches desired item + all items in list do not match - if ( - itemFromAssort.ParentId == itemIdToFindString - && list.All(item => itemFromAssort.Id != item.Id) - ) + if (itemFromAssort.ParentId == itemIdToFindString && list.All(item => itemFromAssort.Id != item.Id)) { list.Add(itemFromAssort); - list = list.Concat(FindAndReturnChildrenByAssort(itemFromAssort.Id, assort)) - .ToList(); + list = list.Concat(FindAndReturnChildrenByAssort(itemFromAssort.Id, assort)).ToList(); } } @@ -902,25 +839,17 @@ public class ItemHelper( /// Array of items to iterate over. /// List of desired barter item ids. /// List of Item objects. - public List FindBarterItems( - string by, - IEnumerable itemsToSearch, - IEnumerable desiredBarterItemIds - ) + public List FindBarterItems(string by, IEnumerable itemsToSearch, IEnumerable desiredBarterItemIds) { // Find required items to take after buying (handles multiple items) List matchingItems = []; foreach (var barterId in desiredBarterItemIds) { - var filteredResult = itemsToSearch.Where(item => - by == "tpl" ? item.Template.Equals(barterId) : item.Id.Equals(barterId) - ); + var filteredResult = itemsToSearch.Where(item => by == "tpl" ? item.Template.Equals(barterId) : item.Id.Equals(barterId)); if (!filteredResult.Any()) { - logger.Warning( - serverLocalisationService.GetText("item-helper_no_items_for_barter", barterId) - ); + logger.Warning(serverLocalisationService.GetText("item-helper_no_items_for_barter", barterId)); continue; } @@ -959,10 +888,7 @@ public class ItemHelper( /// /// /// - public void ReplaceProfileInventoryIds( - BotBaseInventory inventory, - IEnumerable? insuredItems = null - ) + public void ReplaceProfileInventoryIds(BotBaseInventory inventory, IEnumerable? insuredItems = null) { // Blacklist var itemIdBlacklist = new HashSet(); @@ -1213,9 +1139,7 @@ public class ItemHelper( if (parentTemplate.Key && parentTemplate.Value?.Properties?.Slots != null) { isRequiredSlot = - parentTemplate.Value?.Properties?.Slots?.Any(slot => - slot?.Name == item?.SlotId && (slot?.Required ?? false) - ) ?? false; + parentTemplate.Value?.Properties?.Slots?.Any(slot => slot?.Name == item?.SlotId && (slot?.Required ?? false)) ?? false; } return itemTemplate.Key && parentTemplate.Key && !(isNotRaidModdable || isRequiredSlot); @@ -1333,22 +1257,10 @@ public class ItemHelper( } else { - sizeUp = - sizeUp < itemTemplate.Properties.ExtraSizeUp - ? itemTemplate.Properties.ExtraSizeUp.Value - : sizeUp; - sizeDown = - sizeDown < itemTemplate.Properties.ExtraSizeDown - ? itemTemplate.Properties.ExtraSizeDown.Value - : sizeDown; - sizeLeft = - sizeLeft < itemTemplate.Properties.ExtraSizeLeft - ? itemTemplate.Properties.ExtraSizeLeft.Value - : sizeLeft; - sizeRight = - sizeRight < itemTemplate.Properties.ExtraSizeRight - ? itemTemplate.Properties.ExtraSizeRight.Value - : sizeRight; + sizeUp = sizeUp < itemTemplate.Properties.ExtraSizeUp ? itemTemplate.Properties.ExtraSizeUp.Value : sizeUp; + sizeDown = sizeDown < itemTemplate.Properties.ExtraSizeDown ? itemTemplate.Properties.ExtraSizeDown.Value : sizeDown; + sizeLeft = sizeLeft < itemTemplate.Properties.ExtraSizeLeft ? itemTemplate.Properties.ExtraSizeLeft.Value : sizeLeft; + sizeRight = sizeRight < itemTemplate.Properties.ExtraSizeRight ? itemTemplate.Properties.ExtraSizeRight.Value : sizeRight; } } @@ -1366,10 +1278,7 @@ public class ItemHelper( /// Valid caliber for cartridge public MongoId? GetRandomCompatibleCaliberTemplateId(TemplateItem item) { - var cartridges = item - ?.Properties?.Cartridges?.FirstOrDefault() - ?.Props?.Filters?.FirstOrDefault() - ?.Filter; + var cartridges = item?.Properties?.Cartridges?.FirstOrDefault()?.Props?.Filters?.FirstOrDefault()?.Filter; if (cartridges is null) { logger.Warning($"Failed to find cartridge for item: {item?.Id} {item?.Name}"); @@ -1387,10 +1296,7 @@ public class ItemHelper( public void AddCartridgesToAmmoBox(List ammoBox, TemplateItem ammoBoxDetails) { var ammoBoxMaxCartridgeCount = ammoBoxDetails.Properties.StackSlots.First().MaxCount; - var cartridgeTpl = ammoBoxDetails - .Properties.StackSlots.First() - .Props.Filters.First() - .Filter.FirstOrDefault(); + var cartridgeTpl = ammoBoxDetails.Properties.StackSlots.First().Props.Filters.First().Filter.FirstOrDefault(); var cartridgeDetails = GetItem(cartridgeTpl); var cartridgeMaxStackSize = cartridgeDetails.Value.Properties.StackMaxSize; @@ -1412,12 +1318,7 @@ public class ItemHelper( var cartridgeCountToAdd = remainingSpace < maxPerStack ? remainingSpace : maxPerStack; // Add cartridge item into items array - var cartridgeItemToAdd = CreateCartridges( - ammoBox[0].Id, - cartridgeTpl, - (int)cartridgeCountToAdd, - location - ); + var cartridgeItemToAdd = CreateCartridges(ammoBox[0].Id, cartridgeTpl, (int)cartridgeCountToAdd, location); // In live no ammo box has the first cartridge item with a location if (location == 0) @@ -1440,13 +1341,8 @@ public class ItemHelper( public void AddSingleStackCartridgesToAmmoBox(List ammoBox, TemplateItem ammoBoxDetails) { var ammoBoxMaxCartridgeCount = ammoBoxDetails.Properties?.StackSlots?.First().MaxCount ?? 0; - var cartridgeTpl = ammoBoxDetails - .Properties?.StackSlots?.First() - .Props?.Filters?.First() - .Filter?.FirstOrDefault(); - ammoBox.Add( - CreateCartridges(ammoBox[0].Id, cartridgeTpl.Value, (int)ammoBoxMaxCartridgeCount, 0) - ); + var cartridgeTpl = ammoBoxDetails.Properties?.StackSlots?.First().Props?.Filters?.First().Filter?.FirstOrDefault(); + ammoBox.Add(CreateCartridges(ammoBox[0].Id, cartridgeTpl.Value, (int)ammoBoxMaxCartridgeCount, 0)); } /// @@ -1482,16 +1378,13 @@ public class ItemHelper( chosenCaliber, staticAmmoDist, defaultCartridgeTpl, - weapon?.Properties?.Chambers?.FirstOrDefault()?.Props?.Filters?.FirstOrDefault()?.Filter - ?? null + weapon?.Properties?.Chambers?.FirstOrDefault()?.Props?.Filters?.FirstOrDefault()?.Filter ?? null ); if (cartridgeTpl is null) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to fill item: {magazine.FirstOrDefault().Id} {magTemplate.Name} with cartridges, none found." - ); + logger.Debug($"Unable to fill item: {magazine.FirstOrDefault().Id} {magTemplate.Name} with cartridges, none found."); } return; @@ -1536,18 +1429,13 @@ public class ItemHelper( // Get max number of cartridges in magazine, choose random value between min/max var magProps = magTemplate.Properties; - var magazineCartridgeMaxCount = IsOfBaseclass( - magTemplate.Id, - BaseClasses.SPRING_DRIVEN_CYLINDER - ) + var magazineCartridgeMaxCount = IsOfBaseclass(magTemplate.Id, BaseClasses.SPRING_DRIVEN_CYLINDER) ? magProps?.Slots?.Count() // Edge case for rotating grenade launcher magazine : magProps?.Cartridges?.FirstOrDefault()?.MaxCount; if (magazineCartridgeMaxCount is null) { - logger.Warning( - $"Magazine: {magTemplate.Id} {magTemplate.Name} lacks a Cartridges array, unable to fill magazine with ammo" - ); + logger.Warning($"Magazine: {magTemplate.Id} {magTemplate.Name} lacks a Cartridges array, unable to fill magazine with ammo"); return; } @@ -1559,9 +1447,7 @@ public class ItemHelper( if (magazineWithChildCartridges.Count > 1) { - logger.Warning( - $"Magazine {magTemplate.Name} already has cartridges defined, this may cause issues" - ); + logger.Warning($"Magazine {magTemplate.Name} already has cartridges defined, this may cause issues"); } // Loop over cartridge count and add stacks to magazine @@ -1570,10 +1456,7 @@ public class ItemHelper( while (currentStoredCartridgeCount < desiredStackCount) { // Get stack size of cartridges - var cartridgeCountToAdd = - desiredStackCount <= cartridgeMaxStackSize - ? desiredStackCount - : cartridgeMaxStackSize; + var cartridgeCountToAdd = desiredStackCount <= cartridgeMaxStackSize ? desiredStackCount : cartridgeMaxStackSize; // Ensure we don't go over the max stackCount size var remainingSpace = desiredStackCount - currentStoredCartridgeCount; @@ -1584,12 +1467,7 @@ public class ItemHelper( // Add cartridge item object into items array magazineWithChildCartridges.Add( - CreateCartridges( - magazineWithChildCartridges[0].Id, - cartridgeTpl, - cartridgeCountToAdd ?? 0, - location - ) + CreateCartridges(magazineWithChildCartridges[0].Id, cartridgeTpl, cartridgeCountToAdd ?? 0, location) ); currentStoredCartridgeCount += cartridgeCountToAdd.Value; @@ -1611,10 +1489,7 @@ public class ItemHelper( protected string? GetRandomValidCaliber(TemplateItem magTemplate) { var ammoTpls = magTemplate.Properties.Cartridges.First().Props.Filters.First().Filter; - var calibers = ammoTpls - .Where(x => GetItem(x).Key) - .Select(x => GetItem(x).Value.Properties.Caliber) - .ToList(); + var calibers = ammoTpls.Where(x => GetItem(x).Key).Select(x => GetItem(x).Value.Properties.Caliber).ToList(); return randomUtil.DrawRandomFromList(calibers).FirstOrDefault(); } @@ -1646,9 +1521,7 @@ public class ItemHelper( return fallbackCartridgeTpl; } - logger.Warning( - $"Unable to pick a cartridge for caliber: {caliber}, staticAmmoDist has no data. No fallback value provided" - ); + logger.Warning($"Unable to pick a cartridge for caliber: {caliber}, staticAmmoDist has no data. No fallback value provided"); return null; } @@ -1663,13 +1536,7 @@ public class ItemHelper( continue; } - ammoArray.Add( - new ProbabilityObject( - icd.Tpl.Value, - (double)icd.RelativeProbability, - null - ) - ); + ammoArray.Add(new ProbabilityObject(icd.Tpl.Value, (double)icd.RelativeProbability, null)); } return ammoArray.Draw().FirstOrDefault(); @@ -1720,10 +1587,7 @@ public class ItemHelper( /// Array of tpls public IEnumerable GetItemTplsOfBaseType(string desiredBaseType) { - return databaseService - .GetItems() - .Values.Where(item => item.Parent == desiredBaseType) - .Select(item => item.Id); + return databaseService.GetItems().Values.Where(item => item.Parent == desiredBaseType).Select(item => item.Id); } /// @@ -1817,10 +1681,7 @@ public class ItemHelper( /// Tpls to randomly choose from /// Incompatible tpls to not allow /// Chosen tpl or undefined - public MongoId? GetCompatibleTplFromArray( - HashSet possibleTpls, - HashSet incompatibleModTpls - ) + public MongoId? GetCompatibleTplFromArray(HashSet possibleTpls, HashSet incompatibleModTpls) { if (!possibleTpls.Any()) { @@ -1891,10 +1752,7 @@ public class ItemHelper( } // Has parentId + no remapping exists for its parent - if ( - mod.ParentId != null - && (!idMappings.ContainsKey(mod.ParentId) || idMappings?[mod.ParentId] is null) - ) + if (mod.ParentId != null && (!idMappings.ContainsKey(mod.ParentId) || idMappings?[mod.ParentId] is null)) // Make remapping for items parentId { idMappings[mod.ParentId] = new MongoId(); @@ -1910,9 +1768,7 @@ public class ItemHelper( // Force item's details into first location of presetItems if (itemWithChildren[0].Template != rootItem.Template) { - logger.Warning( - $"Reassigning root item from {itemWithChildren[0].Template} to {rootItem.Template}" - ); + logger.Warning($"Reassigning root item from {itemWithChildren[0].Template} to {rootItem.Template}"); } itemWithChildren[0] = rootItem; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs index aae23e6e..97697719 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs @@ -31,17 +31,13 @@ public class NotificationSendHelper( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Send message for {sessionID} started, message: {jsonUtil.Serialize(notificationMessage)}" - ); + logger.Debug($"Send message for {sessionID} started, message: {jsonUtil.Serialize(notificationMessage)}"); } if (sptWebSocketConnectionHandler.IsWebSocketConnected(sessionID)) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Send message for {sessionID} websocket available, message being sent" - ); + logger.Debug($"Send message for {sessionID} websocket available, message being sent"); } sptWebSocketConnectionHandler.SendMessage(sessionID, notificationMessage); } @@ -49,9 +45,7 @@ public class NotificationSendHelper( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Send message for {sessionID} websocket not available, queueing into profile" - ); + logger.Debug($"Send message for {sessionID} websocket not available, queueing into profile"); } notificationService.Add(sessionID, notificationMessage); } @@ -64,12 +58,7 @@ public class NotificationSendHelper( /// Who is sending the message to player /// Text to send player /// Underlying type of message being sent - public void SendMessageToPlayer( - MongoId sessionId, - UserDialogInfo senderDetails, - string messageText, - MessageType messageType - ) + public void SendMessageToPlayer(MongoId sessionId, UserDialogInfo senderDetails, string messageText, MessageType messageType) { var dialog = GetDialog(sessionId, messageType, senderDetails); @@ -104,11 +93,7 @@ public class NotificationSendHelper( /// Type of message to generate /// Who is sending the message /// Dialogue - protected Models.Eft.Profile.Dialogue GetDialog( - MongoId sessionId, - MessageType messageType, - UserDialogInfo senderDetails - ) + protected Models.Eft.Profile.Dialogue GetDialog(MongoId sessionId, MessageType messageType, UserDialogInfo senderDetails) { // Use trader id if sender is trader, otherwise use nickname var dialogKey = senderDetails.Id; @@ -117,19 +102,12 @@ public class NotificationSendHelper( var dialogueData = saveServer.GetProfile(sessionId).DialogueRecords; // Ensure empty dialog exists based on sender details passed in - dialogueData.TryAdd( - dialogKey, - GetEmptyDialogTemplate(dialogKey, messageType, senderDetails) - ); + dialogueData.TryAdd(dialogKey, GetEmptyDialogTemplate(dialogKey, messageType, senderDetails)); return dialogueData[dialogKey]; } - protected Models.Eft.Profile.Dialogue GetEmptyDialogTemplate( - string dialogKey, - MessageType messageType, - UserDialogInfo senderDetails - ) + protected Models.Eft.Profile.Dialogue GetEmptyDialogTemplate(string dialogKey, MessageType messageType, UserDialogInfo senderDetails) { return new Models.Eft.Profile.Dialogue { @@ -139,8 +117,7 @@ public class NotificationSendHelper( Pinned = false, New = 0, AttachmentsNew = 0, - Users = - senderDetails.Info.MemberCategory == MemberCategory.Trader ? null : [senderDetails], + Users = senderDetails.Info.MemberCategory == MemberCategory.Trader ? null : [senderDetails], }; } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/NotifierHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/NotifierHelper.cs index a74523a3..39e87972 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/NotifierHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/NotifierHelper.cs @@ -21,10 +21,7 @@ public class NotifierHelper(HttpServerHelper httpServerHelper) /// Message from dialog that was sent /// Ragfair data to attach to notification /// - public WsRagfairOfferSold CreateRagfairOfferSoldNotification( - Message dialogueMessage, - MessageContentRagfair ragfairData - ) + public WsRagfairOfferSold CreateRagfairOfferSoldNotification(Message dialogueMessage, MessageContentRagfair ragfairData) { return new WsRagfairOfferSold { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/PaymentHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/PaymentHelper.cs index 8749a378..90f33f82 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/PaymentHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/PaymentHelper.cs @@ -11,13 +11,7 @@ public class PaymentHelper(ConfigServer configServer) { protected bool _addedCustomMoney; protected readonly InventoryConfig _inventoryConfig = configServer.GetConfig(); - protected readonly HashSet _moneyTpls = - [ - Money.DOLLARS, - Money.EUROS, - Money.ROUBLES, - Money.GP, - ]; + protected readonly HashSet _moneyTpls = [Money.DOLLARS, Money.EUROS, Money.ROUBLES, Money.GP]; /// /// Is the passed in tpl money (also checks custom currencies in inventoryConfig.customMoneyTpls) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs index f0e1f1a8..e4bcbd85 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs @@ -33,9 +33,7 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper var weapons = GetDefaultWeaponPresets(); var equipment = GetDefaultEquipmentPresets(); - return weapons - .UnionBy(equipment, kvp => kvp.Key) - .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + return weapons.UnionBy(equipment, kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); } /// @@ -64,10 +62,7 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper { var tempPresets = databaseService.GetGlobals().ItemPresets; _defaultWeaponPresets = tempPresets - .Where(p => - p.Value.Encyclopedia != null - && itemHelper.IsOfBaseclass(p.Value.Encyclopedia.Value, BaseClasses.WEAPON) - ) + .Where(p => p.Value.Encyclopedia != null && itemHelper.IsOfBaseclass(p.Value.Encyclopedia.Value, BaseClasses.WEAPON)) .ToDictionary(); } @@ -84,10 +79,7 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper { var tempPresets = databaseService.GetGlobals().ItemPresets; _defaultEquipmentPresets = tempPresets - .Where(p => - p.Value.Encyclopedia != null - && itemHelper.ArmorItemCanHoldMods(p.Value.Encyclopedia.Value) - ) + .Where(p => p.Value.Encyclopedia != null && itemHelper.ArmorItemCanHoldMods(p.Value.Encyclopedia.Value)) .ToDictionary(); } @@ -117,8 +109,7 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper /// True if the preset is of the given base class, false otherwise public bool IsPresetBaseClass(MongoId id, MongoId baseClass) { - return IsPreset(id) - && itemHelper.IsOfBaseclass(GetPreset(id).Encyclopedia.Value, baseClass); + return IsPreset(id) && itemHelper.IsOfBaseclass(GetPreset(id).Encyclopedia.Value, baseClass); } /// @@ -160,11 +151,7 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper } // Use gathered preset ids to get full preset objects, clone and return - return cloner.Clone( - presetDetailsForTpl - .PresetIds.Select(x => databaseService.GetGlobals().ItemPresets[x]) - .ToList() - ); + return cloner.Clone(presetDetailsForTpl.PresetIds.Select(x => databaseService.GetGlobals().ItemPresets[x]).ToList()); } /// @@ -186,21 +173,12 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper } // Use default preset id from above cache to find the weapon/equipment preset - if ( - !_defaultWeaponPresets.TryGetValue(presetDetails.DefaultId.Value, out var defaultPreset) - ) + if (!_defaultWeaponPresets.TryGetValue(presetDetails.DefaultId.Value, out var defaultPreset)) { - if ( - !_defaultEquipmentPresets.TryGetValue( - presetDetails.DefaultId.Value, - out defaultPreset - ) - ) + if (!_defaultEquipmentPresets.TryGetValue(presetDetails.DefaultId.Value, out defaultPreset)) { // Default not found in weapon or equipment, return first preset in list - return cloner.Clone( - databaseService.GetGlobals().ItemPresets[presetDetails.PresetIds.First()] - ); + return cloner.Clone(databaseService.GetGlobals().ItemPresets[presetDetails.PresetIds.First()]); } } @@ -241,9 +219,7 @@ public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper var defaultPreset = GetDefaultPreset(tpl); // Bundle up tpls we want price for - var tpls = defaultPreset is not null - ? defaultPreset.Items.Select(item => item.Template) - : [tpl]; + var tpls = defaultPreset is not null ? defaultPreset.Items.Select(item => item.Template) : [tpl]; // Get price of tpls return itemHelper.GetItemAndChildrenPrice(tpls); diff --git a/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs index e808e157..1faaaf40 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs @@ -20,33 +20,18 @@ public class PrestigeHelper( RewardHelper rewardHelper ) { - public void ProcessPendingPrestige( - SptProfile oldProfile, - SptProfile newProfile, - PendingPrestige prestige - ) + public void ProcessPendingPrestige(SptProfile oldProfile, SptProfile newProfile, PendingPrestige prestige) { var prePrestigePmc = oldProfile.CharacterData.PmcData; var sessionId = newProfile.ProfileInfo.ProfileId; var prestigeLevels = databaseService.GetTemplates().Prestige.Elements; - var indexOfPrestigeObtained = Math.Clamp( - (prestige.PrestigeLevel ?? 1) - 1, - 0, - prestigeLevels.Count - 1 - ); // Levels are 1 to 4, Index is 0 to 3 + var indexOfPrestigeObtained = Math.Clamp((prestige.PrestigeLevel ?? 1) - 1, 0, prestigeLevels.Count - 1); // Levels are 1 to 4, Index is 0 to 3 // Skill copy - var skillProgressCopyAmount = (float)( - 1 - - prestigeLevels[indexOfPrestigeObtained].TransferConfigs.SkillConfig.TransferMultiplier - ); + var skillProgressCopyAmount = (float)(1 - prestigeLevels[indexOfPrestigeObtained].TransferConfigs.SkillConfig.TransferMultiplier); var masteringProgressCopyAmount = (float)( - 1 - - prestigeLevels[indexOfPrestigeObtained] - .TransferConfigs - .MasteringConfig - .TransferMultiplier + 1 - prestigeLevels[indexOfPrestigeObtained].TransferConfigs.MasteringConfig.TransferMultiplier ); if (prePrestigePmc.Skills.Common is not null) @@ -56,17 +41,14 @@ public class PrestigeHelper( { // Set progress for 5% of what it was, multiplied by prestige level skillToCopy.Progress *= skillProgressCopyAmount; - var existingSkill = newProfile.CharacterData.PmcData.Skills.Common.FirstOrDefault( - skill => skill.Id == skillToCopy.Id - ); + var existingSkill = newProfile.CharacterData.PmcData.Skills.Common.FirstOrDefault(skill => skill.Id == skillToCopy.Id); if (existingSkill is not null) { existingSkill.Progress = skillToCopy.Progress; } else { - newProfile.CharacterData.PmcData.Skills.Common = - newProfile.CharacterData.PmcData.Skills.Common.Union([skillToCopy]); + newProfile.CharacterData.PmcData.Skills.Common = newProfile.CharacterData.PmcData.Skills.Common.Union([skillToCopy]); } } @@ -75,18 +57,16 @@ public class PrestigeHelper( { // Set progress 5% of what it was, multiplied by prestige level skillToCopy.Progress *= masteringProgressCopyAmount; - var existingSkill = - newProfile.CharacterData.PmcData.Skills.Mastering.FirstOrDefault(skill => - skill.Id == skillToCopy.Id - ); + var existingSkill = newProfile.CharacterData.PmcData.Skills.Mastering.FirstOrDefault(skill => skill.Id == skillToCopy.Id); if (existingSkill is not null) { existingSkill.Progress = skillToCopy.Progress; } else { - newProfile.CharacterData.PmcData.Skills.Mastering = - newProfile.CharacterData.PmcData.Skills.Mastering.Union([skillToCopy]); + newProfile.CharacterData.PmcData.Skills.Mastering = newProfile.CharacterData.PmcData.Skills.Mastering.Union( + [skillToCopy] + ); } } } @@ -99,9 +79,7 @@ public class PrestigeHelper( } // Assumes Prestige data is in descending order - var currentPrestigeData = databaseService.GetTemplates().Prestige.Elements[ - indexOfPrestigeObtained - ]; + var currentPrestigeData = databaseService.GetTemplates().Prestige.Elements[indexOfPrestigeObtained]; // Get all prestige rewards from prestige 1 up to desired prestige var prestigeRewards = prestigeLevels @@ -111,24 +89,17 @@ public class PrestigeHelper( AddPrestigeRewardsToProfile(sessionId.Value, newProfile, prestigeRewards); // Flag profile as having achieved this prestige level - newProfile.CharacterData.PmcData.Prestige.TryAdd( - currentPrestigeData.Id, - timeUtil.GetTimeStamp() - ); + newProfile.CharacterData.PmcData.Prestige.TryAdd(currentPrestigeData.Id, timeUtil.GetTimeStamp()); var itemsToTransfer = new List(); // Copy transferred items foreach (var transferRequest in prestige.Items ?? []) { - var item = prePrestigePmc.Inventory.Items.FirstOrDefault(item => - item.Id == transferRequest.Id - ); + var item = prePrestigePmc.Inventory.Items.FirstOrDefault(item => item.Id == transferRequest.Id); if (item is null) { - logger.Error( - $"Unable to find item with id: {transferRequest.Id} in profile: {sessionId}, skipping" - ); + logger.Error($"Unable to find item with id: {transferRequest.Id} in profile: {sessionId}, skipping"); continue; } @@ -148,11 +119,7 @@ public class PrestigeHelper( newProfile.CharacterData.PmcData.Info.PrestigeLevel = prestige.PrestigeLevel; } - private void AddPrestigeRewardsToProfile( - MongoId sessionId, - SptProfile newProfile, - IEnumerable rewards - ) + private void AddPrestigeRewardsToProfile(MongoId sessionId, SptProfile newProfile, IEnumerable rewards) { var itemsToSend = new List(); @@ -162,21 +129,13 @@ public class PrestigeHelper( { case RewardType.CustomizationDirect: { - profileHelper.AddHideoutCustomisationUnlock( - newProfile, - reward, - CustomisationSource.PRESTIGE - ); + profileHelper.AddHideoutCustomisationUnlock(newProfile, reward, CustomisationSource.PRESTIGE); break; } case RewardType.Skill: if (Enum.TryParse(reward.Target, out SkillTypes result)) { - profileHelper.AddSkillPointsToPlayer( - newProfile.CharacterData.PmcData, - result, - reward.Value - ); + profileHelper.AddSkillPointsToPlayer(newProfile.CharacterData.PmcData, result, reward.Value); } else { @@ -191,10 +150,7 @@ public class PrestigeHelper( } case RewardType.ExtraDailyQuest: { - newProfile.AddExtraRepeatableQuest( - new MongoId(reward.Target), - (double)reward.Value - ); + newProfile.AddExtraRepeatableQuest(new MongoId(reward.Target), (double)reward.Value); break; } default: diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs index 1d1198f5..53fba5df 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs @@ -28,11 +28,7 @@ public class ProfileHelper( ConfigServer configServer ) { - protected static readonly FrozenSet _gameEditionsWithFreeRefresh = - [ - "edge_of_darkness", - "unheard_edition", - ]; + protected static readonly FrozenSet _gameEditionsWithFreeRefresh = ["edge_of_darkness", "unheard_edition"]; protected readonly InventoryConfig _inventoryConfig = configServer.GetConfig(); /// @@ -40,10 +36,7 @@ public class ProfileHelper( /// /// Player profile /// Quest with condition to remove - public void RemoveQuestConditionFromProfile( - PmcData pmcData, - Dictionary questConditionId - ) + public void RemoveQuestConditionFromProfile(PmcData pmcData, Dictionary questConditionId) { foreach (var questId in questConditionId) { @@ -121,10 +114,7 @@ public class ProfileHelper( ProfileHasInfoProperty(p) && !StringsMatch(p.ProfileInfo.ProfileId, sessionID) && // SessionIds dont match - StringsMatch( - p.CharacterData.PmcData.Info.LowerNickname.ToLowerInvariant(), - nicknameRequest.Nickname.ToLowerInvariant() - ) + StringsMatch(p.CharacterData.PmcData.Info.LowerNickname.ToLowerInvariant(), nicknameRequest.Nickname.ToLowerInvariant()) ); // Nicknames do } @@ -163,10 +153,7 @@ public class ProfileHelper( /// PmcData public PmcData? GetProfileByPmcId(MongoId pmcId) { - return saveServer - .GetProfiles() - .Values.First(p => p.CharacterData?.PmcData?.Id == pmcId) - .CharacterData?.PmcData; + return saveServer.GetProfiles().Values.First(p => p.CharacterData?.PmcData?.Id == pmcId).CharacterData?.PmcData; } /// @@ -373,9 +360,7 @@ public class ProfileHelper( if (secureContainer is not null) { // Find secure container + children - var secureContainerAndChildrenIds = items - .GetItemWithChildrenTpls(secureContainer.Id) - .ToHashSet(); + var secureContainerAndChildrenIds = items.GetItemWithChildrenTpls(secureContainer.Id).ToHashSet(); // Remove secure container + its children items.RemoveAll(x => secureContainerAndChildrenIds.Contains(x.Id)); @@ -396,9 +381,7 @@ public class ProfileHelper( var profileToUpdate = GetFullProfile(playerId); profileToUpdate.SptData.ReceivedGifts ??= []; - var giftData = profileToUpdate.SptData.ReceivedGifts.FirstOrDefault(g => - g.GiftId == giftId - ); + var giftData = profileToUpdate.SptData.ReceivedGifts.FirstOrDefault(g => g.GiftId == giftId); if (giftData != null) { // Increment counter @@ -437,9 +420,7 @@ public class ProfileHelper( return false; } - var giftDataFromProfile = profile.SptData.ReceivedGifts?.FirstOrDefault(g => - g.GiftId == giftId - ); + var giftDataFromProfile = profile.SptData.ReceivedGifts?.FirstOrDefault(g => g.GiftId == giftId); if (giftDataFromProfile == null) { return false; @@ -503,21 +484,14 @@ public class ProfileHelper( { if (pointsToAddToSkill < 0D) { - logger.Warning( - serverLocalisationService.GetText( - "player-attempt_to_increment_skill_with_negative_value", - skill - ) - ); + logger.Warning(serverLocalisationService.GetText("player-attempt_to_increment_skill_with_negative_value", skill)); return; } var profileSkills = pmcProfile?.Skills?.Common; if (profileSkills == null) { - logger.Warning( - $"Unable to add: {pointsToAddToSkill} points to {skill}, Profile has no skills" - ); + logger.Warning($"Unable to add: {pointsToAddToSkill} points to {skill}, Profile has no skills"); return; } @@ -530,9 +504,7 @@ public class ProfileHelper( if (useSkillProgressRateMultiplier) { - var skillProgressRate = databaseService - .GetGlobals() - .Configuration.SkillsSettings.SkillProgressRate; + var skillProgressRate = databaseService.GetGlobals().Configuration.SkillsSettings.SkillProgressRate; pointsToAddToSkill *= skillProgressRate; } @@ -557,9 +529,7 @@ public class ProfileHelper( /// True if account is developer public bool IsDeveloperAccount(MongoId sessionID) { - return GetFullProfile(sessionID) - ?.ProfileInfo?.Edition?.ToLowerInvariant() - .StartsWith("spt developer") ?? false; + return GetFullProfile(sessionID)?.ProfileInfo?.Edition?.ToLowerInvariant().StartsWith("spt developer") ?? false; } /// @@ -620,9 +590,7 @@ public class ProfileHelper( var pockets = pmcProfile.Inventory.Items.Where(i => i.SlotId == "Pockets"); if (!pockets.Any()) { - logger.Error( - $"Unable to replace profile: {pmcProfile.Id} pocket tpl with: {newPocketTpl} as Pocket item could not be found." - ); + logger.Error($"Unable to replace profile: {pmcProfile.Id} pocket tpl with: {newPocketTpl} as Pocket item could not be found."); return; } @@ -721,9 +689,7 @@ public class ProfileHelper( rewardToStore.Type = CustomisationType.UPPER; break; default: - logger.Error( - $"Unhandled customisation unlock type: {matchingCustomisation.Parent} not added to profile" - ); + logger.Error($"Unhandled customisation unlock type: {matchingCustomisation.Parent} not added to profile"); return; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs index 483b5910..2aebd9c9 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs @@ -38,11 +38,7 @@ public class QuestHelper( ICloner cloner ) { - protected readonly FrozenSet _startedOrAvailToFinish = - [ - QuestStatusEnum.Started, - QuestStatusEnum.AvailableForFinish, - ]; + protected readonly FrozenSet _startedOrAvailToFinish = [QuestStatusEnum.Started, QuestStatusEnum.AvailableForFinish]; protected readonly QuestConfig _questConfig = configServer.GetConfig(); private Dictionary>? _sellToTraderQuestConditionCache; @@ -52,10 +48,7 @@ public class QuestHelper( /// protected virtual Dictionary> SellToTraderQuestConditionCache { - get - { - return _sellToTraderQuestConditionCache ??= GetSellToTraderQuests(GetQuestsFromDb()); - } + get { return _sellToTraderQuestConditionCache ??= GetSellToTraderQuests(GetQuestsFromDb()); } } /// @@ -85,12 +78,7 @@ public class QuestHelper( case "=": return playerLevel == conditionValue; default: - logger.Error( - serverLocalisationService.GetText( - "quest-unable_to_find_compare_condition", - condition.CompareMethod - ) - ); + logger.Error(serverLocalisationService.GetText("quest-unable_to_find_compare_condition", condition.CompareMethod)); return false; } @@ -156,9 +144,7 @@ public class QuestHelper( var adjustedProgressToAdd = 10 / (currentLevel + 1) * progressToAdd; if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Progress To Add: {progressToAdd} Adjusted for level: {adjustedProgressToAdd}" - ); + logger.Debug($"Progress To Add: {progressToAdd} Adjusted for level: {adjustedProgressToAdd}"); } // Add the progress amount adjusted by level @@ -198,26 +184,15 @@ public class QuestHelper( { if ( !profile.TradersInfo.TryGetValue( - questProperties.Target.IsItem - ? questProperties.Target.Item - : questProperties.Target.List.FirstOrDefault(), + questProperties.Target.IsItem ? questProperties.Target.Item : questProperties.Target.List.FirstOrDefault(), out var trader ) ) { - logger.Error( - serverLocalisationService.GetText( - "quest-unable_to_find_trader_in_profile", - questProperties.Target - ) - ); + logger.Error(serverLocalisationService.GetText("quest-unable_to_find_trader_in_profile", questProperties.Target)); } - return CompareAvailableForValues( - trader.LoyaltyLevel.Value, - questProperties.Value.Value, - questProperties.CompareMethod - ); + return CompareAvailableForValues(trader.LoyaltyLevel.Value, questProperties.Value.Value, questProperties.CompareMethod); } /// @@ -231,26 +206,15 @@ public class QuestHelper( var requiredLoyaltyLevel = int.Parse(questProperties.Value.ToString()); if ( !profile.TradersInfo.TryGetValue( - questProperties.Target.IsItem - ? questProperties.Target.Item - : questProperties.Target.List.FirstOrDefault(), + questProperties.Target.IsItem ? questProperties.Target.Item : questProperties.Target.List.FirstOrDefault(), out var trader ) ) { - logger.Error( - serverLocalisationService.GetText( - "quest-unable_to_find_trader_in_profile", - questProperties.Target - ) - ); + logger.Error(serverLocalisationService.GetText("quest-unable_to_find_trader_in_profile", questProperties.Target)); } - return CompareAvailableForValues( - trader.Standing ?? 1, - requiredLoyaltyLevel, - questProperties.CompareMethod - ); + return CompareAvailableForValues(trader.Standing ?? 1, requiredLoyaltyLevel, questProperties.CompareMethod); } /// @@ -278,12 +242,7 @@ public class QuestHelper( return current == required; default: - logger.Error( - serverLocalisationService.GetText( - "quest-compare_operator_unhandled", - compareMethod - ) - ); + logger.Error(serverLocalisationService.GetText("quest-compare_operator_unhandled", compareMethod)); return false; } @@ -296,11 +255,7 @@ public class QuestHelper( /// State the new quest should be in when returned /// Details of accepted quest from client /// quest status object for storage in profile - public QuestStatus GetQuestReadyForProfile( - PmcData pmcData, - QuestStatusEnum newState, - AcceptQuestRequestData acceptedQuest - ) + public QuestStatus GetQuestReadyForProfile(PmcData pmcData, QuestStatusEnum newState, AcceptQuestRequestData acceptedQuest) { var currentTimestamp = timeUtil.GetTimeStamp(); var existingQuest = pmcData.Quests.FirstOrDefault(q => q.QId == acceptedQuest.QuestId); @@ -341,9 +296,7 @@ public class QuestHelper( ); } - var waitTime = questDbData?.Conditions.AvailableForStart.FirstOrDefault(x => - x.AvailableAfter > 0 - ); + var waitTime = questDbData?.Conditions.AvailableForStart.FirstOrDefault(x => x.AvailableAfter > 0); if (waitTime is not null && acceptedQuest.Type != "repeatable") { // Quest should be put into 'pending' state @@ -366,16 +319,11 @@ public class QuestHelper( /// Quest started by player /// Session/Player id /// Quests accessible to player including newly unlocked quests now quest (startedQuestId) was started - public List GetNewlyAccessibleQuestsWhenStartingQuest( - MongoId startedQuestId, - MongoId sessionID - ) + public List GetNewlyAccessibleQuestsWhenStartingQuest(MongoId startedQuestId, MongoId sessionID) { // Get quest acceptance data from profile var profile = profileHelper.GetPmcProfile(sessionID); - var startedQuestInProfile = profile.Quests.FirstOrDefault(profileQuest => - profileQuest.QId == startedQuestId - ); + var startedQuestInProfile = profile.Quests.FirstOrDefault(profileQuest => profileQuest.QId == startedQuestId); // Get quests that var eligibleQuests = GetQuestsFromDb() @@ -383,27 +331,22 @@ public class QuestHelper( { // Quest is accessible to player when the accepted quest passed into param is started // e.g. Quest A passed in, quest B is looped over and has requirement of A to be started, include it - var matchingQuestCondition = quest.Conditions.AvailableForStart.FirstOrDefault( - condition => - condition.ConditionType == "Quest" - && ( - (condition.Target?.Item?.Contains(startedQuestId) ?? false) - || (condition.Target?.List?.Contains(startedQuestId) ?? false) - ) - && (condition.Status?.Contains(QuestStatusEnum.Started) ?? false) + var matchingQuestCondition = quest.Conditions.AvailableForStart.FirstOrDefault(condition => + condition.ConditionType == "Quest" + && ( + (condition.Target?.Item?.Contains(startedQuestId) ?? false) + || (condition.Target?.List?.Contains(startedQuestId) ?? false) + ) + && (condition.Status?.Contains(QuestStatusEnum.Started) ?? false) ); // Has a matching quest condition in another quest (Accepting this quest gives access to found quest too) check if it also has a level requirement that passes if (matchingQuestCondition is not null) { - var matchingLevelRequirement = - quest.Conditions.AvailableForStart.FirstOrDefault(condition => - condition.ConditionType == "Level" - ); - if ( - matchingLevelRequirement is not null - && profile.Info.Level < matchingLevelRequirement.Value - ) + var matchingLevelRequirement = quest.Conditions.AvailableForStart.FirstOrDefault(condition => + condition.ConditionType == "Level" + ); + if (matchingLevelRequirement is not null && profile.Info.Level < matchingLevelRequirement.Value) { // Player doesn't fulfil level requirement for quest, don't show it to player return false; @@ -438,8 +381,7 @@ public class QuestHelper( return false; } - var standingRequirements = - quest.Conditions.AvailableForStart.GetStandingConditions(); + var standingRequirements = quest.Conditions.AvailableForStart.GetStandingConditions(); foreach (var condition in standingRequirements) { if (!TraderStandingRequirementCheck(condition, profile)) @@ -458,8 +400,7 @@ public class QuestHelper( } // Include if quest found in profile and is started or ready to hand in - return startedQuestInProfile is not null - && _startedOrAvailToFinish.Contains(startedQuestInProfile.Status); + return startedQuestInProfile is not null && _startedOrAvailToFinish.Contains(startedQuestInProfile.Status); }); return GetQuestsWithOnlyLevelRequirementStartCondition(eligibleQuests).ToList(); @@ -476,28 +417,19 @@ public class QuestHelper( var isHalloweenEventActive = seasonalEventService.HalloweenEventEnabled(); // Not christmas + quest is for christmas - if ( - !isChristmasEventActive - && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Christmas) - ) + if (!isChristmasEventActive && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Christmas)) { return false; } // Not halloween + quest is for halloween - if ( - !isHalloweenEventActive - && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Halloween) - ) + if (!isHalloweenEventActive && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Halloween)) { return false; } // Should non-season event quests be shown to player - if ( - !_questConfig.ShowNonSeasonalEventQuests - && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.None) - ) + if (!_questConfig.ShowNonSeasonalEventQuests && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.None)) { return false; } @@ -613,21 +545,13 @@ public class QuestHelper( /// Stack size to adjust to /// Session id /// ItemEvent router response - public void ChangeItemStack( - PmcData pmcData, - MongoId itemId, - int newStackSize, - MongoId sessionID, - ItemEventRouterResponse output - ) + public void ChangeItemStack(PmcData pmcData, MongoId itemId, int newStackSize, MongoId sessionID, ItemEventRouterResponse output) { //TODO: maybe merge this function and the one from customization var inventoryItemIndex = pmcData.Inventory.Items.FindIndex(item => item.Id == itemId); if (inventoryItemIndex < 0) { - logger.Error( - serverLocalisationService.GetText("quest-item_not_found_in_inventory", itemId) - ); + logger.Error(serverLocalisationService.GetText("quest-item_not_found_in_inventory", itemId)); return; } @@ -645,9 +569,7 @@ public class QuestHelper( { // this case is probably dead Code right now, since the only calling function // checks explicitly for Value > 0. - output - .ProfileChanges[sessionID] - .Items.DeletedItems.Add(new DeletedItem { Id = itemId }); + output.ProfileChanges[sessionID].Items.DeletedItems.Add(new DeletedItem { Id = itemId }); pmcData.Inventory.Items.RemoveAt(inventoryItemIndex); } } @@ -657,9 +579,7 @@ public class QuestHelper( /// /// quests to process /// quest list without conditions - protected IEnumerable GetQuestsWithOnlyLevelRequirementStartCondition( - IEnumerable quests - ) + protected IEnumerable GetQuestsWithOnlyLevelRequirementStartCondition(IEnumerable quests) { return quests.Select(RemoveQuestConditionsExceptLevel); } @@ -685,9 +605,7 @@ public class QuestHelper( /// /// Quests to process /// List of quests with `SellItemToTrader` finish condition(s) - protected Dictionary> GetSellToTraderQuests( - IEnumerable quests - ) + protected Dictionary> GetSellToTraderQuests(IEnumerable quests) { // Create cache var result = new Dictionary>(); @@ -730,8 +648,7 @@ public class QuestHelper( { return pmcData .TaskConditionCounters?.Values.Where(condition => - SellToTraderQuestConditionCache.ContainsKey(condition.SourceId.Value) - && condition.Type == "SellItemToTrader" + SellToTraderQuestConditionCache.ContainsKey(condition.SourceId.Value) && condition.Type == "SellItemToTrader" ) .ToList(); } @@ -759,30 +676,15 @@ public class QuestHelper( foreach (var counter in activeConditionCounters) { // Condition is in profile, but quest doesn't exist in database - if ( - !SellToTraderQuestConditionCache.TryGetValue( - counter.SourceId.Value, - out var conditions - ) - ) + if (!SellToTraderQuestConditionCache.TryGetValue(counter.SourceId.Value, out var conditions)) { - logger.Error( - serverLocalisationService.GetText( - "quest_unable_to_find_quest_in_db_no_type", - counter.SourceId - ) - ); + logger.Error(serverLocalisationService.GetText("quest_unable_to_find_quest_in_db_no_type", counter.SourceId)); continue; } foreach (var condition in conditions) { - IncrementSoldToTraderCounter( - profileWithItemsToSell, - counter, - condition, - sellRequest - ); + IncrementSoldToTraderCounter(profileWithItemsToSell, counter, condition, sellRequest); } } } @@ -805,16 +707,13 @@ public class QuestHelper( foreach (var itemSoldToTrader in sellRequest.Items) { // Get sold items' details from profile - var itemDetails = profileWithItemsToSell.Inventory?.Items?.FirstOrDefault( - inventoryItem => inventoryItem.Id == itemSoldToTrader.Id + var itemDetails = profileWithItemsToSell.Inventory?.Items?.FirstOrDefault(inventoryItem => + inventoryItem.Id == itemSoldToTrader.Id ); if (itemDetails is null) { logger.Error( - serverLocalisationService.GetText( - "trader-unable_to_find_inventory_item_for_selltotrader_counter", - taskCounter.SourceId - ) + serverLocalisationService.GetText("trader-unable_to_find_inventory_item_for_selltotrader_counter", taskCounter.SourceId) ); continue; @@ -835,24 +734,13 @@ public class QuestHelper( /// Fail quest request data /// Player/Session id /// Client output - public void FailQuest( - PmcData pmcData, - FailQuestRequestData failRequest, - MongoId sessionID, - ItemEventRouterResponse? output = null - ) + public void FailQuest(PmcData pmcData, FailQuestRequestData failRequest, MongoId sessionID, ItemEventRouterResponse? output = null) { // Prepare response to send back to client var updatedOutput = output ?? eventOutputHolder.GetOutput(sessionID); UpdateQuestState(pmcData, QuestStatusEnum.Fail, failRequest.QuestId); - var questRewards = questRewardHelper.ApplyQuestReward( - pmcData, - failRequest.QuestId, - QuestStatusEnum.Fail, - sessionID, - updatedOutput - ); + var questRewards = questRewardHelper.ApplyQuestReward(pmcData, failRequest.QuestId, QuestStatusEnum.Fail, sessionID, updatedOutput); // Create a dialog message for completing the quest. var quest = GetQuestFromDb(failRequest.QuestId, pmcData); @@ -878,9 +766,7 @@ public class QuestHelper( } } - updatedOutput - .ProfileChanges[sessionID] - .Quests.AddRange(FailedUnlocked(failRequest.QuestId, sessionID)); + updatedOutput.ProfileChanges[sessionID].Quests.AddRange(FailedUnlocked(failRequest.QuestId, sessionID)); } /// @@ -908,9 +794,7 @@ public class QuestHelper( } // Check daily/weekly objects - return pmcData - .RepeatableQuests.SelectMany(x => x.ActiveQuests) - .FirstOrDefault(x => x.Id == questId); + return pmcData.RepeatableQuests.SelectMany(x => x.ActiveQuests).FirstOrDefault(x => x.Id == questId); } /// @@ -1008,11 +892,7 @@ public class QuestHelper( /// Quests to search through for the findItem condition /// All quests to check /// quest id with 'FindItem' condition id - public Dictionary GetFindItemConditionByQuestItem( - MongoId itemTpl, - MongoId[] questIds, - List allQuests - ) + public Dictionary GetFindItemConditionByQuestItem(MongoId itemTpl, MongoId[] questIds, List allQuests) { Dictionary result = new(); foreach (var questId in questIds) @@ -1022,17 +902,14 @@ public class QuestHelper( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to find quest: {questId} in db, cannot get 'FindItem' condition, skipping" - ); + logger.Debug($"Unable to find quest: {questId} in db, cannot get 'FindItem' condition, skipping"); } continue; } var condition = questInDb.Conditions.AvailableForFinish.FirstOrDefault(c => - c.ConditionType == "FindItem" - && ((c.Target.IsList ? c.Target.List : [c.Target.Item])?.Contains(itemTpl) ?? false) + c.ConditionType == "FindItem" && ((c.Target.IsList ? c.Target.List : [c.Target.Item])?.Contains(itemTpl) ?? false) ); if (condition is not null) { @@ -1123,9 +1000,7 @@ public class QuestHelper( } return quest.Conditions.Fail.Any(condition => - ( - condition.Target.IsList ? condition.Target.List : [condition.Target.Item] - )?.Contains(completedQuestId) ?? false + (condition.Target.IsList ? condition.Target.List : [condition.Target.Item])?.Contains(completedQuestId) ?? false ); }) .ToList(); @@ -1158,11 +1033,7 @@ public class QuestHelper( /// Client request /// Player/session id /// Client response - public ItemEventRouterResponse CompleteQuest( - PmcData pmcData, - CompleteQuestRequestData request, - MongoId sessionID - ) + public ItemEventRouterResponse CompleteQuest(PmcData pmcData, CompleteQuestRequestData request, MongoId sessionID) { var completeQuestResponse = eventOutputHolder.GetOutput(sessionID); if (!completeQuestResponse.ProfileChanges.TryGetValue(sessionID, out var profileChanges)) @@ -1183,13 +1054,7 @@ public class QuestHelper( const QuestStatusEnum newQuestState = QuestStatusEnum.Success; UpdateQuestState(pmcData, newQuestState, completedQuestId); - var questRewards = questRewardHelper.ApplyQuestReward( - pmcData, - request.QuestId, - newQuestState, - sessionID, - completeQuestResponse - ); + var questRewards = questRewardHelper.ApplyQuestReward(pmcData, request.QuestId, newQuestState, sessionID, completeQuestResponse); // Check for linked failed + unrestartable quests (only get quests not already failed var questsToFail = GetQuestsFromProfileFailedByCompletingQuest(completedQuestId, pmcData); @@ -1199,12 +1064,7 @@ public class QuestHelper( } // Show success modal on player screen - SendSuccessDialogMessageOnQuestComplete( - sessionID, - pmcData, - completedQuestId, - questRewards.ToList() - ); + SendSuccessDialogMessageOnQuestComplete(sessionID, pmcData, completedQuestId, questRewards.ToList()); // Add diff of quests before completion vs after for client response var questDelta = GetDeltaQuests(clientQuestsClone, GetClientQuests(sessionID)); @@ -1232,10 +1092,7 @@ public class QuestHelper( } // Hydrate client response questsStatus array with data - var questStatusChanges = GetQuestsWithDifferentStatuses( - preCompleteProfileQuestsClone, - pmcData.Quests - ); + var questStatusChanges = GetQuestsWithDifferentStatuses(preCompleteProfileQuestsClone, pmcData.Quests); profileChanges.QuestsStatus.AddRange(questStatusChanges); return completeQuestResponse; @@ -1293,9 +1150,7 @@ public class QuestHelper( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unable to show quest: {quest.QuestName} as its for a trader: {quest.TraderId} that no longer exists." - ); + logger.Debug($"Unable to show quest: {quest.QuestName} as its for a trader: {quest.TraderId} that no longer exists."); } continue; @@ -1306,11 +1161,7 @@ public class QuestHelper( var standingRequirements = quest.Conditions.AvailableForStart.GetStandingConditions(); // Quest has no conditions, standing or loyalty conditions, add to visible quest list - if ( - questRequirements.Count == 0 - && loyaltyRequirements.Count == 0 - && standingRequirements.Count == 0 - ) + if (questRequirements.Count == 0 && loyaltyRequirements.Count == 0 && standingRequirements.Count == 0) { quest.SptStatus = QuestStatusEnum.AvailableForStart; questsToShowPlayer.Add(quest); @@ -1329,9 +1180,7 @@ public class QuestHelper( : conditionToFulfil.Target.Item == null ? null : [conditionToFulfil.Target.Item] ) ?? []; - var prerequisiteQuest = profile.Quests.FirstOrDefault(profileQuest => - questIdsToFulfil.Contains(profileQuest.QId) - ); + var prerequisiteQuest = profile.Quests.FirstOrDefault(profileQuest => questIdsToFulfil.Contains(profileQuest.QId)); if (prerequisiteQuest is null) { @@ -1351,16 +1200,11 @@ public class QuestHelper( if (conditionToFulfil.AvailableAfter > 0) { // Compare current time to unlock time for previous quest - prerequisiteQuest.StatusTimers.TryGetValue( - prerequisiteQuest.Status, - out var previousQuestCompleteTime - ); + prerequisiteQuest.StatusTimers.TryGetValue(prerequisiteQuest.Status, out var previousQuestCompleteTime); var unlockTime = previousQuestCompleteTime + conditionToFulfil.AvailableAfter; if (unlockTime > timeUtil.GetTimeStamp()) { - logger.Debug( - $"Quest {quest.QuestName} is locked for another: {unlockTime - timeUtil.GetTimeStamp()} seconds" - ); + logger.Debug($"Quest {quest.QuestName} is locked for another: {unlockTime - timeUtil.GetTimeStamp()} seconds"); } } } @@ -1391,21 +1235,14 @@ public class QuestHelper( } } - if ( - haveCompletedPreviousQuest - && passesLoyaltyRequirements - && passesStandingRequirements - ) + if (haveCompletedPreviousQuest && passesLoyaltyRequirements && passesStandingRequirements) { quest.SptStatus = QuestStatusEnum.AvailableForStart; questsToShowPlayer.Add(quest); } } - return UpdateQuestsForGameEdition( - cloner.Clone(questsToShowPlayer), - profile.Info.GameVersion - ); + return UpdateQuestsForGameEdition(cloner.Clone(questsToShowPlayer), profile.Info.GameVersion); } /// @@ -1442,10 +1279,7 @@ public class QuestHelper( /// Quest completed id /// /// Collection of Quest objects - protected List GetQuestsFromProfileFailedByCompletingQuest( - MongoId completedQuestId, - PmcData pmcProfile - ) + protected List GetQuestsFromProfileFailedByCompletingQuest(MongoId completedQuestId, PmcData pmcProfile) { var questsInDb = GetQuestsFromDb(); return questsInDb @@ -1458,11 +1292,7 @@ public class QuestHelper( } // Quest already exists in profile and is failed, skip - if ( - pmcProfile.Quests.Any(profileQuest => - profileQuest.QId == quest.Id && profileQuest.Status == QuestStatusEnum.Fail - ) - ) + if (pmcProfile.Quests.Any(profileQuest => profileQuest.QId == quest.Id && profileQuest.Status == QuestStatusEnum.Fail)) { return false; } @@ -1502,28 +1332,17 @@ public class QuestHelper( /// player profile /// quests to fail /// Client output - protected void FailQuests( - MongoId sessionID, - PmcData pmcData, - List questsToFail, - ItemEventRouterResponse output - ) + protected void FailQuests(MongoId sessionID, PmcData pmcData, List questsToFail, ItemEventRouterResponse output) { foreach (var questToFail in questsToFail) { // Skip failing a quest that has a fail status of something other than success - if ( - questToFail.Conditions.Fail?.Any(x => - x.Status?.Any(status => status != QuestStatusEnum.Success) ?? false - ) ?? false - ) + if (questToFail.Conditions.Fail?.Any(x => x.Status?.Any(status => status != QuestStatusEnum.Success) ?? false) ?? false) { continue; } - var isActiveQuestInPlayerProfile = pmcData.Quests.FirstOrDefault(quest => - quest.QId == questToFail.Id - ); + var isActiveQuestInPlayerProfile = pmcData.Quests.FirstOrDefault(quest => quest.QId == questToFail.Id); if (isActiveQuestInPlayerProfile is not null) { if (isActiveQuestInPlayerProfile.Status != QuestStatusEnum.Fail) @@ -1592,29 +1411,21 @@ public class QuestHelper( /// Player profile to update /// Quests to look for wait conditions in /// Quest just completed - protected void AddTimeLockedQuestsToProfile( - PmcData pmcData, - IEnumerable quests, - MongoId completedQuestId - ) + protected void AddTimeLockedQuestsToProfile(PmcData pmcData, IEnumerable quests, MongoId completedQuestId) { // Iterate over quests, look for quests with right criteria foreach (var quest in quests) { // If quest has prereq of completed quest + availableAfter value > 0 (quest has wait time) var nextQuestWaitCondition = quest.Conditions?.AvailableForStart?.FirstOrDefault(x => - ( - (x.Target?.List?.Contains(completedQuestId) ?? false) - || (x.Target?.Item?.Contains(completedQuestId) ?? false) - ) + ((x.Target?.List?.Contains(completedQuestId) ?? false) || (x.Target?.Item?.Contains(completedQuestId) ?? false)) && x.AvailableAfter > 0 ); // as we have to use the ListOrT type now, check both List and Item for the above checks if (nextQuestWaitCondition is not null) { // Now + wait time - var availableAfterTimestamp = - timeUtil.GetTimeStamp() + nextQuestWaitCondition.AvailableAfter; + var availableAfterTimestamp = timeUtil.GetTimeStamp() + nextQuestWaitCondition.AvailableAfter; // Update quest in profile with status of AvailableAfter var existingQuestInProfile = pmcData.Quests.FirstOrDefault(x => x.QId == quest.Id); @@ -1653,9 +1464,7 @@ public class QuestHelper( protected void RemoveQuestFromScavProfile(MongoId sessionId, MongoId questIdToRemove) { var fullProfile = profileHelper.GetFullProfile(sessionId); - var repeatableInScavProfile = fullProfile.CharacterData.ScavData.Quests?.FirstOrDefault(x => - x.QId == questIdToRemove - ); + var repeatableInScavProfile = fullProfile.CharacterData.ScavData.Quests?.FirstOrDefault(x => x.QId == questIdToRemove); if (repeatableInScavProfile is null) { logger.Warning( @@ -1677,10 +1486,7 @@ public class QuestHelper( /// Quests before /// Quests after /// QuestStatusChange array - protected List GetQuestsWithDifferentStatuses( - List preQuestStatuses, - List postQuestStatuses - ) + protected List GetQuestsWithDifferentStatuses(List preQuestStatuses, List postQuestStatuses) { List result = []; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs index 29be0a2f..faab3702 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs @@ -61,12 +61,7 @@ public class QuestRewardHelper( var questDetails = GetQuestFromDb(questId, pmcProfile); if (questDetails is null) { - logger.Warning( - serverLocalisationService.GetText( - "quest-unable_to_find_quest_in_db_no_quest_rewards", - questId - ) - ); + logger.Warning(serverLocalisationService.GetText("quest-unable_to_find_quest_in_db_no_quest_rewards", questId)); return []; } @@ -89,14 +84,7 @@ public class QuestRewardHelper( // e.g. 'Success' or 'AvailableForFinish' var rewards = questDetails.Rewards[state.ToString()]; - return rewardHelper.ApplyRewards( - rewards, - CustomisationSource.UNLOCKED_IN_GAME, - fullProfile, - profileData, - questId, - questResponse - ); + return rewardHelper.ApplyRewards(rewards, CustomisationSource.UNLOCKED_IN_GAME, fullProfile, profileData, questId, questResponse); } /// @@ -125,9 +113,7 @@ public class QuestRewardHelper( // Group daily/weekly/scav repeatable subtypes into one collection and find first that matched desired quest id return pmcData - .RepeatableQuests?.SelectMany(repeatableQuestSubType => - repeatableQuestSubType.ActiveQuests - ) + .RepeatableQuests?.SelectMany(repeatableQuestSubType => repeatableQuestSubType.ActiveQuests) .FirstOrDefault(repeatableQuest => repeatableQuest.Id == questId); } @@ -139,23 +125,17 @@ public class QuestRewardHelper( protected double GetQuestMoneyRewardBonusMultiplier(PmcData pmcData) { // Check player has intel center - var moneyRewardBonuses = pmcData.Bonuses.Where(bonus => - bonus.Type == BonusType.QuestMoneyReward - ); + var moneyRewardBonuses = pmcData.Bonuses.Where(bonus => bonus.Type == BonusType.QuestMoneyReward); // Get a total of the quest money reward percent bonuses - var moneyRewardBonusPercent = moneyRewardBonuses.Aggregate( - 0D, - (accumulate, bonus) => accumulate + bonus.Value ?? 0 - ); + var moneyRewardBonusPercent = moneyRewardBonuses.Aggregate(0D, (accumulate, bonus) => accumulate + bonus.Value ?? 0); // Calculate hideout management bonus as a percentage (up to 51% bonus) var hideoutManagementSkill = pmcData.GetSkillFromProfile(SkillTypes.HideoutManagement); // 5100 becomes 0.51, add 1 to it, 1.51 // We multiply the money reward bonuses by the hideout management skill multiplier, giving the new result - var hideoutManagementBonusMultiplier = - hideoutManagementSkill != null ? 2 + hideoutManagementSkill.Progress / 1000 : 1; + var hideoutManagementBonusMultiplier = hideoutManagementSkill != null ? 2 + hideoutManagementSkill.Progress / 1000 : 1; // e.g 15% * 1.4 return moneyRewardBonusPercent + hideoutManagementBonusMultiplier ?? 1; @@ -192,16 +172,12 @@ public class QuestRewardHelper( var rewardItem = moneyReward.Items?.FirstOrDefault(); if (rewardItem is null) { - logger.Error( - $"Unable to apply money reward bonus to quest: {quest.Name} as no money item found" - ); + logger.Error($"Unable to apply money reward bonus to quest: {quest.Name} as no money item found"); continue; } - var newCurrencyAmount = Math.Floor( - (rewardItem.Upd.StackObjectsCount ?? 0) * (1 + (bonusPercent / 100)) - ); + var newCurrencyAmount = Math.Floor((rewardItem.Upd.StackObjectsCount ?? 0) * (1 + (bonusPercent / 100))); rewardItem.Upd.StackObjectsCount = newCurrencyAmount; moneyReward.Value = newCurrencyAmount; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs index e16107ac..8298a851 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs @@ -100,11 +100,7 @@ public class RagfairHelper( public Dictionary GetDisplayableAssorts(MongoId sessionId) { var result = new Dictionary(); - foreach ( - var traderId in databaseService - .GetTraders() - .Keys.Where(traderId => _ragfairConfig.Traders.ContainsKey(traderId)) - ) + foreach (var traderId in databaseService.GetTraders().Keys.Where(traderId => _ragfairConfig.Traders.ContainsKey(traderId))) { result[traderId] = traderAssortHelper.GetAssort(sessionId, traderId, true); } @@ -138,11 +134,7 @@ public class RagfairHelper( return handbookHelper .ChildrenCategories(handbookId) - .Aggregate( - result, - (current, category) => - [.. current, .. handbookHelper.TemplatesWithParent(category)] - ); + .Aggregate(result, (current, category) => [.. current, .. handbookHelper.TemplatesWithParent(category)]); } // It's a specific item searched diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs index 1b9894a4..b1dbaa5b 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs @@ -72,14 +72,7 @@ public class RagfairOfferHelper( return false; } - var isDisplayable = IsDisplayableOffer( - searchRequest, - itemsToAdd, - traderAssorts, - offer, - pmcData, - playerIsFleaBanned - ); + var isDisplayable = IsDisplayableOffer(searchRequest, itemsToAdd, traderAssorts, offer, pmcData, playerIsFleaBanned); if (!isDisplayable) { @@ -119,16 +112,10 @@ public class RagfairOfferHelper( var offerItemTpl = offer.Items.FirstOrDefault().Template; // Check if offer item is ammo - if ( - tieredFlea.AmmoTplUnlocks is not null - && itemHelper.IsOfBaseclass(offerItemTpl, BaseClasses.AMMO) - ) + if (tieredFlea.AmmoTplUnlocks is not null && itemHelper.IsOfBaseclass(offerItemTpl, BaseClasses.AMMO)) { // Check if ammo is flagged with a level requirement - if ( - tieredFlea.AmmoTplUnlocks.TryGetValue(offerItemTpl, out var unlockLevel) - && playerLevel < unlockLevel - ) + if (tieredFlea.AmmoTplUnlocks.TryGetValue(offerItemTpl, out var unlockLevel) && playerLevel < unlockLevel) { // Lock the offer if player's level is below the ammo's unlock requirement offer.Locked = true; @@ -174,15 +161,10 @@ public class RagfairOfferHelper( /// Search request from client /// Player profile /// Matching RagfairOffer objects - public List GetOffersThatRequireItem( - SearchRequestData searchRequest, - PmcData pmcData - ) + public List GetOffersThatRequireItem(SearchRequestData searchRequest, PmcData pmcData) { // Get all offers that require the desired item and filter out offers from non traders if player below ragfair unlock - var offerIDsForItem = ragfairRequiredItemsService.GetRequiredOffersById( - searchRequest.NeededSearchId.Value - ); + var offerIDsForItem = ragfairRequiredItemsService.GetRequiredOffersById(searchRequest.NeededSearchId.Value); var tieredFlea = _ragfairConfig.TieredFlea; var tieredFleaLimitTypes = tieredFlea.UnlocksType; @@ -196,12 +178,7 @@ public class RagfairOfferHelper( { if (tieredFlea.Enabled && !offer.IsTraderOffer()) { - CheckAndLockOfferFromPlayerTieredFlea( - tieredFlea, - offer, - tieredFleaLimitTypes.Keys.ToHashSet(), - pmcData.Info.Level.Value - ); + CheckAndLockOfferFromPlayerTieredFlea(tieredFlea, offer, tieredFleaLimitTypes.Keys.ToHashSet(), pmcData.Info.Level.Value); } result.Add(offer); @@ -253,16 +230,7 @@ public class RagfairOfferHelper( continue; } - if ( - !IsDisplayableOffer( - searchRequest, - itemsToAdd, - traderAssorts, - offer, - pmcData, - playerIsFleaBanned - ) - ) + if (!IsDisplayableOffer(searchRequest, itemsToAdd, traderAssorts, offer, pmcData, playerIsFleaBanned)) { continue; } @@ -334,9 +302,7 @@ public class RagfairOfferHelper( // Exclude locked offers + above loyalty locked offers if at least 1 was found offersToSort = possibleOffers - .Where(offer => - !(offer.Locked.GetValueOrDefault(false) || lockedOffers.Contains(offer.Id)) - ) + .Where(offer => !(offer.Locked.GetValueOrDefault(false) || lockedOffers.Contains(offer.Id))) .ToList(); // Exclude trader offers over their buy restriction limit @@ -391,9 +357,7 @@ public class RagfairOfferHelper( // Performing a required search and offer doesn't have requirement for item if ( !string.IsNullOrEmpty(searchRequest.NeededSearchId) - && !offer.Requirements.Any(requirement => - requirement.TemplateId == searchRequest.NeededSearchId - ) + && !offer.Requirements.Any(requirement => requirement.TemplateId == searchRequest.NeededSearchId) ) { return false; @@ -412,10 +376,7 @@ public class RagfairOfferHelper( // commented out as required search "which is for checking offers that are barters" // has info.removeBartering as true, this if statement removed barter items. - if ( - searchRequest.RemoveBartering.GetValueOrDefault(false) - && !paymentHelper.IsMoneyTpl(moneyTypeTpl) - ) + if (searchRequest.RemoveBartering.GetValueOrDefault(false) && !paymentHelper.IsMoneyTpl(moneyTypeTpl)) // Don't include barter offers { return false; @@ -453,19 +414,13 @@ public class RagfairOfferHelper( /// /// offers to process /// Offers - protected List GetOffersInsideBuyRestrictionLimits( - List possibleOffers - ) + protected List GetOffersInsideBuyRestrictionLimits(List possibleOffers) { // Check offer has buy limit + is from trader + current buy count is at or over max return possibleOffers .Where(offer => { - if ( - offer.BuyRestrictionMax is null - && offer.IsTraderOffer() - && offer.BuyRestrictionCurrent >= offer.BuyRestrictionMax - ) + if (offer.BuyRestrictionMax is null && offer.IsTraderOffer() && offer.BuyRestrictionCurrent >= offer.BuyRestrictionMax) { if (offer.BuyRestrictionCurrent >= offer.BuyRestrictionMax) { @@ -489,9 +444,7 @@ public class RagfairOfferHelper( { if (!pmcProfile.TradersInfo.TryGetValue(offer.User.Id, out var userTraderSettings)) { - logger.Warning( - $"Trader: {offer.User.Id} not found in profile, assuming offer is not locked being loyalty level" - ); + logger.Warning($"Trader: {offer.User.Id} not found in profile, assuming offer is not locked being loyalty level"); return false; } @@ -505,10 +458,7 @@ public class RagfairOfferHelper( /// Offer to check is quest locked /// all trader assorts for player /// true if quest locked - public bool TraderOfferItemQuestLocked( - RagfairOffer offer, - Dictionary traderAssorts - ) + public bool TraderOfferItemQuestLocked(RagfairOffer offer, Dictionary traderAssorts) { var itemIds = offer.Items.Select(x => x.Id).ToHashSet(); //foreach (var item in offer.Items) @@ -533,11 +483,7 @@ public class RagfairOfferHelper( assorts .BarterScheme.Where(x => itemIds.Contains(x.Key)) .Any(barterKvP => - barterKvP.Value.Any(subBarter => - subBarter.Any(subBarter => - subBarter.SptQuestLocked.GetValueOrDefault(false) - ) - ) + barterKvP.Value.Any(subBarter => subBarter.Any(subBarter => subBarter.SptQuestLocked.GetValueOrDefault(false))) ) ) { @@ -595,10 +541,7 @@ public class RagfairOfferHelper( // No restriction values // Can't use !assortData.upd.BuyRestrictionX as value could be 0 - if ( - assortData.Upd.BuyRestrictionMax is null - || assortData.Upd.BuyRestrictionCurrent is null - ) + if (assortData.Upd.BuyRestrictionMax is null || assortData.Upd.BuyRestrictionCurrent is null) { return false; } @@ -612,18 +555,12 @@ public class RagfairOfferHelper( return false; } - protected HashSet GetLoyaltyLockedOffers( - IEnumerable offers, - PmcData pmcProfile - ) + protected HashSet GetLoyaltyLockedOffers(IEnumerable offers, PmcData pmcProfile) { var loyaltyLockedOffers = new HashSet(); foreach (var offer in offers.Where(x => x.IsTraderOffer())) { - if ( - pmcProfile.TradersInfo.TryGetValue(offer.User.Id, out var traderDetails) - && traderDetails.LoyaltyLevel < offer.LoyaltyLevel - ) + if (pmcProfile.TradersInfo.TryGetValue(offer.User.Id, out var traderDetails) && traderDetails.LoyaltyLevel < offer.LoyaltyLevel) { loyaltyLockedOffers.Add(offer.Id); } @@ -658,11 +595,7 @@ public class RagfairOfferHelper( continue; } - if ( - offer.SellResults is null - || !offer.SellResults.Any() - || currentTimestamp < offer.SellResults.FirstOrDefault()?.SellTime - ) + if (offer.SellResults is null || !offer.SellResults.Any() || currentTimestamp < offer.SellResults.FirstOrDefault()?.SellTime) { // Not sold / too early to check continue; @@ -688,10 +621,7 @@ public class RagfairOfferHelper( } var ratingToAdd = offer.SummaryCost / totalItemsCount * boughtAmount; - IncreaseProfileRagfairRating( - profileHelper.GetFullProfile(sessionId), - ratingToAdd.Value - ); + IncreaseProfileRagfairRating(profileHelper.GetFullProfile(sessionId), ratingToAdd.Value); // Remove the sell result object now it has been processed offer.SellResults.Remove(firstSellResult); @@ -727,17 +657,13 @@ public class RagfairOfferHelper( profile.CharacterData.PmcData.RagfairInfo.IsRatingGrowing = true; if (amountToIncrementBy is null) { - logger.Warning( - $"Unable to increment ragfair rating, value was not a number: {amountToIncrementBy}" - ); + logger.Warning($"Unable to increment ragfair rating, value was not a number: {amountToIncrementBy}"); return; } profile.CharacterData.PmcData.RagfairInfo.Rating += - ragfairGlobalsConfig.RatingIncreaseCount - / ragfairGlobalsConfig.RatingSumForIncrease - * amountToIncrementBy; + ragfairGlobalsConfig.RatingIncreaseCount / ragfairGlobalsConfig.RatingSumForIncrease * amountToIncrementBy; } /// @@ -768,9 +694,7 @@ public class RagfairOfferHelper( var offerIndex = profileRagfairInfo.Offers.FindIndex(o => o.Id == offerId); if (offerIndex == -1) { - logger.Warning( - $"Unable to find offer: {offerId} in profile: {sessionId}, unable to delete" - ); + logger.Warning($"Unable to find offer: {offerId} in profile: {sessionId}, unable to delete"); } if (offerIndex >= 0) @@ -789,11 +713,7 @@ public class RagfairOfferHelper( /// Sold offer details /// Amount item was purchased for /// ItemEventRouterResponse - public ItemEventRouterResponse CompleteOffer( - MongoId offerOwnerSessionId, - RagfairOffer offer, - int boughtAmount - ) + public ItemEventRouterResponse CompleteOffer(MongoId offerOwnerSessionId, RagfairOffer offer, int boughtAmount) { // Pack or ALL items of a multi-offer were bought - remove entire offer if (offer.SellInOnePiece.GetValueOrDefault(false) || boughtAmount == offer.Quantity) @@ -846,15 +766,11 @@ public class RagfairOfferHelper( OfferId = offer.Id, // pack-offers NEED to be the full item count, // otherwise it only removes 1 from the pack, leaving phantom offer on client ui - Count = offer.SellInOnePiece.GetValueOrDefault(false) - ? offerStackCount.Value - : boughtAmount, + Count = offer.SellInOnePiece.GetValueOrDefault(false) ? offerStackCount.Value : boughtAmount, HandbookId = itemTpl, }; - var storageTimeSeconds = timeUtil.GetHoursAsSeconds( - (int)questHelper.GetMailItemRedeemTimeHoursForProfile(sellerProfile) - ); + var storageTimeSeconds = timeUtil.GetHoursAsSeconds((int)questHelper.GetMailItemRedeemTimeHoursForProfile(sellerProfile)); mailSendService.SendDirectNpcMessageToPlayer( offerOwnerSessionId, Traders.RAGMAN, @@ -885,12 +801,7 @@ public class RagfairOfferHelper( var globalLocales = localeService.GetLocaleDb(); if (!globalLocales.TryGetValue(_goodSoldTemplate, out var soldMessageLocaleGuid)) { - logger.Error( - serverLocalisationService.GetText( - "ragfair-unable_to_find_locale_by_key", - _goodSoldTemplate - ) - ); + logger.Error(serverLocalisationService.GetText("ragfair-unable_to_find_locale_by_key", _goodSoldTemplate)); } // Used to replace tokens in sold message sent to player @@ -911,14 +822,8 @@ public class RagfairOfferHelper( // Seems to be much simpler just replacing each key like this. soldMessageLocaleGuid = soldMessageLocaleGuid.Replace("{soldItem}", tplVars.SoldItem); - soldMessageLocaleGuid = soldMessageLocaleGuid.Replace( - "{itemCount}", - tplVars.ItemCount.ToString() - ); - soldMessageLocaleGuid = soldMessageLocaleGuid.Replace( - "{buyerNickname}", - tplVars.BuyerNickname - ); + soldMessageLocaleGuid = soldMessageLocaleGuid.Replace("{itemCount}", tplVars.ItemCount.ToString()); + soldMessageLocaleGuid = soldMessageLocaleGuid.Replace("{buyerNickname}", tplVars.BuyerNickname); return soldMessageLocaleGuid; } @@ -929,20 +834,13 @@ public class RagfairOfferHelper( /// Offer to check /// Player profile /// True if offer passes criteria - protected bool PassesSearchFilterCriteria( - SearchRequestData searchRequest, - RagfairOffer offer, - PmcData pmcData - ) + protected bool PassesSearchFilterCriteria(SearchRequestData searchRequest, RagfairOffer offer, PmcData pmcData) { var isDefaultUserOffer = offer.User.MemberType == MemberCategory.Default; var offerRootItem = offer.Items.FirstOrDefault(); var offerMoneyTypeTpl = offer.Requirements.FirstOrDefault().TemplateId; - if ( - pmcData.Info.Level < databaseService.GetGlobals().Configuration.RagFair.MinUserLevel - && isDefaultUserOffer - ) + if (pmcData.Info.Level < databaseService.GetGlobals().Configuration.RagFair.MinUserLevel && isDefaultUserOffer) // Skip item if player is < global unlock level (default is 15) and item is from a dynamically generated source { return false; @@ -961,37 +859,25 @@ public class RagfairOfferHelper( return false; } - if ( - searchRequest.OneHourExpiration.GetValueOrDefault(false) - && offer.EndTime - timeUtil.GetTimeStamp() > TimeUtil.OneHourAsSeconds - ) + if (searchRequest.OneHourExpiration.GetValueOrDefault(false) && offer.EndTime - timeUtil.GetTimeStamp() > TimeUtil.OneHourAsSeconds) // offer expires within an hour { return false; } - if ( - searchRequest.QuantityFrom > 0 - && offerRootItem.Upd.StackObjectsCount < searchRequest.QuantityFrom - ) + if (searchRequest.QuantityFrom > 0 && offerRootItem.Upd.StackObjectsCount < searchRequest.QuantityFrom) // Too few items to offer { return false; } - if ( - searchRequest.QuantityTo > 0 - && offerRootItem.Upd.StackObjectsCount > searchRequest.QuantityTo - ) + if (searchRequest.QuantityTo > 0 && offerRootItem.Upd.StackObjectsCount > searchRequest.QuantityTo) // Too many items to offer { return false; } - if ( - searchRequest.OnlyFunctional.GetValueOrDefault(false) - && !IsItemFunctional(offerRootItem, offer) - ) + if (searchRequest.OnlyFunctional.GetValueOrDefault(false) && !IsItemFunctional(offerRootItem, offer)) // Don't include non-functional items { return false; @@ -1003,11 +889,7 @@ public class RagfairOfferHelper( // Single item if ( IsConditionItem(offerRootItem) - && !ItemQualityInRange( - offerRootItem, - searchRequest.ConditionFrom.Value, - searchRequest.ConditionTo.Value - ) + && !ItemQualityInRange(offerRootItem, searchRequest.ConditionFrom.Value, searchRequest.ConditionTo.Value) ) { return false; @@ -1031,8 +913,7 @@ public class RagfairOfferHelper( { // Only want offers with specific currency if ( - ragfairHelper.GetCurrencyTag(offerMoneyTypeTpl) - != ragfairHelper.GetCurrencyTag(searchRequest.Currency.GetValueOrDefault(0)) + ragfairHelper.GetCurrencyTag(offerMoneyTypeTpl) != ragfairHelper.GetCurrencyTag(searchRequest.Currency.GetValueOrDefault(0)) ) { // Offer is for different currency to what search params allow, skip @@ -1074,9 +955,7 @@ public class RagfairOfferHelper( if (itemHelper.ArmorItemCanHoldMods(offerRootItem.Template)) { var offerRootTemplate = itemHelper.GetItem(offerRootItem.Template).Value; - var requiredPlateCount = offerRootTemplate - .Properties.Slots?.Where(item => item.Required.GetValueOrDefault(false)) - .Count(); + var requiredPlateCount = offerRootTemplate.Properties.Slots?.Where(item => item.Required.GetValueOrDefault(false)).Count(); return offer.Items.Count > requiredPlateCount; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs index 6479a4e5..e270c795 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs @@ -28,11 +28,7 @@ public class RagfairSellHelper( /// Price player listed item for in roubles /// Quality multiplier of item being sold /// percent value - public double CalculateSellChance( - double averageOfferPriceRub, - double playerListedPriceRub, - double qualityMultiplier - ) + public double CalculateSellChance(double averageOfferPriceRub, double playerListedPriceRub, double qualityMultiplier) { var sellConfig = _ragfairConfig.Sell.Chance; @@ -41,9 +37,7 @@ public class RagfairSellHelper( // Modifier gets applied twice to either penalize or incentivize over/under pricing (Probably a cleaner way to do this) var sellModifier = averageOfferPriceRub / playerListedPriceRub * sellConfig.SellMultiplier; - var sellChance = Math.Round( - baseSellChancePercent * sellModifier * Math.Pow(sellModifier, 3) + 10 - ); // Power of 3 + var sellChance = Math.Round(baseSellChancePercent * sellModifier * Math.Pow(sellModifier, 3) + 10); // Power of 3 // Adjust sell chance if below config value if (sellChance < sellConfig.MinSellChancePercent) @@ -67,20 +61,13 @@ public class RagfairSellHelper( /// count of items to sell /// All items listed get sold at once /// List of purchases of item(s) listed - public List RollForSale( - double? sellChancePercent, - int itemSellCount, - bool sellInOneGo = false - ) + public List RollForSale(double? sellChancePercent, int itemSellCount, bool sellInOneGo = false) { var startTimestamp = timeUtil.GetTimeStamp(); // Get a time in future to stop simulating sell chances at var endTime = - startTimestamp - + timeUtil.GetHoursAsSeconds( - (int)databaseService.GetGlobals().Configuration.RagFair.OfferDurationTimeInHour - ); + startTimestamp + timeUtil.GetHoursAsSeconds((int)databaseService.GetGlobals().Configuration.RagFair.OfferDurationTimeInHour); var sellTimestamp = startTimestamp; var remainingCount = itemSellCount; @@ -91,16 +78,12 @@ public class RagfairSellHelper( if (sellChancePercent is null) { effectiveSellChance = _ragfairConfig.Sell.Chance.Base; - logger.Warning( - $"Sell chance was not a number: {sellChancePercent}, defaulting to {_ragfairConfig.Sell.Chance.Base}%" - ); + logger.Warning($"Sell chance was not a number: {sellChancePercent}, defaulting to {_ragfairConfig.Sell.Chance.Base}%"); } if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Rolling to sell: {itemSellCount} item(s) - (chance: {effectiveSellChance}%)" - ); + logger.Debug($"Rolling to sell: {itemSellCount} item(s) - (chance: {effectiveSellChance}%)"); } // No point rolling for a sale on a 0% chance item, exit early @@ -126,9 +109,7 @@ public class RagfairSellHelper( // Sell time will be random between min/max var random = new Random(); - var newSellTime = Math.Floor( - random.NextDouble() * (maximumTime.Value - minimumTime) + minimumTime - ); + var newSellTime = Math.Floor(random.NextDouble() * (maximumTime.Value - minimumTime) + minimumTime); if (newSellTime == 0) // Ensure all sales don't occur the same exact time { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs index b95ba1ee..cdd30c6b 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs @@ -50,10 +50,7 @@ public class RagfairServerHelper( } // Skip bsg blacklisted items - if ( - blacklistConfig.EnableBsgList - && !(itemDetails.Value?.Properties?.CanSellOnRagfair ?? false) - ) + if (blacklistConfig.EnableBsgList && !(itemDetails.Value?.Properties?.CanSellOnRagfair ?? false)) { return false; } @@ -67,10 +64,7 @@ public class RagfairServerHelper( } // Skip custom category blacklisted items - if ( - blacklistConfig.EnableCustomItemCategoryList - && IsItemCategoryOnCustomFleaBlacklist(itemDetails.Value.Parent) - ) + if (blacklistConfig.EnableCustomItemCategoryList && IsItemCategoryOnCustomFleaBlacklist(itemDetails.Value.Parent)) { return false; } @@ -137,12 +131,7 @@ public class RagfairServerHelper( MessageType.MessageWithItems, goodsReturnedTemplate, returnedItems, - timeUtil.GetHoursAsSeconds( - (int) - databaseService - .GetGlobals() - .Configuration.RagFair.YourOfferDidNotSellMaxStorageTimeInHour - ) + timeUtil.GetHoursAsSeconds((int)databaseService.GetGlobals().Configuration.RagFair.YourOfferDidNotSellMaxStorageTimeInHour) ); } @@ -154,22 +143,11 @@ public class RagfairServerHelper( var itemDetails = itemHelper.GetItem(tplId); if (!itemDetails.Key) { - throw new Exception( - localisationService.GetText( - "ragfair-item_not_in_db_unable_to_generate_dynamic_stack_count", - tplId - ) - ); + throw new Exception(localisationService.GetText("ragfair-item_not_in_db_unable_to_generate_dynamic_stack_count", tplId)); } // Item Types to return one of - if ( - isPreset - || itemHelper.IsOfBaseclasses( - itemDetails.Value.Id, - ragfairConfig.Dynamic.ShowAsSingleStack - ) - ) + if (isPreset || itemHelper.IsOfBaseclasses(itemDetails.Value.Id, ragfairConfig.Dynamic.ShowAsSingleStack)) { return 1; } @@ -184,10 +162,7 @@ public class RagfairServerHelper( } // Get a % to get of stack size - var stackPercent = randomUtil.GetDouble( - config.StackablePercent.Min, - config.StackablePercent.Max - ); + var stackPercent = randomUtil.GetDouble(config.StackablePercent.Min, config.StackablePercent.Max); // Min value to return should be no less than 1 return Math.Max((int)randomUtil.GetPercentOfValue(stackPercent, maxStackSize, 0), 1); @@ -199,9 +174,7 @@ public class RagfairServerHelper( /// Currency TPL public MongoId GetDynamicOfferCurrency() { - return weightedRandomHelper.GetWeightedValue( - ragfairConfig.Dynamic.OfferCurrencyChangePercent - ); + return weightedRandomHelper.GetWeightedValue(ragfairConfig.Dynamic.OfferCurrencyChangePercent); } /// @@ -236,9 +209,7 @@ public class RagfairServerHelper( ) { // Add a clone of the found preset into list above - presets.AddRange( - itemHelper.ReparentItemAndChildren(item, cloner.Clone(presetsOfItem.Items)) - ); + presets.AddRange(itemHelper.ReparentItemAndChildren(item, cloner.Clone(presetsOfItem.Items))); } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs index d2f63e0d..2eb47f74 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs @@ -15,11 +15,7 @@ public class RagfairSortHelper(LocaleService localeService) /// How to sort it /// Ascending/descending /// Sorted offers - public List SortOffers( - List offers, - RagfairSort type, - int direction = 0 - ) + public List SortOffers(List offers, RagfairSort type, int direction = 0) { // Sort results switch (type) @@ -65,16 +61,8 @@ public class RagfairSortHelper(LocaleService localeService) protected int SortOffersByBarter(RagfairOffer a, RagfairOffer b) { - var aIsOnlyMoney = - a.Requirements.Count() == 1 - && Money.GetMoneyTpls().Contains(a.Requirements.First().TemplateId) - ? 1 - : 0; - var bIsOnlyMoney = - b.Requirements.Count() == 1 - && Money.GetMoneyTpls().Contains(b.Requirements.First().TemplateId) - ? 1 - : 0; + var aIsOnlyMoney = a.Requirements.Count() == 1 && Money.GetMoneyTpls().Contains(a.Requirements.First().TemplateId) ? 1 : 0; + var bIsOnlyMoney = b.Requirements.Count() == 1 && Money.GetMoneyTpls().Contains(b.Requirements.First().TemplateId) ? 1 : 0; return aIsOnlyMoney - bIsOnlyMoney; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs index 9dffbbb2..bd2811e3 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs @@ -44,9 +44,7 @@ public class RepairHelper( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Adding {amountToRepair} to {itemToRepairDetails.Name} using kit: {useRepairKit}" - ); + logger.Debug($"Adding {amountToRepair} to {itemToRepairDetails.Name} using kit: {useRepairKit}"); } var itemMaxDurability = cloner.Clone(itemToRepair.Upd.Repairable.MaxDurability); @@ -69,11 +67,7 @@ public class RepairHelper( } // Update Repairable properties with new values after repair - itemToRepair.Upd.Repairable = new UpdRepairable - { - Durability = newCurrentDurability, - MaxDurability = newCurrentMaxDurability, - }; + itemToRepair.Upd.Repairable = new UpdRepairable { Durability = newCurrentDurability, MaxDurability = newCurrentMaxDurability }; // when modders set the repair coefficient to 0 it means that they dont want to lose durability on items // the code below generates a random degradation on the weapon durability @@ -126,26 +120,17 @@ public class RepairHelper( ) { // Degradation value is based on the armor material - if ( - !databaseService - .GetGlobals() - .Configuration.ArmorMaterials.TryGetValue(material, out var armorMaterialSettings) - ) + if (!databaseService.GetGlobals().Configuration.ArmorMaterials.TryGetValue(material, out var armorMaterialSettings)) { logger.Error($"Unable to find armor with a type of: {material}"); } - var minMultiplier = isRepairKit - ? armorMaterialSettings.MinRepairKitDegradation - : armorMaterialSettings.MinRepairDegradation; + var minMultiplier = isRepairKit ? armorMaterialSettings.MinRepairKitDegradation : armorMaterialSettings.MinRepairDegradation; - var maxMultiplier = isRepairKit - ? armorMaterialSettings.MaxRepairKitDegradation - : armorMaterialSettings.MaxRepairDegradation; + var maxMultiplier = isRepairKit ? armorMaterialSettings.MaxRepairKitDegradation : armorMaterialSettings.MaxRepairDegradation; var duraLossPercent = randomUtil.GetDouble((double)minMultiplier, (double)maxMultiplier); - var duraLossMultipliedByTraderMultiplier = - duraLossPercent * armorMax * traderQualityMultiplier; + var duraLossMultipliedByTraderMultiplier = duraLossPercent * armorMax * traderQualityMultiplier; return Math.Round(duraLossMultipliedByTraderMultiplier, 2); } @@ -165,12 +150,8 @@ public class RepairHelper( double traderQualityMultipler ) { - var minRepairDeg = isRepairKit - ? itemProps.MinRepairKitDegradation - : itemProps.MinRepairDegradation; - var maxRepairDeg = isRepairKit - ? itemProps.MaxRepairKitDegradation - : itemProps.MaxRepairDegradation; + var minRepairDeg = isRepairKit ? itemProps.MinRepairKitDegradation : itemProps.MinRepairDegradation; + var maxRepairDeg = isRepairKit ? itemProps.MaxRepairKitDegradation : itemProps.MaxRepairDegradation; // WORKAROUND: Some items are always 0 when repairkit is true if (maxRepairDeg == 0) @@ -179,8 +160,7 @@ public class RepairHelper( } var duraLossPercent = randomUtil.GetDouble((double)minRepairDeg, (double)maxRepairDeg); - var duraLossMultipliedByTraderMultiplier = - duraLossPercent * weaponMax * traderQualityMultipler; + var duraLossMultipliedByTraderMultiplier = duraLossPercent * weaponMax * traderQualityMultipler; return Math.Round(duraLossMultipliedByTraderMultiplier, 2); } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs index cf4f178c..8bbd2fee 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs @@ -27,14 +27,9 @@ public class RepeatableQuestHelper( /// Level of PMC character /// Main repeatable config /// EliminationConfig - public EliminationConfig? GetEliminationConfigByPmcLevel( - int pmcLevel, - RepeatableQuestConfig repeatableConfig - ) + public EliminationConfig? GetEliminationConfigByPmcLevel(int pmcLevel, RepeatableQuestConfig repeatableConfig) { - return repeatableConfig.QuestConfig.Elimination.FirstOrDefault(x => - pmcLevel >= x.LevelRange.Min && pmcLevel <= x.LevelRange.Max - ); + return repeatableConfig.QuestConfig.Elimination.FirstOrDefault(x => pmcLevel >= x.LevelRange.Min && pmcLevel <= x.LevelRange.Max); } /// @@ -62,25 +57,14 @@ public class RepeatableQuestHelper( /// TraderId that should provide this quest /// Cloned quest template /// - public RepeatableQuest? GetClonedQuestTemplateForType( - RepeatableQuestType type, - MongoId traderId - ) + public RepeatableQuest? GetClonedQuestTemplateForType(RepeatableQuestType type, MongoId traderId) { var quest = type switch { - RepeatableQuestType.Elimination => cloner.Clone( - databaseService.GetTemplates().RepeatableQuests?.Templates?.Elimination - ), - RepeatableQuestType.Completion => cloner.Clone( - databaseService.GetTemplates().RepeatableQuests?.Templates?.Completion - ), - RepeatableQuestType.Exploration => cloner.Clone( - databaseService.GetTemplates().RepeatableQuests?.Templates?.Exploration - ), - RepeatableQuestType.Pickup => cloner.Clone( - databaseService.GetTemplates().RepeatableQuests?.Templates?.Pickup - ), + RepeatableQuestType.Elimination => cloner.Clone(databaseService.GetTemplates().RepeatableQuests?.Templates?.Elimination), + RepeatableQuestType.Completion => cloner.Clone(databaseService.GetTemplates().RepeatableQuests?.Templates?.Completion), + RepeatableQuestType.Exploration => cloner.Clone(databaseService.GetTemplates().RepeatableQuests?.Templates?.Exploration), + RepeatableQuestType.Pickup => cloner.Clone(databaseService.GetTemplates().RepeatableQuests?.Templates?.Pickup), _ => null, }; @@ -119,12 +103,7 @@ public class RepeatableQuestHelper( if (questData is null) { - logger.Error( - serverLocalisationService.GetText( - "repeatable-quest_helper_template_not_found", - type - ) - ); + logger.Error(serverLocalisationService.GetText("repeatable-quest_helper_template_not_found", type)); return null; } @@ -135,12 +114,7 @@ public class RepeatableQuestHelper( if (templateName is null) { - logger.Error( - serverLocalisationService.GetText( - "repeatable-quest_helper_template_name_not_found", - type - ) - ); + logger.Error(serverLocalisationService.GetText("repeatable-quest_helper_template_name_not_found", type)); return null; } @@ -154,17 +128,11 @@ public class RepeatableQuestHelper( // template ids -pmc : Elimination = 616052ea3054fc0e2c24ce6e / Completion = 61604635c725987e815b1a46 / Exploration = 616041eb031af660100c9967 // template ids -scav : Elimination = 62825ef60e88d037dc1eb428 / Completion = 628f588ebb558574b2260fe5 / Exploration = 62825ef60e88d037dc1eb42c - questData.Name = questData - .Name.Replace("{traderId}", traderId) - .Replace("{templateId}", questData.TemplateId); + questData.Name = questData.Name.Replace("{traderId}", traderId).Replace("{templateId}", questData.TemplateId); - questData.Note = questData - .Note?.Replace("{traderId}", desiredTraderId) - .Replace("{templateId}", questData.TemplateId); + questData.Note = questData.Note?.Replace("{traderId}", desiredTraderId).Replace("{templateId}", questData.TemplateId); - questData.Description = questData - .Description.Replace("{traderId}", desiredTraderId) - .Replace("{templateId}", questData.TemplateId); + questData.Description = questData.Description.Replace("{traderId}", desiredTraderId).Replace("{templateId}", questData.TemplateId); questData.SuccessMessageText = questData .SuccessMessageText?.Replace("{traderId}", desiredTraderId) @@ -196,9 +164,7 @@ public class RepeatableQuestHelper( if (questData.QuestStatus is null) { - logger.Error( - serverLocalisationService.GetText("repeatable-quest_helper_no_status", type) - ); + logger.Error(serverLocalisationService.GetText("repeatable-quest_helper_no_status", type)); return null; } @@ -218,9 +184,7 @@ public class RepeatableQuestHelper( { if (!QuestConfig.LocationIdMap.TryGetValue(locationKey, out var locationId)) { - logger.Error( - serverLocalisationService.GetText("repeatable-quest_helper_no_loc_id", locationKey) - ); + logger.Error(serverLocalisationService.GetText("repeatable-quest_helper_no_loc_id", locationKey)); return null; } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs index d9391af2..8beff1cb 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs @@ -71,28 +71,15 @@ public class RewardHelper( { case RewardType.Skill: // This needs to use the passed in profileData, as it could be the scav profile - profileHelper.AddSkillPointsToPlayer( - profileData, - Enum.Parse(reward.Target), - reward.Value - ); + profileHelper.AddSkillPointsToPlayer(profileData, Enum.Parse(reward.Target), reward.Value); break; case RewardType.Experience: - profileHelper.AddExperienceToPmc( - sessionId.Value, - int.Parse(reward.Value.ToString()) - ); // this must occur first as the output object needs to take the modified profile exp value + profileHelper.AddExperienceToPmc(sessionId.Value, int.Parse(reward.Value.ToString())); // this must occur first as the output object needs to take the modified profile exp value // Recalculate level in event player leveled up - pmcProfile.Info.Level = pmcProfile.CalculateLevel( - databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable - ); + pmcProfile.Info.Level = pmcProfile.CalculateLevel(databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable); break; case RewardType.TraderStanding: - traderHelper.AddStandingToTrader( - sessionId.Value, - reward.Target, - reward.Value.Value - ); + traderHelper.AddStandingToTrader(sessionId.Value, reward.Target, reward.Value.Value); break; case RewardType.TraderUnlock: traderHelper.SetTraderUnlockedState(reward.Target, true, sessionId.Value); @@ -107,10 +94,7 @@ public class RewardHelper( AddAchievementToProfile(fullProfile, reward.Target); break; case RewardType.StashRows: - var bonusId = profileHelper.AddStashRowsBonusToProfile( - sessionId.Value, - (int)reward.Value - ); // Add specified stash rows from reward - requires client restart + var bonusId = profileHelper.AddStashRowsBonusToProfile(sessionId.Value, (int)reward.Value); // Add specified stash rows from reward - requires client restart notificationSendHelper.SendMessage( sessionId.Value, @@ -124,13 +108,7 @@ public class RewardHelper( break; case RewardType.ProductionScheme: - FindAndAddHideoutProductionIdToProfile( - pmcProfile, - reward, - rewardSourceId, - sessionId.Value, - questResponse - ); + FindAndAddHideoutProductionIdToProfile(pmcProfile, reward, rewardSourceId, sessionId.Value, questResponse); break; case RewardType.Pockets: profileHelper.ReplaceProfilePocketTpl(pmcProfile, reward.Target); @@ -177,19 +155,13 @@ public class RewardHelper( /// True if it has requirement, false if it doesn't pass check. public bool RewardIsForGameEdition(Reward reward, string gameVersion) { - if ( - reward.AvailableInGameEditions?.Count > 0 - && !reward.AvailableInGameEditions.Contains(gameVersion) - ) + if (reward.AvailableInGameEditions?.Count > 0 && !reward.AvailableInGameEditions.Contains(gameVersion)) // Reward has edition whitelist and game version isn't in it { return false; } - if ( - reward.NotAvailableInGameEditions?.Count > 0 - && reward.NotAvailableInGameEditions.Contains(gameVersion) - ) + if (reward.NotAvailableInGameEditions?.Count > 0 && reward.NotAvailableInGameEditions.Contains(gameVersion)) // Reward has edition blacklist and game version is in it { return false; @@ -245,10 +217,7 @@ public class RewardHelper( /// Reward with craft unlock details. /// Quest or achievement ID with craft unlock reward. /// List of matching HideoutProduction objects. - public List GetRewardProductionMatch( - Reward craftUnlockReward, - MongoId questId - ) + public List GetRewardProductionMatch(Reward craftUnlockReward, MongoId questId) { // Get hideout crafts and find those that match by areatype/required level/end product tpl - hope for just one match var craftingRecipes = databaseService.GetHideout().Production.Recipes; @@ -262,9 +231,7 @@ public class RewardHelper( && //prod.requirements.some((requirement) => requirement.questId == questId) && // BSG don't store the quest id in requirement any more! prod.Requirements.Any(requirement => requirement.Type == "QuestComplete") - && prod.Requirements.Any(requirement => - requirement.RequiredLevel == craftUnlockReward.LoyaltyLevel - ) + && prod.Requirements.Any(requirement => requirement.RequiredLevel == craftUnlockReward.LoyaltyLevel) && prod.EndProduct == craftUnlockReward.Items.FirstOrDefault().Template ) .ToList(); @@ -291,9 +258,7 @@ public class RewardHelper( { // Iterate over all rewards with the desired status, flatten out items that have a type of Item var rewardItems = rewards.SelectMany(reward => - reward.Type == RewardType.Item && RewardIsForGameEdition(reward, gameVersion) - ? ProcessReward(reward) - : [] + reward.Type == RewardType.Item && RewardIsForGameEdition(reward, gameVersion) ? ProcessReward(reward) : [] ); return rewardItems; @@ -360,16 +325,9 @@ public class RewardHelper( if (reward.Items.FirstOrDefault().Upd.SpawnedInSession.GetValueOrDefault(false)) // Propagate FiR status into child items { - if ( - !itemHelper.IsOfBaseclasses( - rewardItem.Template, - [BaseClasses.AMMO, BaseClasses.MONEY] - ) - ) + if (!itemHelper.IsOfBaseclasses(rewardItem.Template, [BaseClasses.AMMO, BaseClasses.MONEY])) { - rewardItem.Upd.SpawnedInSession = reward - .Items.FirstOrDefault() - ?.Upd.SpawnedInSession; + rewardItem.Upd.SpawnedInSession = reward.Items.FirstOrDefault()?.Upd.SpawnedInSession; } } @@ -429,9 +387,7 @@ public class RewardHelper( return; } - logger.Warning( - "Unable to find default preset for armor {originalRewardRootItem._tpl}, adding mods manually" - ); + logger.Warning("Unable to find default preset for armor {originalRewardRootItem._tpl}, adding mods manually"); var itemDbData = itemHelper.GetItem(originalRewardRootItem.Template).Value; // Hydrate reward with only 'required' mods - necessary for things like helmets otherwise you end up with nvgs/visors etc @@ -447,15 +403,10 @@ public class RewardHelper( public void AddAchievementToProfile(SptProfile fullProfile, MongoId achievementId) { // Add achievement id to profile with timestamp it was unlocked - fullProfile.CharacterData.PmcData.Achievements.TryAdd( - achievementId, - timeUtil.GetTimeStamp() - ); + fullProfile.CharacterData.PmcData.Achievements.TryAdd(achievementId, timeUtil.GetTimeStamp()); // Check for any customisation unlocks - var achievementDataDb = databaseService - .GetTemplates() - .Achievements.FirstOrDefault(achievement => achievement.Id == achievementId); + var achievementDataDb = databaseService.GetTemplates().Achievements.FirstOrDefault(achievement => achievement.Id == achievementId); if (achievementDataDb is null) { return; @@ -467,12 +418,6 @@ public class RewardHelper( // and the achievement reward should only be handled post-wipe. // All of that is to say, we are going to ignore the list of returned reward items here var pmcProfile = fullProfile.CharacterData.PmcData; - ApplyRewards( - achievementDataDb.Rewards, - CustomisationSource.ACHIEVEMENT, - fullProfile, - pmcProfile, - achievementDataDb.Id - ); + ApplyRewards(achievementDataDb.Rewards, CustomisationSource.ACHIEVEMENT, fullProfile, pmcProfile, achievementDataDb.Id); } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs index 69941fe8..80c65ee9 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs @@ -57,13 +57,7 @@ public class TradeHelper( List offerItems = []; Action? buyCallback; - if ( - string.Equals( - buyRequestData.TransactionId, - "ragfair", - StringComparison.OrdinalIgnoreCase - ) - ) + if (string.Equals(buyRequestData.TransactionId, "ragfair", StringComparison.OrdinalIgnoreCase)) { // Called when player purchases PMC offer from ragfair buyCallback = buyCount => @@ -71,9 +65,7 @@ public class TradeHelper( var allOffers = ragfairServer.GetOffers(); // We store ragfair offerId in buyRequestData.item_id - var offerWithItem = allOffers.FirstOrDefault(x => - x.Id == buyRequestData.ItemId - ); + var offerWithItem = allOffers.FirstOrDefault(x => x.Id == buyRequestData.ItemId); var itemPurchased = offerWithItem.Items.FirstOrDefault(); // Ensure purchase does not exceed trader item limit @@ -91,30 +83,17 @@ public class TradeHelper( // Decrement trader item count var itemPurchaseDetails = new PurchaseDetails { - Items = - [ - new PurchaseItems - { - ItemId = buyRequestData.ItemId, - Count = buyCount, - }, - ], + Items = [new PurchaseItems { ItemId = buyRequestData.ItemId, Count = buyCount }], TraderId = buyRequestData.TransactionId, }; - traderHelper.AddTraderPurchasesToPlayerProfile( - sessionID, - itemPurchaseDetails, - itemPurchased - ); + traderHelper.AddTraderPurchasesToPlayerProfile(sessionID, itemPurchaseDetails, itemPurchased); } }; // buyCallback = BuyCallback1; // Get raw offer from ragfair, clone to prevent altering offer itself var allOffers = ragfairServer.GetOffers(); - var offerWithItemCloned = cloner.Clone( - allOffers.FirstOrDefault(x => x.Id == buyRequestData.ItemId) - ); + var offerWithItemCloned = cloner.Clone(allOffers.FirstOrDefault(x => x.Id == buyRequestData.ItemId)); offerItems = offerWithItemCloned.Items; } else if (buyRequestData.TransactionId == Traders.FENCE) @@ -122,12 +101,8 @@ public class TradeHelper( buyCallback = buyCount => { // Update assort/flea item values - var traderAssorts = traderHelper - .GetTraderAssortsByTraderId(buyRequestData.TransactionId) - .Items; - var itemPurchased = traderAssorts.FirstOrDefault(assort => - assort.Id == buyRequestData.ItemId - ); + var traderAssorts = traderHelper.GetTraderAssortsByTraderId(buyRequestData.TransactionId).Items; + var itemPurchased = traderAssorts.FirstOrDefault(assort => assort.Id == buyRequestData.ItemId); // Decrement trader item count itemPurchased.Upd.StackObjectsCount -= buyCount; @@ -141,14 +116,10 @@ public class TradeHelper( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Tried to buy item {buyRequestData.ItemId} from fence that no longer exists" - ); + logger.Debug($"Tried to buy item {buyRequestData.ItemId} from fence that no longer exists"); } - var message = serverLocalisationService.GetText( - "ragfair-offer_no_longer_exists" - ); + var message = serverLocalisationService.GetText("ragfair-offer_no_longer_exists"); httpResponseUtil.AppendErrorToOutput(output, message); return; @@ -161,12 +132,8 @@ public class TradeHelper( buyCallback = buyCount => { // Update assort/flea item values - var traderAssorts = traderHelper - .GetTraderAssortsByTraderId(buyRequestData.TransactionId) - .Items; - var itemPurchased = traderAssorts.FirstOrDefault(item => - item.Id == buyRequestData.ItemId - ); + var traderAssorts = traderHelper.GetTraderAssortsByTraderId(buyRequestData.TransactionId).Items; + var itemPurchased = traderAssorts.FirstOrDefault(item => item.Id == buyRequestData.ItemId); // Ensure purchase does not exceed trader item limit if (itemPurchased.HasBuyRestrictions()) @@ -197,37 +164,22 @@ public class TradeHelper( { var itemPurchaseDat = new PurchaseDetails { - Items = - [ - new PurchaseItems - { - ItemId = buyRequestData.ItemId, - Count = buyCount, - }, - ], + Items = [new PurchaseItems { ItemId = buyRequestData.ItemId, Count = buyCount }], TraderId = buyRequestData.TransactionId, }; - traderHelper.AddTraderPurchasesToPlayerProfile( - sessionID, - itemPurchaseDat, - itemPurchased - ); + traderHelper.AddTraderPurchasesToPlayerProfile(sessionID, itemPurchaseDat, itemPurchased); } }; // Get all trader assort items - var traderItems = traderAssortHelper - .GetAssort(sessionID, buyRequestData.TransactionId) - .Items; + var traderItems = traderAssortHelper.GetAssort(sessionID, buyRequestData.TransactionId).Items; // Get item + children for purchase var relevantItems = traderItems.GetItemWithChildren(buyRequestData.ItemId); if (relevantItems.Count == 0) { - logger.Error( - $"Purchased trader: {buyRequestData.TransactionId} offer: {buyRequestData.ItemId} has no items" - ); + logger.Error($"Purchased trader: {buyRequestData.TransactionId} offer: {buyRequestData.ItemId} has no items"); } offerItems.AddRange(relevantItems); @@ -281,13 +233,8 @@ public class TradeHelper( paymentService.PayMoney(pmcData, buyRequestData, sessionID, output); if (output.Warnings?.Count > 0) { - var errorMessage = - $"Transaction failed: {output.Warnings.FirstOrDefault().ErrorMessage}"; - httpResponseUtil.AppendErrorToOutput( - output, - errorMessage, - BackendErrorCodes.UnknownTradingError - ); + var errorMessage = $"Transaction failed: {output.Warnings.FirstOrDefault().ErrorMessage}"; + httpResponseUtil.AppendErrorToOutput(output, errorMessage, BackendErrorCodes.UnknownTradingError); } } } @@ -309,11 +256,7 @@ public class TradeHelper( ) { // Check for and increment SoldToTrader condition counters - questHelper.IncrementSoldToTraderCounters( - profileWithItemsToSell, - profileToReceiveMoney, - sellRequest - ); + questHelper.IncrementSoldToTraderCounters(profileWithItemsToSell, profileToReceiveMoney, sellRequest); const string pattern = @"\s+"; @@ -322,13 +265,10 @@ public class TradeHelper( { var itemIdToFind = Regex.Replace(itemToBeRemoved.Id, pattern, ""); // Strip out whitespace // Find item in player inventory, or show error to player if not found - var matchingItemInInventory = profileWithItemsToSell.Inventory.Items.FirstOrDefault(x => - x.Id == itemIdToFind - ); + var matchingItemInInventory = profileWithItemsToSell.Inventory.Items.FirstOrDefault(x => x.Id == itemIdToFind); if (matchingItemInInventory is null) { - var errorMessage = - $"Unable to sell item {itemToBeRemoved.Id}, cannot be found in player inventory"; + var errorMessage = $"Unable to sell item {itemToBeRemoved.Id}, cannot be found in player inventory"; logger.Error(errorMessage); httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -338,36 +278,20 @@ public class TradeHelper( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Selling: id: {matchingItemInInventory.Id} tpl: {matchingItemInInventory.Template}" - ); + logger.Debug($"Selling: id: {matchingItemInInventory.Id} tpl: {matchingItemInInventory.Template}"); } if (sellRequest.TransactionId == Traders.FENCE) { - fenceService.AddItemsToFenceAssort( - profileWithItemsToSell.Inventory.Items, - matchingItemInInventory - ); + fenceService.AddItemsToFenceAssort(profileWithItemsToSell.Inventory.Items, matchingItemInInventory); } // Remove item from inventory + any child items it has - inventoryHelper.RemoveItem( - profileWithItemsToSell, - itemToBeRemoved.Id, - sessionID, - output - ); + inventoryHelper.RemoveItem(profileWithItemsToSell, itemToBeRemoved.Id, sessionID, output); } // Give player money for sold item(s) - paymentService.GiveProfileMoney( - profileToReceiveMoney, - sellRequest.Price, - sellRequest, - output, - sessionID - ); + paymentService.GiveProfileMoney(profileToReceiveMoney, sellRequest.Price, sellRequest, output, sessionID); } /// @@ -388,11 +312,7 @@ public class TradeHelper( double count ) { - var traderPurchaseData = traderPurchasePersisterService.GetProfileTraderPurchase( - sessionId, - traderId, - assortBeingPurchased.Id - ); + var traderPurchaseData = traderPurchasePersisterService.GetProfileTraderPurchase(sessionId, traderId, assortBeingPurchased.Id); var traderItemPurchaseLimit = traderHelper.GetAccountTypeAdjustedTraderPurchaseLimit( (double)assortBeingPurchased.Upd?.BuyRestrictionMax, pmcData.Info.GameVersion diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs index 78ddda6d..d8ddd1b0 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs @@ -39,11 +39,7 @@ public class TraderAssortHelper( /// traders id /// Should assorts player hasn't unlocked be returned - default false /// a traders' assorts - public TraderAssort GetAssort( - MongoId sessionId, - MongoId traderId, - bool showLockedAssorts = false - ) + public TraderAssort GetAssort(MongoId sessionId, MongoId traderId, bool showLockedAssorts = false) { var traderClone = cloner.Clone(databaseService.GetTrader(traderId)); var fullProfile = profileHelper.GetFullProfile(sessionId); @@ -57,11 +53,7 @@ public class TraderAssortHelper( // Strip assorts player should not see yet if (!showLockedAssorts) { - traderClone.Assort = assortHelper.StripLockedLoyaltyAssort( - pmcProfile, - traderId, - traderClone.Assort - ); + traderClone.Assort = assortHelper.StripLockedLoyaltyAssort(pmcProfile, traderId, traderClone.Assort); } ResetBuyRestrictionCurrentValue(traderClone.Assort.Items); @@ -70,10 +62,7 @@ public class TraderAssortHelper( traderClone.Assort.NextResupply = traderClone.Base.NextResupply; // Adjust displayed assort counts based on values stored in profile - var assortPurchasesfromTrader = traderPurchasePersisterService.GetProfileTraderPurchases( - sessionId, - traderId - ); + var assortPurchasesfromTrader = traderPurchasePersisterService.GetProfileTraderPurchases(sessionId, traderId); foreach (var assortId in assortPurchasesfromTrader ?? []) { @@ -103,9 +92,7 @@ public class TraderAssortHelper( continue; } - assortToAdjust.Upd.BuyRestrictionCurrent = (int)( - assortPurchasesfromTrader[assortId.Key].PurchaseCount ?? 0 - ); + assortToAdjust.Upd.BuyRestrictionCurrent = (int)(assortPurchasesfromTrader[assortId.Key].PurchaseCount ?? 0); } traderClone.Assort = assortHelper.StripLockedQuestAssort( diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs index 3f9114b7..dfe8b478 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs @@ -29,11 +29,7 @@ public class TraderHelper( ConfigServer configServer ) { - protected readonly FrozenSet _gameVersionsWithHigherBuyRestrictions = - [ - GameEditions.EDGE_OF_DARKNESS, - GameEditions.UNHEARD, - ]; + protected readonly FrozenSet _gameVersionsWithHigherBuyRestrictions = [GameEditions.EDGE_OF_DARKNESS, GameEditions.UNHEARD]; protected readonly Dictionary _highestTraderPriceItems = new(); protected readonly TraderConfig _traderConfig = configServer.GetConfig(); @@ -49,10 +45,7 @@ public class TraderHelper( return databaseService .GetTraders() .Select(dict => dict.Value.Base) - .FirstOrDefault(t => - t?.Nickname != null - && string.Equals(t.Nickname, traderName, StringComparison.CurrentCultureIgnoreCase) - ); + .FirstOrDefault(t => t?.Nickname != null && string.Equals(t.Nickname, traderName, StringComparison.CurrentCultureIgnoreCase)); } /// @@ -74,19 +67,11 @@ public class TraderHelper( var pmcData = profileHelper.GetPmcProfile(sessionID); if (pmcData == null) { - throw new Exception( - serverLocalisationService.GetText( - "trader-unable_to_find_profile_with_id", - sessionID - ) - ); + throw new Exception(serverLocalisationService.GetText("trader-unable_to_find_profile_with_id", sessionID)); } // Profile has traderInfo dict (profile beyond creation stage) but no requested trader in profile - if ( - pmcData?.TradersInfo != null - && !(pmcData?.TradersInfo?.ContainsKey(traderIdMongo) ?? false) - ) + if (pmcData?.TradersInfo != null && !(pmcData?.TradersInfo?.ContainsKey(traderIdMongo) ?? false)) { // Add trader values to profile ResetTrader(sessionID, traderIdMongo); @@ -96,9 +81,7 @@ public class TraderHelper( var traderBase = databaseService.GetTrader(traderIdMongo).Base; if (traderBase == null) { - logger.Error( - serverLocalisationService.GetText("trader-unable_to_find_trader_by_id", traderID) - ); + logger.Error(serverLocalisationService.GetText("trader-unable_to_find_trader_by_id", traderID)); } return traderBase; @@ -111,9 +94,7 @@ public class TraderHelper( /// TraderAssort public TraderAssort? GetTraderAssortsByTraderId(MongoId traderId) { - return traderId == Traders.FENCE - ? fenceService.GetRawFenceAssorts() - : databaseService.GetTrader(traderId)?.Assort; + return traderId == Traders.FENCE ? fenceService.GetRawFenceAssorts() : databaseService.GetTrader(traderId)?.Assort; } /// @@ -163,17 +144,12 @@ public class TraderHelper( var fullProfile = profileHelper.GetFullProfile(sessionID); if (fullProfile is null) { - throw new Exception( - serverLocalisationService.GetText("trader-unable_to_find_profile_by_id", sessionID) - ); + throw new Exception(serverLocalisationService.GetText("trader-unable_to_find_profile_by_id", sessionID)); } // Get matching profile 'type' e.g. 'standard' var pmcData = fullProfile.CharacterData.PmcData; - var matchingSide = profileHelper.GetProfileTemplateForSide( - fullProfile.ProfileInfo.Edition, - pmcData.Info.Side - ); + var matchingSide = profileHelper.GetProfileTemplateForSide(fullProfile.ProfileInfo.Edition, pmcData.Info.Side); // Profiles trader settings var profileTemplateTraderData = matchingSide.Trader; @@ -181,10 +157,7 @@ public class TraderHelper( var newTraderData = new TraderInfo { Disabled = false, - LoyaltyLevel = profileTemplateTraderData.InitialLoyaltyLevel.GetValueOrDefault( - traderID, - 1 - ), + LoyaltyLevel = profileTemplateTraderData.InitialLoyaltyLevel.GetValueOrDefault(traderID, 1), SalesSum = profileTemplateTraderData.InitialSalesSum, Standing = GetStartingStanding(traderID, profileTemplateTraderData), NextResupply = trader.Base.NextResupply, @@ -200,10 +173,7 @@ public class TraderHelper( pmcData.TradersInfo[traderID].Unlocked = true; } - if ( - profileTemplateTraderData.PurchaseAllClothingByDefaultForTrader?.Contains(traderID) - ?? false - ) + if (profileTemplateTraderData.PurchaseAllClothingByDefaultForTrader?.Contains(traderID) ?? false) { // Get traders clothing var clothing = databaseService.GetTrader(traderID).Suits; @@ -217,12 +187,8 @@ public class TraderHelper( // Template has flea block if ((profileTemplateTraderData.FleaBlockedDays ?? 0) > 0) { - var newBanDateTime = timeUtil.GetTimeStampFromNowDays( - profileTemplateTraderData.FleaBlockedDays ?? 0 - ); - var existingBan = pmcData.Info.Bans?.FirstOrDefault(ban => - ban.BanType == BanType.RagFair - ); + var newBanDateTime = timeUtil.GetTimeStampFromNowDays(profileTemplateTraderData.FleaBlockedDays ?? 0); + var existingBan = pmcData.Info.Bans?.FirstOrDefault(ban => ban.BanType == BanType.RagFair); if (existingBan is not null) { existingBan.DateTime = newBanDateTime; @@ -230,9 +196,7 @@ public class TraderHelper( else { pmcData.Info.Bans ??= []; - pmcData.Info.Bans = pmcData.Info.Bans.Union( - [new Ban { BanType = BanType.RagFair, DateTime = newBanDateTime }] - ); + pmcData.Info.Bans = pmcData.Info.Bans.Union([new Ban { BanType = BanType.RagFair, DateTime = newBanDateTime }]); } } @@ -248,10 +212,7 @@ public class TraderHelper( /// Trader id to get standing for /// Raw profile from profiles.json to look up standing from /// Standing value - protected double? GetStartingStanding( - MongoId traderId, - ProfileTraderTemplate rawProfileTemplate - ) + protected double? GetStartingStanding(MongoId traderId, ProfileTraderTemplate rawProfileTemplate) { if (rawProfileTemplate.InitialStanding.TryGetValue(traderId, out var standing)) { @@ -279,9 +240,7 @@ public class TraderHelper( var profileTraderData = pmcData.TradersInfo[traderId]; if (profileTraderData is null) { - logger.Error( - $"Unable to set trader {traderId} unlocked state to: {status} as trader cannot be found in profile" - ); + logger.Error($"Unable to set trader {traderId} unlocked state to: {status} as trader cannot be found in profile"); return; } @@ -306,8 +265,7 @@ public class TraderHelper( if (traderId == Traders.FENCE) // Must add rep to scav profile to ensure consistency { - fullProfile.CharacterData.ScavData.TradersInfo[traderId].Standing = - pmcTraderInfo.Standing; + fullProfile.CharacterData.ScavData.TradersInfo[traderId].Standing = pmcTraderInfo.Standing; } LevelUp(traderId, fullProfile.CharacterData.PmcData); @@ -352,16 +310,13 @@ public class TraderHelper( var loyaltyLevels = databaseService.GetTrader(traderID).Base.LoyaltyLevels; // Level up player - pmcData.Info.Level = pmcData.CalculateLevel( - databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable - ); + pmcData.Info.Level = pmcData.CalculateLevel(databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable); // Level up traders var targetLevel = 0; // Round standing to 2 decimal places to address floating point inaccuracies - pmcData.TradersInfo[traderID].Standing = - Math.Round(pmcData.TradersInfo[traderID].Standing * 100 ?? 0, 2) / 100; + pmcData.TradersInfo[traderID].Standing = Math.Round(pmcData.TradersInfo[traderID].Standing * 100 ?? 0, 2) / 100; foreach (var loyaltyLevel in loyaltyLevels) { @@ -415,10 +370,7 @@ public class TraderHelper( // create temporary entry to prevent logger spam { TraderId = traderId, - Seconds = new MinMax( - _traderConfig.UpdateTimeDefault, - _traderConfig.UpdateTimeDefault - ), + Seconds = new MinMax(_traderConfig.UpdateTimeDefault, _traderConfig.UpdateTimeDefault), } ); @@ -457,11 +409,7 @@ public class TraderHelper( /// Session id /// New item assort id + count /// Item purchased - public void AddTraderPurchasesToPlayerProfile( - MongoId sessionID, - PurchaseDetails newPurchaseDetails, - Item itemPurchased - ) + public void AddTraderPurchasesToPlayerProfile(MongoId sessionID, PurchaseDetails newPurchaseDetails, Item itemPurchased) { var profile = profileHelper.GetFullProfile(sessionID); var traderId = newPurchaseDetails.TraderId; @@ -493,8 +441,7 @@ public class TraderHelper( } if ( - profile.TraderPurchases[traderId][purchasedItem.ItemId].PurchaseCount - + purchasedItem.Count + profile.TraderPurchases[traderId][purchasedItem.ItemId].PurchaseCount + purchasedItem.Count > GetAccountTypeAdjustedTraderPurchaseLimit( (double)itemPurchased.Upd.BuyRestrictionMax, profile.CharacterData.PmcData.Info.GameVersion @@ -509,8 +456,7 @@ public class TraderHelper( ); } - profile.TraderPurchases[traderId][purchasedItem.ItemId].PurchaseCount += - purchasedItem.Count; + profile.TraderPurchases[traderId][purchasedItem.ItemId].PurchaseCount += purchasedItem.Count; profile.TraderPurchases[traderId][purchasedItem.ItemId].PurchaseTimestamp = currentTime; } } @@ -521,10 +467,7 @@ public class TraderHelper( /// Existing value from trader item /// Profiles game version /// buyRestrictionMax value - public double GetAccountTypeAdjustedTraderPurchaseLimit( - double buyRestrictionMax, - string gameVersion - ) + public double GetAccountTypeAdjustedTraderPurchaseLimit(double buyRestrictionMax, string gameVersion) { if (_gameVersionsWithHigherBuyRestrictions.Contains(gameVersion)) { @@ -560,14 +503,9 @@ public class TraderHelper( // Get loyalty level details player has achieved with this trader // Uses lowest loyalty level as this function is used before a player has logged into server // We have no idea what player loyalty is with traders - var traderBuyBackPricePercent = - 100 - traderBase.LoyaltyLevels.FirstOrDefault().BuyPriceCoefficient; + var traderBuyBackPricePercent = 100 - traderBase.LoyaltyLevels.FirstOrDefault().BuyPriceCoefficient; - var priceTraderBuysItemAt = randomUtil.GetPercentOfValue( - traderBuyBackPricePercent ?? 0, - itemHandbookPrice, - 0 - ); + var priceTraderBuysItemAt = randomUtil.GetPercentOfValue(traderBuyBackPricePercent ?? 0, itemHandbookPrice, 0); // Price from this trader is higher than highest found, update if (priceTraderBuysItemAt > highestPrice) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs index 382bff58..4c75c7f2 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs @@ -8,11 +8,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Helpers; [Injectable] -public class WeatherHelper( - ISptLogger logger, - TimeUtil timeUtil, - ConfigServer configServer -) +public class WeatherHelper(ISptLogger logger, TimeUtil timeUtil, ConfigServer configServer) { protected readonly WeatherConfig _weatherConfig = configServer.GetConfig(); @@ -39,8 +35,7 @@ public class WeatherHelper( var currentTimestampSeconds = timestamp; var tarkovTime = timeUtil.GetDateTimeFromTimeStamp( - (long)(russiaOffsetSeconds + currentTimestampSeconds * _weatherConfig.Acceleration) - % twentyFourHoursSeconds + (long)(russiaOffsetSeconds + currentTimestampSeconds * _weatherConfig.Acceleration) % twentyFourHoursSeconds ); return tarkovTime; diff --git a/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs index 9353d507..02e701d1 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs @@ -56,9 +56,7 @@ public class WeightedRandomHelper( if (weights.Count == 0) { - logger.Error( - localisationService.GetText("weightedrandomhelper-supplied_weights_empty") - ); + logger.Error(localisationService.GetText("weightedrandomhelper-supplied_weights_empty")); } if (items.Count != weights.Count) diff --git a/Libraries/SPTarkov.Server.Core/Loaders/BundleLoader.cs b/Libraries/SPTarkov.Server.Core/Loaders/BundleLoader.cs index 05249654..129abf9e 100644 --- a/Libraries/SPTarkov.Server.Core/Loaders/BundleLoader.cs +++ b/Libraries/SPTarkov.Server.Core/Loaders/BundleLoader.cs @@ -33,11 +33,7 @@ public class BundleInfo(string modPath, BundleManifestEntry bundle, uint bundleH } [Injectable(InjectionType.Singleton)] -public class BundleLoader( - ISptLogger logger, - JsonUtil jsonUtil, - BundleHashCacheService bundleHashCacheService -) +public class BundleLoader(ISptLogger logger, JsonUtil jsonUtil, BundleHashCacheService bundleHashCacheService) { private readonly Dictionary _bundles = []; @@ -55,14 +51,11 @@ public class BundleLoader( { var relativeModPath = modPath.Replace('\\', '/'); - var bundleLocalPath = Path.Join(relativeModPath, "bundles", bundleManifest.Key) - .Replace('\\', '/'); + var bundleLocalPath = Path.Join(relativeModPath, "bundles", bundleManifest.Key).Replace('\\', '/'); if (!File.Exists(bundleLocalPath)) { - logger.Warning( - $"Could not find bundle {bundleManifest.Key} for mod {mod.ModMetadata.Name}" - ); + logger.Warning($"Could not find bundle {bundleManifest.Key} for mod {mod.ModMetadata.Name}"); continue; } @@ -73,10 +66,7 @@ public class BundleLoader( var bundleHash = bundleHashCacheService.GetStoredValue(bundleLocalPath); - AddBundle( - bundleManifest.Key, - new BundleInfo(relativeModPath, bundleManifest, bundleHash) - ); + AddBundle(bundleManifest.Key, new BundleInfo(relativeModPath, bundleManifest, bundleHash)); } } diff --git a/Libraries/SPTarkov.Server.Core/Loaders/OnWebAppBuildModLoader.cs b/Libraries/SPTarkov.Server.Core/Loaders/OnWebAppBuildModLoader.cs index 9395761a..ca45ced0 100644 --- a/Libraries/SPTarkov.Server.Core/Loaders/OnWebAppBuildModLoader.cs +++ b/Libraries/SPTarkov.Server.Core/Loaders/OnWebAppBuildModLoader.cs @@ -6,10 +6,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Loaders; [Injectable(InjectionType.Singleton)] -public class OnWebAppBuildModLoader( - ISptLogger _logger, - IEnumerable _onWebAppBuildMods -) +public class OnWebAppBuildModLoader(ISptLogger _logger, IEnumerable _onWebAppBuildMods) { public async Task OnLoad() { diff --git a/Libraries/SPTarkov.Server.Core/Loaders/PostDBModLoader.cs b/Libraries/SPTarkov.Server.Core/Loaders/PostDBModLoader.cs index 6168f8b4..5ec9b18d 100644 --- a/Libraries/SPTarkov.Server.Core/Loaders/PostDBModLoader.cs +++ b/Libraries/SPTarkov.Server.Core/Loaders/PostDBModLoader.cs @@ -6,14 +6,9 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Loaders; -[Obsolete( - "This mod loader is obsolete and will be removed in 4.1.0. See documentation in IPostDBLoadModAsync for more information." -)] +[Obsolete("This mod loader is obsolete and will be removed in 4.1.0. See documentation in IPostDBLoadModAsync for more information.")] [Injectable(TypePriority = OnLoadOrder.PostDBModLoader)] -public class PostDBModLoader( - ISptLogger _logger, - IEnumerable _postDbLoadMods -) : IOnLoad +public class PostDBModLoader(ISptLogger _logger, IEnumerable _postDbLoadMods) : IOnLoad { public async Task OnLoad() { diff --git a/Libraries/SPTarkov.Server.Core/Loaders/PostSptModLoader.cs b/Libraries/SPTarkov.Server.Core/Loaders/PostSptModLoader.cs index 2370daef..c3377251 100644 --- a/Libraries/SPTarkov.Server.Core/Loaders/PostSptModLoader.cs +++ b/Libraries/SPTarkov.Server.Core/Loaders/PostSptModLoader.cs @@ -6,14 +6,9 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Loaders; -[Obsolete( - "This mod loader is obsolete and will be removed in 4.1.0. See documentation in IPostSptLoadModAsync for more information." -)] +[Obsolete("This mod loader is obsolete and will be removed in 4.1.0. See documentation in IPostSptLoadModAsync for more information.")] [Injectable(TypePriority = OnLoadOrder.PostSptModLoader)] -public class PostSptModLoader( - ISptLogger _logger, - IEnumerable _postSptLoadMods -) : IOnLoad +public class PostSptModLoader(ISptLogger _logger, IEnumerable _postSptLoadMods) : IOnLoad { public async Task OnLoad() { diff --git a/Libraries/SPTarkov.Server.Core/Loaders/PreSptModLoad.cs b/Libraries/SPTarkov.Server.Core/Loaders/PreSptModLoad.cs index 59da33f2..20edf801 100644 --- a/Libraries/SPTarkov.Server.Core/Loaders/PreSptModLoad.cs +++ b/Libraries/SPTarkov.Server.Core/Loaders/PreSptModLoad.cs @@ -7,10 +7,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Loaders; [Injectable(InjectionType.Singleton, TypePriority = OnLoadOrder.PreSptModLoader)] -public class PreSptModLoader( - ISptLogger _logger, - IEnumerable _preSptLoadMods -) : IOnLoad +public class PreSptModLoader(ISptLogger _logger, IEnumerable _preSptLoadMods) : IOnLoad { public async Task OnLoad() { diff --git a/Libraries/SPTarkov.Server.Core/Migration/AbstractProfileMigration.cs b/Libraries/SPTarkov.Server.Core/Migration/AbstractProfileMigration.cs index e548a6f6..ec072ce5 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/AbstractProfileMigration.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/AbstractProfileMigration.cs @@ -11,10 +11,7 @@ namespace SPTarkov.Server.Core.Migration public abstract IEnumerable PrerequisiteMigrations { get; } - public abstract bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ); + public abstract bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations); public virtual JsonObject? Migrate(JsonObject profile) { @@ -37,9 +34,7 @@ namespace SPTarkov.Server.Core.Migration var versionNumber = versionString.Split(' ')[0]; - return SemanticVersioning.Version.TryParse(versionNumber, out var version) - ? version - : null; + return SemanticVersioning.Version.TryParse(versionNumber, out var version) ? version : null; } } } diff --git a/Libraries/SPTarkov.Server.Core/Migration/IProfileMigration.cs b/Libraries/SPTarkov.Server.Core/Migration/IProfileMigration.cs index 730975bd..348045c8 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/IProfileMigration.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/IProfileMigration.cs @@ -11,10 +11,7 @@ namespace SPTarkov.Server.Core.Migration /// The profile to check /// /// Returns true if the profile can migrate, returns false if not - public bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ); + public bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations); /// /// Migrate the profile, this should be used to handle and fix old data that has been removed from the record diff --git a/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/HideoutSeed.cs b/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/HideoutSeed.cs index 0678b647..90a46d5f 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/HideoutSeed.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/HideoutSeed.cs @@ -31,10 +31,7 @@ namespace SPTarkov.Server.Core.Migration.Migrations get { return []; } } - public override bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ) + public override bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations) { var profileVersion = GetProfileVersion(profile); var fromRange = Range.Parse(FromVersion); @@ -43,17 +40,14 @@ namespace SPTarkov.Server.Core.Migration.Migrations var seedNode = profile["characters"]?["pmc"]?["Hideout"]?["Seed"]; // Check if the seed still has it's numeric value, this is not valid anymore - var seedIsNumeric = - seedNode is JsonValue seedValue && seedValue.TryGetValue(out _); + var seedIsNumeric = seedNode is JsonValue seedValue && seedValue.TryGetValue(out _); return profileVersionMatches && seedIsNumeric; } public override JsonObject? Migrate(JsonObject profile) { - profile["characters"]!["pmc"]!["Hideout"]!["Seed"] = Convert.ToHexStringLower( - RandomNumberGenerator.GetBytes(16) - ); + profile["characters"]!["pmc"]!["Hideout"]!["Seed"] = Convert.ToHexStringLower(RandomNumberGenerator.GetBytes(16)); return base.Migrate(profile); } diff --git a/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenMinorFixes.cs b/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenMinorFixes.cs index 432dddc8..8176024e 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenMinorFixes.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenMinorFixes.cs @@ -36,10 +36,7 @@ namespace SPTarkov.Server.Core.Migration.Migrations get { return [typeof(HideoutSeed)]; } } - public override bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ) + public override bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations) { var cultistRewardsMissing = profile["spt"]?["cultistRewards"] == null; var friendProfileIdsMissing = profile["friends"] == null; diff --git a/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenToThreeEleven.cs b/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenToThreeEleven.cs index eafb8e55..b2d6f86e 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenToThreeEleven.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/Migrations/3.11/ThreeTenToThreeEleven.cs @@ -39,10 +39,7 @@ namespace SPTarkov.Server.Core.Migration.Migrations get { return [typeof(HideoutSeed)]; } } - public override bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ) + public override bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations) { var profileVersion = GetProfileVersion(profile); @@ -57,10 +54,7 @@ namespace SPTarkov.Server.Core.Migration.Migrations { if (profile["suits"] is JsonArray suitsArray) { - _oldSuiteData = suitsArray - .Select(node => node?.GetValue()) - .Where(suit => suit != null) - .ToList()!; + _oldSuiteData = suitsArray.Select(node => node?.GetValue()).Where(suit => suit != null).ToList()!; } profile.Remove("suits"); @@ -80,22 +74,17 @@ namespace SPTarkov.Server.Core.Migration.Migrations if (profile.CharacterData.PmcData.Inventory.HideoutCustomizationStashId is null) { - profile.CharacterData.PmcData.Inventory.HideoutCustomizationStashId = new( - "676db384777490e23c45b657" - ); + profile.CharacterData.PmcData.Inventory.HideoutCustomizationStashId = new("676db384777490e23c45b657"); //Directly injecting CreateProfileService causes a circular dependency which I can't be bothered to fix just for this - ( - serviceProvider.GetService(typeof(CreateProfileService)) as CreateProfileService - )!.AddMissingInternalContainersToProfile(profile.CharacterData.PmcData); + (serviceProvider.GetService(typeof(CreateProfileService)) as CreateProfileService)!.AddMissingInternalContainersToProfile( + profile.CharacterData.PmcData + ); } if (profile.CharacterData.PmcData.Hideout.Customization is null) { - profile.CharacterData.PmcData.Hideout.Customization = new Dictionary< - string, - Models.Common.MongoId - > + profile.CharacterData.PmcData.Hideout.Customization = new Dictionary { { "Wall", new("675844bdf94a97cbbe096f1a") }, { "Floor", new("6758443ff94a97cbbe096f18") }, @@ -130,14 +119,10 @@ namespace SPTarkov.Server.Core.Migration.Migrations } // Only hand out the new hideout customization rewards. - var filteredRewards = rewards - .Where(r => r.Type == RewardType.CustomizationDirect) - .ToList(); + var filteredRewards = rewards.Where(r => r.Type == RewardType.CustomizationDirect).ToList(); //Directly injecting RewardHelper causes a circular dependency which I can't be bothered to fix just for this - ( - serviceProvider.GetService(typeof(RewardHelper)) as RewardHelper - )!.ApplyRewards( + (serviceProvider.GetService(typeof(RewardHelper)) as RewardHelper)!.ApplyRewards( filteredRewards, CustomisationSource.ACHIEVEMENT, profile, @@ -160,16 +145,12 @@ namespace SPTarkov.Server.Core.Migration.Migrations if (profile.CharacterData.PmcData.Info.GameVersion == "edge_of_darkness") { - profile.CharacterData.PmcData.Customization.DogTag = new( - "6746fd09bafff85008048838" - ); + profile.CharacterData.PmcData.Customization.DogTag = new("6746fd09bafff85008048838"); } if (profile.CharacterData.PmcData.Info.GameVersion == "unheard_edition") { - profile.CharacterData.PmcData.Customization.DogTag = new( - "67471928d17d6431550563b5" - ); + profile.CharacterData.PmcData.Customization.DogTag = new("67471928d17d6431550563b5"); } foreach (var oldSuite in _oldSuiteData) @@ -211,16 +192,12 @@ namespace SPTarkov.Server.Core.Migration.Migrations if (profile.CharacterData.PmcData.Info.GameVersion == "edge_of_darkness") { - profile.CharacterData.PmcData.Customization.DogTag = new( - "67471938bafff850080488b7" - ); + profile.CharacterData.PmcData.Customization.DogTag = new("67471938bafff850080488b7"); } if (profile.CharacterData.PmcData.Info.GameVersion == "unheard_edition") { - profile.CharacterData.PmcData.Customization.DogTag = new( - "6747193f170146228c0d2226" - ); + profile.CharacterData.PmcData.Customization.DogTag = new("6747193f170146228c0d2226"); } foreach (var oldSuite in _oldSuiteData) diff --git a/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/TheVoices.cs b/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/TheVoices.cs index 0bd694bf..588fac1a 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/TheVoices.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/TheVoices.cs @@ -34,15 +34,11 @@ namespace SPTarkov.Server.Core.Migration.Migrations get { return [typeof(ThreeTenToThreeEleven)]; } } - public override bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ) + public override bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations) { _pmcVoiceIsMissing = profile["characters"]?["pmc"]?["Customization"]?["Voice"] == null; - _scavVoiceIsMissing = - profile["characters"]?["scav"]?["Customization"]?["Voice"] == null; + _scavVoiceIsMissing = profile["characters"]?["scav"]?["Customization"]?["Voice"] == null; return _pmcVoiceIsMissing || _scavVoiceIsMissing; } @@ -69,13 +65,9 @@ namespace SPTarkov.Server.Core.Migration.Migrations var oldVoice = pmcInfo["Voice"]?.ToString() ?? ""; pmcInfo.Remove("Voice"); - var voiceMongoId = databaseService - .GetCustomization() - .FirstOrDefault(x => x.Value.Properties.Name == oldVoice) - .Key; + var voiceMongoId = databaseService.GetCustomization().FirstOrDefault(x => x.Value.Properties.Name == oldVoice).Key; - profileObject["characters"]!["pmc"]!["Customization"]!["Voice"] = - voiceMongoId.ToString(); + profileObject["characters"]!["pmc"]!["Customization"]!["Voice"] = voiceMongoId.ToString(); } private void HandleScavVoice(JsonObject profileObject) @@ -85,13 +77,9 @@ namespace SPTarkov.Server.Core.Migration.Migrations var oldVoice = pmcInfo["Voice"]?.ToString() ?? ""; pmcInfo.Remove("Voice"); - var voiceMongoId = databaseService - .GetCustomization() - .FirstOrDefault(x => x.Value.Properties.Name == oldVoice) - .Key; + var voiceMongoId = databaseService.GetCustomization().FirstOrDefault(x => x.Value.Properties.Name == oldVoice).Key; - profileObject["characters"]!["scav"]!["Customization"]!["Voice"] = - voiceMongoId.ToString(); + profileObject["characters"]!["scav"]!["Customization"]!["Voice"] = voiceMongoId.ToString(); } } } diff --git a/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/ThreeElevenToFourZero.cs b/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/ThreeElevenToFourZero.cs index 9e7deb27..b5dc5e9f 100644 --- a/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/ThreeElevenToFourZero.cs +++ b/Libraries/SPTarkov.Server.Core/Migration/Migrations/4.0/ThreeElevenToFourZero.cs @@ -29,10 +29,7 @@ namespace SPTarkov.Server.Core.Migration.Migrations get { return [typeof(ThreeTenToThreeEleven)]; } } - public override bool CanMigrate( - JsonObject profile, - IEnumerable previouslyRanMigrations - ) + public override bool CanMigrate(JsonObject profile, IEnumerable previouslyRanMigrations) { var profileVersion = GetProfileVersion(profile); @@ -40,9 +37,7 @@ namespace SPTarkov.Server.Core.Migration.Migrations var versionMatches = fromRange.IsSatisfied(profileVersion) - || PrerequisiteMigrations.All(prereq => - previouslyRanMigrations.Any(r => r.GetType() == prereq) - ); + || PrerequisiteMigrations.All(prereq => previouslyRanMigrations.Any(r => r.GetType() == prereq)); return versionMatches; } diff --git a/Libraries/SPTarkov.Server.Core/Models/Common/MongoId.cs b/Libraries/SPTarkov.Server.Core/Models/Common/MongoId.cs index ca767097..393476d3 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Common/MongoId.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Common/MongoId.cs @@ -24,9 +24,7 @@ public readonly struct MongoId : IEquatable, IComparable if (!IsValidMongoId(id)) { - Console.WriteLine( - $"Critical MongoId error: Incorrect format. Must be a hexadecimal [a-f0-9] of 24 characters. id: {id}" - ); + Console.WriteLine($"Critical MongoId error: Incorrect format. Must be a hexadecimal [a-f0-9] of 24 characters. id: {id}"); } _stringId = string.Intern(id); diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs index f750762b..5a24e2dc 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/GlobalTablesUsings.cs @@ -1,11 +1,5 @@ -global using GlobalAmmo = System.Collections.Generic.Dictionary< - string, - System.Collections.Generic.Dictionary ->; +global using GlobalAmmo = System.Collections.Generic.Dictionary>; global using GlobalMods = System.Collections.Generic.Dictionary< SPTarkov.Server.Core.Models.Common.MongoId, - System.Collections.Generic.Dictionary< - string, - System.Collections.Generic.HashSet - > + System.Collections.Generic.Dictionary> >; diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs index c28d33b1..aa3f86a9 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs @@ -48,10 +48,7 @@ public record SptProfile /// Assort purchases made by player since last trader refresh /// [JsonPropertyName("traderPurchases")] - public Dictionary< - MongoId, - Dictionary? - >? TraderPurchases { get; set; } + public Dictionary?>? TraderPurchases { get; set; } /// /// List of friend profile IDs diff --git a/Libraries/SPTarkov.Server.Core/Models/Enums/HideoutEventActions.cs b/Libraries/SPTarkov.Server.Core/Models/Enums/HideoutEventActions.cs index 025d5256..db4d8a8b 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Enums/HideoutEventActions.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Enums/HideoutEventActions.cs @@ -19,10 +19,8 @@ public record HideoutEventActions public const string HIDEOUT_RECORD_SHOOTING_RANGE_POINTS = "RecordShootingRangePoints"; public const string HIDEOUT_IMPROVE_AREA = "HideoutImproveArea"; public const string HIDEOUT_CANCEL_PRODUCTION_COMMAND = "HideoutCancelProductionCommand"; - public const string HIDEOUT_CIRCLE_OF_CULTIST_PRODUCTION_START = - "HideoutCircleOfCultistProductionStart"; + public const string HIDEOUT_CIRCLE_OF_CULTIST_PRODUCTION_START = "HideoutCircleOfCultistProductionStart"; public const string HIDEOUT_DELETE_PRODUCTION_COMMAND = "HideoutDeleteProductionCommand"; public const string HIDEOUT_CUSTOMIZATION_APPLY_COMMAND = "HideoutCustomizationApply"; - public const string HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE = - "HideoutCustomizationSetMannequinPose"; + public const string HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE = "HideoutCustomizationSetMannequinPose"; } diff --git a/Libraries/SPTarkov.Server.Core/Models/Enums/ItemTpl.cs b/Libraries/SPTarkov.Server.Core/Models/Enums/ItemTpl.cs index 77b34df6..175c0295 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Enums/ItemTpl.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Enums/ItemTpl.cs @@ -55,27 +55,13 @@ public static class ItemTpl public static readonly MongoId AMMO_26X75_FLARE = new MongoId("62389bc9423ed1685422dc57"); public static readonly MongoId AMMO_26X75_GREEN = new MongoId("62389aaba63f32501b1b444f"); public static readonly MongoId AMMO_26X75_RED = new MongoId("62389ba9a63f32501b1b4451"); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_BLUE = new MongoId( - "66d97834d2985e11480d5c1e" - ); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_GREEN = new MongoId( - "624c0570c9b794431568f5d5" - ); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_NEW_YEAR = new MongoId( - "675ea4891b2579e8fe0250aa" - ); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_RED = new MongoId( - "624c09cfbc2e27219346d955" - ); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_SPECIAL_YELLOW = new MongoId( - "66d9f3047b82b9a9aa055d81" - ); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_WHITE = new MongoId( - "624c09da2cec124eb67c1046" - ); - public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_YELLOW = new MongoId( - "624c09e49b98e019a3315b66" - ); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_BLUE = new MongoId("66d97834d2985e11480d5c1e"); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_GREEN = new MongoId("624c0570c9b794431568f5d5"); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_NEW_YEAR = new MongoId("675ea4891b2579e8fe0250aa"); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_RED = new MongoId("624c09cfbc2e27219346d955"); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_SPECIAL_YELLOW = new MongoId("66d9f3047b82b9a9aa055d81"); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_WHITE = new MongoId("624c09da2cec124eb67c1046"); + public static readonly MongoId AMMO_26X75_SIGNAL_FLARE_YELLOW = new MongoId("624c09e49b98e019a3315b66"); public static readonly MongoId AMMO_26X75_YELLOW = new MongoId("62389be94d5d474bf712e709"); public static readonly MongoId AMMO_30X29_VOG30 = new MongoId("5d70e500a4b9364de70d38ce"); public static readonly MongoId AMMO_366TKM_APM = new MongoId("5f0596629e22f464da6bbdd9"); @@ -163,9 +149,7 @@ public static class ItemTpl public static readonly MongoId AMMO_762X51_M80A1 = new MongoId("6768c25aa7b238f14a08d3f6"); public static readonly MongoId AMMO_762X51_M993 = new MongoId("5efb0c1bd79ff02a1f5e68d9"); public static readonly MongoId AMMO_762X51_TCW_SP = new MongoId("5e023e6e34d52a55c3304f71"); - public static readonly MongoId AMMO_762X51_ULTRA_NOSLER = new MongoId( - "5e023e88277cce2b522ff2b1" - ); + public static readonly MongoId AMMO_762X51_ULTRA_NOSLER = new MongoId("5e023e88277cce2b522ff2b1"); public static readonly MongoId AMMO_762X54R_BS = new MongoId("5e023d48186a883be655e551"); public static readonly MongoId AMMO_762X54R_BT = new MongoId("5e023d34e8a400319a28ed44"); public static readonly MongoId AMMO_762X54R_FMJ = new MongoId("64b8f7968532cf95ee0a0dbf"); @@ -219,567 +203,215 @@ public static class ItemTpl public static readonly MongoId AMMO_9X39_SP5 = new MongoId("57a0dfb82459774d3078b56c"); public static readonly MongoId AMMO_9X39_SP6 = new MongoId("57a0e5022459774d1673f889"); public static readonly MongoId AMMO_9X39_SPP = new MongoId("5c0d668f86f7747ccb7f13b2"); - public static readonly MongoId AMMOBOX_127X33_COPPER_20RND = new MongoId( - "676009ddb623f3b8ba079419" - ); - public static readonly MongoId AMMOBOX_127X33_FMJ_20RND = new MongoId( - "676009ed8f1fee08740f9479" - ); - public static readonly MongoId AMMOBOX_127X33_JHP_20RND = new MongoId( - "676009fe8f1fee08740f947c" - ); - public static readonly MongoId AMMOBOX_127X33_JSP_20RND = new MongoId( - "67600a0e84e242067d0dc4cd" - ); - public static readonly MongoId AMMOBOX_127X55_PS12_10RND = new MongoId( - "6570241bcfc010a0f50069f5" - ); - public static readonly MongoId AMMOBOX_127X55_PS12A_10RND = new MongoId( - "65702420bfc87b3a34093219" - ); - public static readonly MongoId AMMOBOX_127X55_PS12B_10RND = new MongoId( - "648983d6b5a2df1c815a04ec" - ); - public static readonly MongoId AMMOBOX_12G_50_BMG_25RND = new MongoId( - "65702469c5d7d4cb4d07855b" - ); - public static readonly MongoId AMMOBOX_12G_525MM_25RND = new MongoId( - "65702426cfc010a0f50069f8" - ); + public static readonly MongoId AMMOBOX_127X33_COPPER_20RND = new MongoId("676009ddb623f3b8ba079419"); + public static readonly MongoId AMMOBOX_127X33_FMJ_20RND = new MongoId("676009ed8f1fee08740f9479"); + public static readonly MongoId AMMOBOX_127X33_JHP_20RND = new MongoId("676009fe8f1fee08740f947c"); + public static readonly MongoId AMMOBOX_127X33_JSP_20RND = new MongoId("67600a0e84e242067d0dc4cd"); + public static readonly MongoId AMMOBOX_127X55_PS12_10RND = new MongoId("6570241bcfc010a0f50069f5"); + public static readonly MongoId AMMOBOX_127X55_PS12A_10RND = new MongoId("65702420bfc87b3a34093219"); + public static readonly MongoId AMMOBOX_127X55_PS12B_10RND = new MongoId("648983d6b5a2df1c815a04ec"); + public static readonly MongoId AMMOBOX_12G_50_BMG_25RND = new MongoId("65702469c5d7d4cb4d07855b"); + public static readonly MongoId AMMOBOX_12G_525MM_25RND = new MongoId("65702426cfc010a0f50069f8"); public static readonly MongoId AMMOBOX_12G_7MM_25RND = new MongoId("657024361419851aef03e6fa"); public static readonly MongoId AMMOBOX_12G_AP20_25RND = new MongoId("64898838d5b4df6140000a20"); public static readonly MongoId AMMOBOX_12G_CSP_25RND = new MongoId("65702479c5d7d4cb4d07855e"); - public static readonly MongoId AMMOBOX_12G_DUALSABOT_25RND = new MongoId( - "6570243fcfc010a0f50069fb" - ); - public static readonly MongoId AMMOBOX_12G_EXPRESS_25RND = new MongoId( - "65702432bfc87b3a3409321c" - ); - public static readonly MongoId AMMOBOX_12G_FLECHETTE_25RND = new MongoId( - "65702474bfc87b3a34093226" - ); + public static readonly MongoId AMMOBOX_12G_DUALSABOT_25RND = new MongoId("6570243fcfc010a0f50069fb"); + public static readonly MongoId AMMOBOX_12G_EXPRESS_25RND = new MongoId("65702432bfc87b3a3409321c"); + public static readonly MongoId AMMOBOX_12G_FLECHETTE_25RND = new MongoId("65702474bfc87b3a34093226"); public static readonly MongoId AMMOBOX_12G_FTX_25RND = new MongoId("65702449bfc87b3a34093223"); - public static readonly MongoId AMMOBOX_12G_GRIZZLY_40_25RND = new MongoId( - "6570244ec5d7d4cb4d078558" - ); - public static readonly MongoId AMMOBOX_12G_MAGNUM_25RND = new MongoId( - "6570243bbfc87b3a3409321f" - ); - public static readonly MongoId AMMOBOX_12G_PIRANHA_25RND = new MongoId( - "657024431419851aef03e6fd" - ); - public static readonly MongoId AMMOBOX_12G_POLEVA3_25RND = new MongoId( - "65702452cfc010a0f50069fe" - ); - public static readonly MongoId AMMOBOX_12G_POLEVA6U_25RND = new MongoId( - "657024581419851aef03e700" - ); + public static readonly MongoId AMMOBOX_12G_GRIZZLY_40_25RND = new MongoId("6570244ec5d7d4cb4d078558"); + public static readonly MongoId AMMOBOX_12G_MAGNUM_25RND = new MongoId("6570243bbfc87b3a3409321f"); + public static readonly MongoId AMMOBOX_12G_PIRANHA_25RND = new MongoId("657024431419851aef03e6fd"); + public static readonly MongoId AMMOBOX_12G_POLEVA3_25RND = new MongoId("65702452cfc010a0f50069fe"); + public static readonly MongoId AMMOBOX_12G_POLEVA6U_25RND = new MongoId("657024581419851aef03e700"); public static readonly MongoId AMMOBOX_12G_RIP_5RND = new MongoId("5c1127d0d174af29be75cf68"); - public static readonly MongoId AMMOBOX_12G_SFORMANCE_25RND = new MongoId( - "6570247ebfc87b3a34093229" - ); + public static readonly MongoId AMMOBOX_12G_SFORMANCE_25RND = new MongoId("6570247ebfc87b3a34093229"); public static readonly MongoId AMMOBOX_12G_SLUG_25RND = new MongoId("6570246fcfc010a0f5006a01"); public static readonly MongoId AMMOBOX_20G_56MM_25RND = new MongoId("657024831419851aef03e703"); public static readonly MongoId AMMOBOX_20G_62MM_25RND = new MongoId("6570248dcfc010a0f5006a04"); public static readonly MongoId AMMOBOX_20G_73MM_25RND = new MongoId("657024921419851aef03e706"); public static readonly MongoId AMMOBOX_20G_75MM_25RND = new MongoId("65702495c5d7d4cb4d078561"); - public static readonly MongoId AMMOBOX_20G_DEVASTATOR_25RND = new MongoId( - "6570249bcfc010a0f5006a07" - ); + public static readonly MongoId AMMOBOX_20G_DEVASTATOR_25RND = new MongoId("6570249bcfc010a0f5006a07"); public static readonly MongoId AMMOBOX_20G_DGS_25RND = new MongoId("67657773b83469e4f102dc27"); - public static readonly MongoId AMMOBOX_20G_FLECHETTE_25RND = new MongoId( - "676577166d874f6502106a21" - ); - public static readonly MongoId AMMOBOX_20G_POLEVA3_25RND = new MongoId( - "657024a4bfc87b3a3409322c" - ); - public static readonly MongoId AMMOBOX_20G_POLEVA6U_25RND = new MongoId( - "657024a91419851aef03e70c" - ); + public static readonly MongoId AMMOBOX_20G_FLECHETTE_25RND = new MongoId("676577166d874f6502106a21"); + public static readonly MongoId AMMOBOX_20G_POLEVA3_25RND = new MongoId("657024a4bfc87b3a3409322c"); + public static readonly MongoId AMMOBOX_20G_POLEVA6U_25RND = new MongoId("657024a91419851aef03e70c"); public static readonly MongoId AMMOBOX_20G_STAR_25RND = new MongoId("6570249f1419851aef03e709"); - public static readonly MongoId AMMOBOX_20G_TSS_AP_25RND = new MongoId( - "67657764c832f8c59c016d45" - ); - public static readonly MongoId AMMOBOX_23X75_BARRIKADA_5RND = new MongoId( - "657024b8bfc87b3a34093232" - ); - public static readonly MongoId AMMOBOX_23X75_SHRAP10_5RND = new MongoId( - "657024aebfc87b3a3409322f" - ); - public static readonly MongoId AMMOBOX_23X75_SHRAP25_5RND = new MongoId( - "657024b31419851aef03e70f" - ); - public static readonly MongoId AMMOBOX_23X75_ZVEZDA_5RND = new MongoId( - "657024bdc5d7d4cb4d078564" - ); - public static readonly MongoId AMMOBOX_366TKM_APM_20RND = new MongoId( - "657023f81419851aef03e6f1" - ); - public static readonly MongoId AMMOBOX_366TKM_EKO_20RND = new MongoId( - "657024011419851aef03e6f4" - ); - public static readonly MongoId AMMOBOX_366TKM_FMJ_20RND = new MongoId( - "657023f1bfc87b3a34093210" - ); - public static readonly MongoId AMMOBOX_366TKM_GEKSA_20RND = new MongoId( - "657023fcbfc87b3a34093213" - ); + public static readonly MongoId AMMOBOX_20G_TSS_AP_25RND = new MongoId("67657764c832f8c59c016d45"); + public static readonly MongoId AMMOBOX_23X75_BARRIKADA_5RND = new MongoId("657024b8bfc87b3a34093232"); + public static readonly MongoId AMMOBOX_23X75_SHRAP10_5RND = new MongoId("657024aebfc87b3a3409322f"); + public static readonly MongoId AMMOBOX_23X75_SHRAP25_5RND = new MongoId("657024b31419851aef03e70f"); + public static readonly MongoId AMMOBOX_23X75_ZVEZDA_5RND = new MongoId("657024bdc5d7d4cb4d078564"); + public static readonly MongoId AMMOBOX_366TKM_APM_20RND = new MongoId("657023f81419851aef03e6f1"); + public static readonly MongoId AMMOBOX_366TKM_EKO_20RND = new MongoId("657024011419851aef03e6f4"); + public static readonly MongoId AMMOBOX_366TKM_FMJ_20RND = new MongoId("657023f1bfc87b3a34093210"); + public static readonly MongoId AMMOBOX_366TKM_GEKSA_20RND = new MongoId("657023fcbfc87b3a34093213"); public static readonly MongoId AMMOBOX_45ACP_AP_50RND = new MongoId("6489879db5a2df1c815a04ef"); - public static readonly MongoId AMMOBOX_45ACP_FMJ_50RND = new MongoId( - "6570240ecfc010a0f50069f2" - ); - public static readonly MongoId AMMOBOX_45ACP_HYDRASHOK_50RND = new MongoId( - "65702406bfc87b3a34093216" - ); - public static readonly MongoId AMMOBOX_45ACP_LASERMATCH_50RND = new MongoId( - "6570240a1419851aef03e6f7" - ); - public static readonly MongoId AMMOBOX_45ACP_RIP_50RND = new MongoId( - "65702414c5d7d4cb4d078555" - ); - public static readonly MongoId AMMOBOX_46X30_ACTION_SX_40RND = new MongoId( - "657024c81419851aef03e712" - ); - public static readonly MongoId AMMOBOX_46X30_AP_SX_40RND = new MongoId( - "6489870774a806211e4fb685" - ); - public static readonly MongoId AMMOBOX_46X30_FMJ_SX_40RND = new MongoId( - "657024cecfc010a0f5006a0a" - ); - public static readonly MongoId AMMOBOX_46X30_JSP_SX_40RND = new MongoId( - "64aceaecc4eda9354b0226b6" - ); - public static readonly MongoId AMMOBOX_46X30_SUBSONIC_SX_40RND = new MongoId( - "657024d2bfc87b3a34093235" - ); - public static readonly MongoId AMMOBOX_545X39_7N40_120RND = new MongoId( - "6570900858b315e8b70a8a98" - ); - public static readonly MongoId AMMOBOX_545X39_7N40_30RND = new MongoId( - "64898602f09d032aa9399d56" - ); - public static readonly MongoId AMMOBOX_545X39_BP_120RND = new MongoId( - "5737292724597765e5728562" - ); - public static readonly MongoId AMMOBOX_545X39_BP_120RND_DAMAGED = new MongoId( - "57372a7f24597766fe0de0c1" - ); - public static readonly MongoId AMMOBOX_545X39_BP_30RND = new MongoId( - "57372ac324597767001bc261" - ); - public static readonly MongoId AMMOBOX_545X39_BS_120RND = new MongoId( - "57372b832459776701014e41" - ); - public static readonly MongoId AMMOBOX_545X39_BS_120RND_DAMAGED = new MongoId( - "57372bad245977670b7cd242" - ); - public static readonly MongoId AMMOBOX_545X39_BS_30RND = new MongoId( - "57372bd3245977670b7cd243" - ); - public static readonly MongoId AMMOBOX_545X39_BT_120RND = new MongoId( - "57372c21245977670937c6c2" - ); - public static readonly MongoId AMMOBOX_545X39_BT_120RND_DAMAGED = new MongoId( - "57372c56245977685e584582" - ); - public static readonly MongoId AMMOBOX_545X39_BT_30RND = new MongoId( - "57372c89245977685d4159b1" - ); - public static readonly MongoId AMMOBOX_545X39_FMJ_30RND = new MongoId( - "5737330a2459776af32363a1" - ); - public static readonly MongoId AMMOBOX_545X39_HP_30RND = new MongoId( - "5737339e2459776af261abeb" - ); - public static readonly MongoId AMMOBOX_545X39_PP_120RND = new MongoId( - "57372d1b2459776862260581" - ); - public static readonly MongoId AMMOBOX_545X39_PP_120RND_DAMAGED = new MongoId( - "57372d4c245977685a3da2a1" - ); - public static readonly MongoId AMMOBOX_545X39_PP_30RND = new MongoId( - "57372db0245977685d4159b2" - ); - public static readonly MongoId AMMOBOX_545X39_PPBS_120RND = new MongoId( - "657025ebc5d7d4cb4d078588" - ); - public static readonly MongoId AMMOBOX_545X39_PPBS_30RND = new MongoId( - "5c1262a286f7743f8a69aab2" - ); - public static readonly MongoId AMMOBOX_545X39_PRS_120RND = new MongoId( - "57372deb245977685d4159b3" - ); - public static readonly MongoId AMMOBOX_545X39_PRS_120RND_DAMAGED = new MongoId( - "57372e1924597768553071c1" - ); - public static readonly MongoId AMMOBOX_545X39_PRS_30RND = new MongoId( - "57372e4a24597768553071c2" - ); - public static readonly MongoId AMMOBOX_545X39_PS_120RND = new MongoId( - "57372e73245977685d4159b4" - ); - public static readonly MongoId AMMOBOX_545X39_PS_120RND_DAMAGED = new MongoId( - "57372e94245977685648d3e1" - ); - public static readonly MongoId AMMOBOX_545X39_PS_30RND = new MongoId( - "57372ebf2459776862260582" - ); - public static readonly MongoId AMMOBOX_545X39_SP_30RND = new MongoId( - "573733c72459776b0b7b51b0" - ); - public static readonly MongoId AMMOBOX_545X39_T_120RND = new MongoId( - "57372ee1245977685d4159b5" - ); - public static readonly MongoId AMMOBOX_545X39_T_120RND_DAMAGED = new MongoId( - "57372f2824597769a270a191" - ); + public static readonly MongoId AMMOBOX_45ACP_FMJ_50RND = new MongoId("6570240ecfc010a0f50069f2"); + public static readonly MongoId AMMOBOX_45ACP_HYDRASHOK_50RND = new MongoId("65702406bfc87b3a34093216"); + public static readonly MongoId AMMOBOX_45ACP_LASERMATCH_50RND = new MongoId("6570240a1419851aef03e6f7"); + public static readonly MongoId AMMOBOX_45ACP_RIP_50RND = new MongoId("65702414c5d7d4cb4d078555"); + public static readonly MongoId AMMOBOX_46X30_ACTION_SX_40RND = new MongoId("657024c81419851aef03e712"); + public static readonly MongoId AMMOBOX_46X30_AP_SX_40RND = new MongoId("6489870774a806211e4fb685"); + public static readonly MongoId AMMOBOX_46X30_FMJ_SX_40RND = new MongoId("657024cecfc010a0f5006a0a"); + public static readonly MongoId AMMOBOX_46X30_JSP_SX_40RND = new MongoId("64aceaecc4eda9354b0226b6"); + public static readonly MongoId AMMOBOX_46X30_SUBSONIC_SX_40RND = new MongoId("657024d2bfc87b3a34093235"); + public static readonly MongoId AMMOBOX_545X39_7N40_120RND = new MongoId("6570900858b315e8b70a8a98"); + public static readonly MongoId AMMOBOX_545X39_7N40_30RND = new MongoId("64898602f09d032aa9399d56"); + public static readonly MongoId AMMOBOX_545X39_BP_120RND = new MongoId("5737292724597765e5728562"); + public static readonly MongoId AMMOBOX_545X39_BP_120RND_DAMAGED = new MongoId("57372a7f24597766fe0de0c1"); + public static readonly MongoId AMMOBOX_545X39_BP_30RND = new MongoId("57372ac324597767001bc261"); + public static readonly MongoId AMMOBOX_545X39_BS_120RND = new MongoId("57372b832459776701014e41"); + public static readonly MongoId AMMOBOX_545X39_BS_120RND_DAMAGED = new MongoId("57372bad245977670b7cd242"); + public static readonly MongoId AMMOBOX_545X39_BS_30RND = new MongoId("57372bd3245977670b7cd243"); + public static readonly MongoId AMMOBOX_545X39_BT_120RND = new MongoId("57372c21245977670937c6c2"); + public static readonly MongoId AMMOBOX_545X39_BT_120RND_DAMAGED = new MongoId("57372c56245977685e584582"); + public static readonly MongoId AMMOBOX_545X39_BT_30RND = new MongoId("57372c89245977685d4159b1"); + public static readonly MongoId AMMOBOX_545X39_FMJ_30RND = new MongoId("5737330a2459776af32363a1"); + public static readonly MongoId AMMOBOX_545X39_HP_30RND = new MongoId("5737339e2459776af261abeb"); + public static readonly MongoId AMMOBOX_545X39_PP_120RND = new MongoId("57372d1b2459776862260581"); + public static readonly MongoId AMMOBOX_545X39_PP_120RND_DAMAGED = new MongoId("57372d4c245977685a3da2a1"); + public static readonly MongoId AMMOBOX_545X39_PP_30RND = new MongoId("57372db0245977685d4159b2"); + public static readonly MongoId AMMOBOX_545X39_PPBS_120RND = new MongoId("657025ebc5d7d4cb4d078588"); + public static readonly MongoId AMMOBOX_545X39_PPBS_30RND = new MongoId("5c1262a286f7743f8a69aab2"); + public static readonly MongoId AMMOBOX_545X39_PRS_120RND = new MongoId("57372deb245977685d4159b3"); + public static readonly MongoId AMMOBOX_545X39_PRS_120RND_DAMAGED = new MongoId("57372e1924597768553071c1"); + public static readonly MongoId AMMOBOX_545X39_PRS_30RND = new MongoId("57372e4a24597768553071c2"); + public static readonly MongoId AMMOBOX_545X39_PS_120RND = new MongoId("57372e73245977685d4159b4"); + public static readonly MongoId AMMOBOX_545X39_PS_120RND_DAMAGED = new MongoId("57372e94245977685648d3e1"); + public static readonly MongoId AMMOBOX_545X39_PS_30RND = new MongoId("57372ebf2459776862260582"); + public static readonly MongoId AMMOBOX_545X39_SP_30RND = new MongoId("573733c72459776b0b7b51b0"); + public static readonly MongoId AMMOBOX_545X39_T_120RND = new MongoId("57372ee1245977685d4159b5"); + public static readonly MongoId AMMOBOX_545X39_T_120RND_DAMAGED = new MongoId("57372f2824597769a270a191"); public static readonly MongoId AMMOBOX_545X39_T_30RND = new MongoId("57372f5c24597769917c0131"); - public static readonly MongoId AMMOBOX_545X39_US_120RND = new MongoId( - "57372f7d245977699b53e301" - ); - public static readonly MongoId AMMOBOX_545X39_US_120RND_DAMAGED = new MongoId( - "57372fc52459776998772ca1" - ); - public static readonly MongoId AMMOBOX_545X39_US_30RND = new MongoId( - "5737300424597769942d5a01" - ); - public static readonly MongoId AMMOBOX_556X45_FMJ_100RND = new MongoId( - "657026451419851aef03e733" - ); - public static readonly MongoId AMMOBOX_556X45_FMJ_50RND = new MongoId( - "657024d8c5d7d4cb4d078567" - ); - public static readonly MongoId AMMOBOX_556X45_HP_100RND = new MongoId( - "6570264acfc010a0f5006a50" - ); - public static readonly MongoId AMMOBOX_556X45_HP_50RND = new MongoId( - "657024debfc87b3a34093238" - ); - public static readonly MongoId AMMOBOX_556X45_M855_100RND = new MongoId( - "6570264d1419851aef03e736" - ); - public static readonly MongoId AMMOBOX_556X45_M855_50RND = new MongoId( - "5447ac644bdc2d6c208b4567" - ); - public static readonly MongoId AMMOBOX_556X45_M855A1_100RND = new MongoId( - "65702652cfc010a0f5006a53" - ); - public static readonly MongoId AMMOBOX_556X45_M855A1_50RND = new MongoId( - "657024e3c5d7d4cb4d07856a" - ); - public static readonly MongoId AMMOBOX_556X45_M856_100RND = new MongoId( - "65702656c5d7d4cb4d078591" - ); - public static readonly MongoId AMMOBOX_556X45_M856_50RND = new MongoId( - "657024e8cfc010a0f5006a0d" - ); - public static readonly MongoId AMMOBOX_556X45_M856A1_100RND = new MongoId( - "6570265bcfc010a0f5006a56" - ); - public static readonly MongoId AMMOBOX_556X45_M856A1_50RND = new MongoId( - "657024ecc5d7d4cb4d07856d" - ); - public static readonly MongoId AMMOBOX_556X45_M995_100RND = new MongoId( - "6570265f1419851aef03e739" - ); - public static readonly MongoId AMMOBOX_556X45_M995_50RND = new MongoId( - "657024f01419851aef03e715" - ); - public static readonly MongoId AMMOBOX_556X45_RRLP_100RND = new MongoId( - "65702664cfc010a0f5006a59" - ); - public static readonly MongoId AMMOBOX_556X45_RRLP_50RND = new MongoId( - "657024f5cfc010a0f5006a10" - ); - public static readonly MongoId AMMOBOX_556X45_SOST_100RND = new MongoId( - "6570266bc5d7d4cb4d078594" - ); - public static readonly MongoId AMMOBOX_556X45_SOST_50RND = new MongoId( - "657024f9bfc87b3a3409323b" - ); - public static readonly MongoId AMMOBOX_556X45_SSA_AP_100RND = new MongoId( - "65702681bfc87b3a3409325f" - ); - public static readonly MongoId AMMOBOX_556X45_SSA_AP_50RND = new MongoId( - "64898583d5b4df6140000a1d" - ); - public static readonly MongoId AMMOBOX_556X45_WARMAGE_20RND = new MongoId( - "5c11279ad174af029d64592b" - ); - public static readonly MongoId AMMOBOX_57X28_L191_50RND = new MongoId( - "657025161419851aef03e718" - ); - public static readonly MongoId AMMOBOX_57X28_R37F_50RND = new MongoId( - "6570251ccfc010a0f5006a13" - ); - public static readonly MongoId AMMOBOX_57X28_R37X_50RND = new MongoId( - "65702520bfc87b3a3409323e" - ); - public static readonly MongoId AMMOBOX_57X28_SB193_50RND = new MongoId( - "65702524cfc010a0f5006a16" - ); - public static readonly MongoId AMMOBOX_57X28_SS190_50RND = new MongoId( - "648986bbc827d4637f01791e" - ); - public static readonly MongoId AMMOBOX_57X28_SS197SR_50RND = new MongoId( - "657025281419851aef03e71b" - ); - public static readonly MongoId AMMOBOX_57X28_SS198LF_50RND = new MongoId( - "6570252dbfc87b3a34093241" - ); - public static readonly MongoId AMMOBOX_68X51_FMJ_20RND = new MongoId( - "67600a42b32eb5d23e0eb459" - ); - public static readonly MongoId AMMOBOX_68X51_HYBRID_20RND = new MongoId( - "67600a516f01341c9106ab4c" - ); - public static readonly MongoId AMMOBOX_762X25TT_AKBS_25RND = new MongoId( - "6570253ec5d7d4cb4d078573" - ); - public static readonly MongoId AMMOBOX_762X25TT_FMJ43_25RND = new MongoId( - "65702532cfc010a0f5006a19" - ); - public static readonly MongoId AMMOBOX_762X25TT_LRN_25RND = new MongoId( - "65702536c5d7d4cb4d078570" - ); - public static readonly MongoId AMMOBOX_762X25TT_LRNPC_25RND = new MongoId( - "6570253acfc010a0f5006a1c" - ); - public static readonly MongoId AMMOBOX_762X25TT_P_25RND = new MongoId( - "657025421419851aef03e71e" - ); - public static readonly MongoId AMMOBOX_762X25TT_PST_25RND = new MongoId( - "65702546cfc010a0f5006a1f" - ); - public static readonly MongoId AMMOBOX_762X25TT_PT_25RND = new MongoId( - "6570254abfc87b3a34093244" - ); - public static readonly MongoId AMMOBOX_762X35_AP_50RND = new MongoId( - "648985c074a806211e4fb682" - ); - public static readonly MongoId AMMOBOX_762X35_CBJ_50RND = new MongoId( - "657023a9126cc4a57d0e17a6" - ); - public static readonly MongoId AMMOBOX_762X35_FMJ_50RND = new MongoId( - "657023bebfc87b3a34093207" - ); - public static readonly MongoId AMMOBOX_762X35_M62_50RND = new MongoId( - "657023b1cfc010a0f50069e5" - ); - public static readonly MongoId AMMOBOX_762X35_VMAX_50RND = new MongoId( - "657023b71419851aef03e6e8" - ); - public static readonly MongoId AMMOBOX_762X35_WHISPER_50RND = new MongoId( - "657023c61419851aef03e6eb" - ); - public static readonly MongoId AMMOBOX_762X39_BP_20RND = new MongoId( - "64acea16c4eda9354b0226b0" - ); - public static readonly MongoId AMMOBOX_762X39_FMJ_20RND = new MongoId( - "64ace9d9b5bf5e95f50a4c1d" - ); - public static readonly MongoId AMMOBOX_762X39_HP_20RND = new MongoId( - "64acea2c03378853630da53e" - ); - public static readonly MongoId AMMOBOX_762X39_MAI_AP_20RND = new MongoId( - "6489851fc827d4637f01791b" - ); - public static readonly MongoId AMMOBOX_762X39_PP_20RND = new MongoId( - "64ace9f9c4eda9354b0226aa" - ); - public static readonly MongoId AMMOBOX_762X39_PS_20RND = new MongoId( - "5649ed104bdc2d3d1c8b458b" - ); - public static readonly MongoId AMMOBOX_762X39_SP_20RND = new MongoId( - "64ace9ff03378853630da538" - ); - public static readonly MongoId AMMOBOX_762X39_T45M1_20RND = new MongoId( - "64acea09c4eda9354b0226ad" - ); - public static readonly MongoId AMMOBOX_762X39_US_20RND = new MongoId( - "64acea0d03378853630da53b" - ); - public static readonly MongoId AMMOBOX_762X51_BCP_FMJ_20RND = new MongoId( - "65702561cfc010a0f5006a28" - ); - public static readonly MongoId AMMOBOX_762X51_M61_20RND = new MongoId( - "6570254fcfc010a0f5006a22" - ); - public static readonly MongoId AMMOBOX_762X51_M62_20RND = new MongoId( - "65702554bfc87b3a34093247" - ); - public static readonly MongoId AMMOBOX_762X51_M80_20RND = new MongoId( - "65702558cfc010a0f5006a25" - ); - public static readonly MongoId AMMOBOX_762X51_M80A1_20RND = new MongoId( - "6769b8e3c1a1466c850658a8" - ); - public static readonly MongoId AMMOBOX_762X51_M993_20RND = new MongoId( - "648984e3f09d032aa9399d53" - ); - public static readonly MongoId AMMOBOX_762X51_TCW_SP_20RND = new MongoId( - "65702566bfc87b3a3409324d" - ); - public static readonly MongoId AMMOBOX_762X51_ULTRA_NOSLER_20RND = new MongoId( - "6570255dbfc87b3a3409324a" - ); - public static readonly MongoId AMMOBOX_762X54R_BS_20RND = new MongoId( - "648984b8d5b4df6140000a1a" - ); - public static readonly MongoId AMMOBOX_762X54R_BT_20RND = new MongoId( - "65702572c5d7d4cb4d078576" - ); - public static readonly MongoId AMMOBOX_762X54R_FMJ_20RND = new MongoId( - "64aceac0c4eda9354b0226b3" - ); - public static readonly MongoId AMMOBOX_762X54R_HP_BT_20RND = new MongoId( - "64acee6903378853630da544" - ); - public static readonly MongoId AMMOBOX_762X54R_LPS_20RND = new MongoId( - "65702577cfc010a0f5006a2c" - ); - public static readonly MongoId AMMOBOX_762X54R_PS_20RND = new MongoId( - "6570257cc5d7d4cb4d078579" - ); - public static readonly MongoId AMMOBOX_762X54R_SNB_20RND = new MongoId( - "560d75f54bdc2da74d8b4573" - ); - public static readonly MongoId AMMOBOX_762X54R_SP_BT_20RND = new MongoId( - "64aceab0426a303417060654" - ); - public static readonly MongoId AMMOBOX_762X54R_T46M_20RND = new MongoId( - "65702584cfc010a0f5006a2f" - ); + public static readonly MongoId AMMOBOX_545X39_US_120RND = new MongoId("57372f7d245977699b53e301"); + public static readonly MongoId AMMOBOX_545X39_US_120RND_DAMAGED = new MongoId("57372fc52459776998772ca1"); + public static readonly MongoId AMMOBOX_545X39_US_30RND = new MongoId("5737300424597769942d5a01"); + public static readonly MongoId AMMOBOX_556X45_FMJ_100RND = new MongoId("657026451419851aef03e733"); + public static readonly MongoId AMMOBOX_556X45_FMJ_50RND = new MongoId("657024d8c5d7d4cb4d078567"); + public static readonly MongoId AMMOBOX_556X45_HP_100RND = new MongoId("6570264acfc010a0f5006a50"); + public static readonly MongoId AMMOBOX_556X45_HP_50RND = new MongoId("657024debfc87b3a34093238"); + public static readonly MongoId AMMOBOX_556X45_M855_100RND = new MongoId("6570264d1419851aef03e736"); + public static readonly MongoId AMMOBOX_556X45_M855_50RND = new MongoId("5447ac644bdc2d6c208b4567"); + public static readonly MongoId AMMOBOX_556X45_M855A1_100RND = new MongoId("65702652cfc010a0f5006a53"); + public static readonly MongoId AMMOBOX_556X45_M855A1_50RND = new MongoId("657024e3c5d7d4cb4d07856a"); + public static readonly MongoId AMMOBOX_556X45_M856_100RND = new MongoId("65702656c5d7d4cb4d078591"); + public static readonly MongoId AMMOBOX_556X45_M856_50RND = new MongoId("657024e8cfc010a0f5006a0d"); + public static readonly MongoId AMMOBOX_556X45_M856A1_100RND = new MongoId("6570265bcfc010a0f5006a56"); + public static readonly MongoId AMMOBOX_556X45_M856A1_50RND = new MongoId("657024ecc5d7d4cb4d07856d"); + public static readonly MongoId AMMOBOX_556X45_M995_100RND = new MongoId("6570265f1419851aef03e739"); + public static readonly MongoId AMMOBOX_556X45_M995_50RND = new MongoId("657024f01419851aef03e715"); + public static readonly MongoId AMMOBOX_556X45_RRLP_100RND = new MongoId("65702664cfc010a0f5006a59"); + public static readonly MongoId AMMOBOX_556X45_RRLP_50RND = new MongoId("657024f5cfc010a0f5006a10"); + public static readonly MongoId AMMOBOX_556X45_SOST_100RND = new MongoId("6570266bc5d7d4cb4d078594"); + public static readonly MongoId AMMOBOX_556X45_SOST_50RND = new MongoId("657024f9bfc87b3a3409323b"); + public static readonly MongoId AMMOBOX_556X45_SSA_AP_100RND = new MongoId("65702681bfc87b3a3409325f"); + public static readonly MongoId AMMOBOX_556X45_SSA_AP_50RND = new MongoId("64898583d5b4df6140000a1d"); + public static readonly MongoId AMMOBOX_556X45_WARMAGE_20RND = new MongoId("5c11279ad174af029d64592b"); + public static readonly MongoId AMMOBOX_57X28_L191_50RND = new MongoId("657025161419851aef03e718"); + public static readonly MongoId AMMOBOX_57X28_R37F_50RND = new MongoId("6570251ccfc010a0f5006a13"); + public static readonly MongoId AMMOBOX_57X28_R37X_50RND = new MongoId("65702520bfc87b3a3409323e"); + public static readonly MongoId AMMOBOX_57X28_SB193_50RND = new MongoId("65702524cfc010a0f5006a16"); + public static readonly MongoId AMMOBOX_57X28_SS190_50RND = new MongoId("648986bbc827d4637f01791e"); + public static readonly MongoId AMMOBOX_57X28_SS197SR_50RND = new MongoId("657025281419851aef03e71b"); + public static readonly MongoId AMMOBOX_57X28_SS198LF_50RND = new MongoId("6570252dbfc87b3a34093241"); + public static readonly MongoId AMMOBOX_68X51_FMJ_20RND = new MongoId("67600a42b32eb5d23e0eb459"); + public static readonly MongoId AMMOBOX_68X51_HYBRID_20RND = new MongoId("67600a516f01341c9106ab4c"); + public static readonly MongoId AMMOBOX_762X25TT_AKBS_25RND = new MongoId("6570253ec5d7d4cb4d078573"); + public static readonly MongoId AMMOBOX_762X25TT_FMJ43_25RND = new MongoId("65702532cfc010a0f5006a19"); + public static readonly MongoId AMMOBOX_762X25TT_LRN_25RND = new MongoId("65702536c5d7d4cb4d078570"); + public static readonly MongoId AMMOBOX_762X25TT_LRNPC_25RND = new MongoId("6570253acfc010a0f5006a1c"); + public static readonly MongoId AMMOBOX_762X25TT_P_25RND = new MongoId("657025421419851aef03e71e"); + public static readonly MongoId AMMOBOX_762X25TT_PST_25RND = new MongoId("65702546cfc010a0f5006a1f"); + public static readonly MongoId AMMOBOX_762X25TT_PT_25RND = new MongoId("6570254abfc87b3a34093244"); + public static readonly MongoId AMMOBOX_762X35_AP_50RND = new MongoId("648985c074a806211e4fb682"); + public static readonly MongoId AMMOBOX_762X35_CBJ_50RND = new MongoId("657023a9126cc4a57d0e17a6"); + public static readonly MongoId AMMOBOX_762X35_FMJ_50RND = new MongoId("657023bebfc87b3a34093207"); + public static readonly MongoId AMMOBOX_762X35_M62_50RND = new MongoId("657023b1cfc010a0f50069e5"); + public static readonly MongoId AMMOBOX_762X35_VMAX_50RND = new MongoId("657023b71419851aef03e6e8"); + public static readonly MongoId AMMOBOX_762X35_WHISPER_50RND = new MongoId("657023c61419851aef03e6eb"); + public static readonly MongoId AMMOBOX_762X39_BP_20RND = new MongoId("64acea16c4eda9354b0226b0"); + public static readonly MongoId AMMOBOX_762X39_FMJ_20RND = new MongoId("64ace9d9b5bf5e95f50a4c1d"); + public static readonly MongoId AMMOBOX_762X39_HP_20RND = new MongoId("64acea2c03378853630da53e"); + public static readonly MongoId AMMOBOX_762X39_MAI_AP_20RND = new MongoId("6489851fc827d4637f01791b"); + public static readonly MongoId AMMOBOX_762X39_PP_20RND = new MongoId("64ace9f9c4eda9354b0226aa"); + public static readonly MongoId AMMOBOX_762X39_PS_20RND = new MongoId("5649ed104bdc2d3d1c8b458b"); + public static readonly MongoId AMMOBOX_762X39_SP_20RND = new MongoId("64ace9ff03378853630da538"); + public static readonly MongoId AMMOBOX_762X39_T45M1_20RND = new MongoId("64acea09c4eda9354b0226ad"); + public static readonly MongoId AMMOBOX_762X39_US_20RND = new MongoId("64acea0d03378853630da53b"); + public static readonly MongoId AMMOBOX_762X51_BCP_FMJ_20RND = new MongoId("65702561cfc010a0f5006a28"); + public static readonly MongoId AMMOBOX_762X51_M61_20RND = new MongoId("6570254fcfc010a0f5006a22"); + public static readonly MongoId AMMOBOX_762X51_M62_20RND = new MongoId("65702554bfc87b3a34093247"); + public static readonly MongoId AMMOBOX_762X51_M80_20RND = new MongoId("65702558cfc010a0f5006a25"); + public static readonly MongoId AMMOBOX_762X51_M80A1_20RND = new MongoId("6769b8e3c1a1466c850658a8"); + public static readonly MongoId AMMOBOX_762X51_M993_20RND = new MongoId("648984e3f09d032aa9399d53"); + public static readonly MongoId AMMOBOX_762X51_TCW_SP_20RND = new MongoId("65702566bfc87b3a3409324d"); + public static readonly MongoId AMMOBOX_762X51_ULTRA_NOSLER_20RND = new MongoId("6570255dbfc87b3a3409324a"); + public static readonly MongoId AMMOBOX_762X54R_BS_20RND = new MongoId("648984b8d5b4df6140000a1a"); + public static readonly MongoId AMMOBOX_762X54R_BT_20RND = new MongoId("65702572c5d7d4cb4d078576"); + public static readonly MongoId AMMOBOX_762X54R_FMJ_20RND = new MongoId("64aceac0c4eda9354b0226b3"); + public static readonly MongoId AMMOBOX_762X54R_HP_BT_20RND = new MongoId("64acee6903378853630da544"); + public static readonly MongoId AMMOBOX_762X54R_LPS_20RND = new MongoId("65702577cfc010a0f5006a2c"); + public static readonly MongoId AMMOBOX_762X54R_PS_20RND = new MongoId("6570257cc5d7d4cb4d078579"); + public static readonly MongoId AMMOBOX_762X54R_SNB_20RND = new MongoId("560d75f54bdc2da74d8b4573"); + public static readonly MongoId AMMOBOX_762X54R_SP_BT_20RND = new MongoId("64aceab0426a303417060654"); + public static readonly MongoId AMMOBOX_762X54R_T46M_20RND = new MongoId("65702584cfc010a0f5006a2f"); public static readonly MongoId AMMOBOX_86X70_AP_20RND = new MongoId("6489848173c462723909a14b"); - public static readonly MongoId AMMOBOX_86X70_FMJ_20RND = new MongoId( - "657023ccbfc87b3a3409320a" - ); - public static readonly MongoId AMMOBOX_86X70_TACX_20RND = new MongoId( - "657023d6cfc010a0f50069e9" - ); - public static readonly MongoId AMMOBOX_86X70_UCW_20RND = new MongoId( - "657023dabfc87b3a3409320d" - ); - public static readonly MongoId AMMOBOX_9X18PM_BZHT_16RND = new MongoId( - "573722e82459776104581c21" - ); - public static readonly MongoId AMMOBOX_9X18PM_BZHT_50RND = new MongoId( - "65702606cfc010a0f5006a3e" - ); + public static readonly MongoId AMMOBOX_86X70_FMJ_20RND = new MongoId("657023ccbfc87b3a3409320a"); + public static readonly MongoId AMMOBOX_86X70_TACX_20RND = new MongoId("657023d6cfc010a0f50069e9"); + public static readonly MongoId AMMOBOX_86X70_UCW_20RND = new MongoId("657023dabfc87b3a3409320d"); + public static readonly MongoId AMMOBOX_9X18PM_BZHT_16RND = new MongoId("573722e82459776104581c21"); + public static readonly MongoId AMMOBOX_9X18PM_BZHT_50RND = new MongoId("65702606cfc010a0f5006a3e"); public static readonly MongoId AMMOBOX_9X18PM_P_16RND = new MongoId("573724b42459776125652ac2"); public static readonly MongoId AMMOBOX_9X18PM_P_50RND = new MongoId("6570260c1419851aef03e727"); - public static readonly MongoId AMMOBOX_9X18PM_PBM_16RND = new MongoId( - "5737250c2459776125652acc" - ); - public static readonly MongoId AMMOBOX_9X18PM_PBM_50RND = new MongoId( - "65702610cfc010a0f5006a41" - ); - public static readonly MongoId AMMOBOX_9X18PM_PPE_16RND = new MongoId( - "573725b0245977612125bae2" - ); - public static readonly MongoId AMMOBOX_9X18PM_PPE_50RND = new MongoId( - "65702619bfc87b3a34093259" - ); - public static readonly MongoId AMMOBOX_9X18PM_PPT_16RND = new MongoId( - "5737260b24597761224311f2" - ); - public static readonly MongoId AMMOBOX_9X18PM_PPT_50RND = new MongoId( - "65702614c5d7d4cb4d07858b" - ); - public static readonly MongoId AMMOBOX_9X18PM_PRS_16RND = new MongoId( - "5737266524597761006c6a8c" - ); - public static readonly MongoId AMMOBOX_9X18PM_PRS_50RND = new MongoId( - "6570261dc5d7d4cb4d07858e" - ); - public static readonly MongoId AMMOBOX_9X18PM_PS_PPO_16RND = new MongoId( - "573726d824597765d96be361" - ); - public static readonly MongoId AMMOBOX_9X18PM_PS_PPO_50RND = new MongoId( - "65702621cfc010a0f5006a44" - ); - public static readonly MongoId AMMOBOX_9X18PM_PSO_16RND = new MongoId( - "5737273924597765dd374461" - ); - public static readonly MongoId AMMOBOX_9X18PM_PSO_50RND = new MongoId( - "65702629cfc010a0f5006a47" - ); - public static readonly MongoId AMMOBOX_9X18PM_PST_16RND = new MongoId( - "573727c624597765cc785b5b" - ); - public static readonly MongoId AMMOBOX_9X18PM_PST_50RND = new MongoId( - "6570262d1419851aef03e72d" - ); - public static readonly MongoId AMMOBOX_9X18PM_PSTM_16RND = new MongoId( - "5737256c2459776125652acd" - ); - public static readonly MongoId AMMOBOX_9X18PM_PSTM_50RND = new MongoId( - "65702640cfc010a0f5006a4d" - ); - public static readonly MongoId AMMOBOX_9X18PM_PSV_16RND = new MongoId( - "5737280e24597765cc785b5c" - ); - public static readonly MongoId AMMOBOX_9X18PM_PSV_50RND = new MongoId( - "657026251419851aef03e72a" - ); - public static readonly MongoId AMMOBOX_9X18PM_RG028_16RND = new MongoId( - "5737287724597765e1625ae2" - ); - public static readonly MongoId AMMOBOX_9X18PM_RG028_50RND = new MongoId( - "65702630cfc010a0f5006a4a" - ); - public static readonly MongoId AMMOBOX_9X18PM_SP7_16RND = new MongoId( - "573728cc24597765cc785b5d" - ); - public static readonly MongoId AMMOBOX_9X18PM_SP7_50RND = new MongoId( - "657026341419851aef03e730" - ); - public static readonly MongoId AMMOBOX_9X18PM_SP8_16RND = new MongoId( - "573728f324597765e5728561" - ); - public static readonly MongoId AMMOBOX_9X18PM_SP8_50RND = new MongoId( - "65702639bfc87b3a3409325c" - ); - public static readonly MongoId AMMOBOX_9X19_AP_63_50RND = new MongoId( - "65702591c5d7d4cb4d07857c" - ); + public static readonly MongoId AMMOBOX_9X18PM_PBM_16RND = new MongoId("5737250c2459776125652acc"); + public static readonly MongoId AMMOBOX_9X18PM_PBM_50RND = new MongoId("65702610cfc010a0f5006a41"); + public static readonly MongoId AMMOBOX_9X18PM_PPE_16RND = new MongoId("573725b0245977612125bae2"); + public static readonly MongoId AMMOBOX_9X18PM_PPE_50RND = new MongoId("65702619bfc87b3a34093259"); + public static readonly MongoId AMMOBOX_9X18PM_PPT_16RND = new MongoId("5737260b24597761224311f2"); + public static readonly MongoId AMMOBOX_9X18PM_PPT_50RND = new MongoId("65702614c5d7d4cb4d07858b"); + public static readonly MongoId AMMOBOX_9X18PM_PRS_16RND = new MongoId("5737266524597761006c6a8c"); + public static readonly MongoId AMMOBOX_9X18PM_PRS_50RND = new MongoId("6570261dc5d7d4cb4d07858e"); + public static readonly MongoId AMMOBOX_9X18PM_PS_PPO_16RND = new MongoId("573726d824597765d96be361"); + public static readonly MongoId AMMOBOX_9X18PM_PS_PPO_50RND = new MongoId("65702621cfc010a0f5006a44"); + public static readonly MongoId AMMOBOX_9X18PM_PSO_16RND = new MongoId("5737273924597765dd374461"); + public static readonly MongoId AMMOBOX_9X18PM_PSO_50RND = new MongoId("65702629cfc010a0f5006a47"); + public static readonly MongoId AMMOBOX_9X18PM_PST_16RND = new MongoId("573727c624597765cc785b5b"); + public static readonly MongoId AMMOBOX_9X18PM_PST_50RND = new MongoId("6570262d1419851aef03e72d"); + public static readonly MongoId AMMOBOX_9X18PM_PSTM_16RND = new MongoId("5737256c2459776125652acd"); + public static readonly MongoId AMMOBOX_9X18PM_PSTM_50RND = new MongoId("65702640cfc010a0f5006a4d"); + public static readonly MongoId AMMOBOX_9X18PM_PSV_16RND = new MongoId("5737280e24597765cc785b5c"); + public static readonly MongoId AMMOBOX_9X18PM_PSV_50RND = new MongoId("657026251419851aef03e72a"); + public static readonly MongoId AMMOBOX_9X18PM_RG028_16RND = new MongoId("5737287724597765e1625ae2"); + public static readonly MongoId AMMOBOX_9X18PM_RG028_50RND = new MongoId("65702630cfc010a0f5006a4a"); + public static readonly MongoId AMMOBOX_9X18PM_SP7_16RND = new MongoId("573728cc24597765cc785b5d"); + public static readonly MongoId AMMOBOX_9X18PM_SP7_50RND = new MongoId("657026341419851aef03e730"); + public static readonly MongoId AMMOBOX_9X18PM_SP8_16RND = new MongoId("573728f324597765e5728561"); + public static readonly MongoId AMMOBOX_9X18PM_SP8_50RND = new MongoId("65702639bfc87b3a3409325c"); + public static readonly MongoId AMMOBOX_9X19_AP_63_50RND = new MongoId("65702591c5d7d4cb4d07857c"); public static readonly MongoId AMMOBOX_9X19_GT_50RND = new MongoId("657025961419851aef03e721"); - public static readonly MongoId AMMOBOX_9X19_LUGER_CCI_50RND = new MongoId( - "6570259bc5d7d4cb4d07857f" - ); - public static readonly MongoId AMMOBOX_9X19_M882_50RND = new MongoId( - "64aceafcb5bf5e95f50a4c20" - ); + public static readonly MongoId AMMOBOX_9X19_LUGER_CCI_50RND = new MongoId("6570259bc5d7d4cb4d07857f"); + public static readonly MongoId AMMOBOX_9X19_M882_50RND = new MongoId("64aceafcb5bf5e95f50a4c20"); public static readonly MongoId AMMOBOX_9X19_PBP_50RND = new MongoId("648987d673c462723909a151"); public static readonly MongoId AMMOBOX_9X19_PSO_50RND = new MongoId("657025a4bfc87b3a34093250"); public static readonly MongoId AMMOBOX_9X19_PST_16RND = new MongoId("5739d41224597779c3645501"); public static readonly MongoId AMMOBOX_9X19_PST_50RND = new MongoId("657025a81419851aef03e724"); - public static readonly MongoId AMMOBOX_9X19_QUAKEMAKER_50RND = new MongoId( - "6570259fcfc010a0f5006a32" - ); + public static readonly MongoId AMMOBOX_9X19_QUAKEMAKER_50RND = new MongoId("6570259fcfc010a0f5006a32"); public static readonly MongoId AMMOBOX_9X19_RIP_20RND = new MongoId("5c1127bdd174af44217ab8b9"); - public static readonly MongoId AMMOBOX_9X21_7N42_30RND = new MongoId( - "6579847c5a0e5879d12f2873" - ); + public static readonly MongoId AMMOBOX_9X21_7N42_30RND = new MongoId("6579847c5a0e5879d12f2873"); public static readonly MongoId AMMOBOX_9X21_7U4_30RND = new MongoId("6579846c1ec1943afb14c15a"); public static readonly MongoId AMMOBOX_9X21_BT_30RND = new MongoId("6489875745f9ca4ba51c4808"); public static readonly MongoId AMMOBOX_9X21_P_30RND = new MongoId("657025bbcfc010a0f5006a35"); public static readonly MongoId AMMOBOX_9X21_PE_30RND = new MongoId("657025c9cfc010a0f5006a38"); public static readonly MongoId AMMOBOX_9X21_PS_30RND = new MongoId("657025c4c5d7d4cb4d078582"); - public static readonly MongoId AMMOBOX_9X33R_FMJ_25RND = new MongoId( - "657023decfc010a0f50069ec" - ); + public static readonly MongoId AMMOBOX_9X33R_FMJ_25RND = new MongoId("657023decfc010a0f50069ec"); public static readonly MongoId AMMOBOX_9X33R_HP_25RND = new MongoId("657023e31419851aef03e6ee"); - public static readonly MongoId AMMOBOX_9X33R_JHP_25RND = new MongoId( - "657023e7c5d7d4cb4d078552" - ); + public static readonly MongoId AMMOBOX_9X33R_JHP_25RND = new MongoId("657023e7c5d7d4cb4d078552"); public static readonly MongoId AMMOBOX_9X33R_SP_25RND = new MongoId("657023eccfc010a0f50069ef"); public static readonly MongoId AMMOBOX_9X39_BP_20RND = new MongoId("6489854673c462723909a14e"); public static readonly MongoId AMMOBOX_9X39_BP_8RND = new MongoId("5c1260dc86f7746b106e8748"); public static readonly MongoId AMMOBOX_9X39_FMJ_20RND = new MongoId("657984a50fbff513dd435765"); - public static readonly MongoId AMMOBOX_9X39_PAB9_20RND = new MongoId( - "657025cfbfc87b3a34093253" - ); + public static readonly MongoId AMMOBOX_9X39_PAB9_20RND = new MongoId("657025cfbfc87b3a34093253"); public static readonly MongoId AMMOBOX_9X39_SP5_20RND = new MongoId("657025d4c5d7d4cb4d078585"); public static readonly MongoId AMMOBOX_9X39_SP6_20RND = new MongoId("657025dabfc87b3a34093256"); public static readonly MongoId AMMOBOX_9X39_SPP_20RND = new MongoId("657025dfcfc010a0f5006a3b"); @@ -809,1368 +441,533 @@ public static class ItemTpl public static readonly MongoId ARMBAND_USEC = new MongoId("619bdfd4c9546643a67df6fa"); public static readonly MongoId ARMBAND_WHITE = new MongoId("5b3f16c486f7747c327f55f7"); public static readonly MongoId ARMBAND_YELLOW = new MongoId("5b3f3b0e86f7746752107cda"); - public static readonly MongoId ARMOR_511_TACTICAL_HEXGRID_PLATE_CARRIER = new MongoId( - "5fd4c474dd870108a754b241" - ); - public static readonly MongoId ARMOR_6B13_ASSAULT_ARMOR_EMR = new MongoId( - "5c0e53c886f7747fa54205c7" - ); - public static readonly MongoId ARMOR_6B13_ASSAULT_ARMOR_FLORA = new MongoId( - "5c0e51be86f774598e797894" - ); - public static readonly MongoId ARMOR_6B13_M_ASSAULT_ARMOR_CHRISTMAS_EDITION = new MongoId( - "674d91ce6e862d5a95059ed6" - ); - public static readonly MongoId ARMOR_6B13_M_ASSAULT_ARMOR_KILLA_EDITION = new MongoId( - "5c0e541586f7747fa54205c9" - ); - public static readonly MongoId ARMOR_6B2_BODY_ARMOR_FLORA = new MongoId( - "5df8a2ca86f7740bfe6df777" - ); - public static readonly MongoId ARMOR_6B231_BODY_ARMOR_EMR = new MongoId( - "5c0e5bab86f77461f55ed1f3" - ); - public static readonly MongoId ARMOR_6B232_BODY_ARMOR_MOUNTAIN_FLORA = new MongoId( - "5c0e57ba86f7747fa141986d" - ); - public static readonly MongoId ARMOR_6B43_ZABRALOSH_BODY_ARMOR_EMR = new MongoId( - "545cdb794bdc2d3a198b456a" - ); + public static readonly MongoId ARMOR_511_TACTICAL_HEXGRID_PLATE_CARRIER = new MongoId("5fd4c474dd870108a754b241"); + public static readonly MongoId ARMOR_6B13_ASSAULT_ARMOR_EMR = new MongoId("5c0e53c886f7747fa54205c7"); + public static readonly MongoId ARMOR_6B13_ASSAULT_ARMOR_FLORA = new MongoId("5c0e51be86f774598e797894"); + public static readonly MongoId ARMOR_6B13_M_ASSAULT_ARMOR_CHRISTMAS_EDITION = new MongoId("674d91ce6e862d5a95059ed6"); + public static readonly MongoId ARMOR_6B13_M_ASSAULT_ARMOR_KILLA_EDITION = new MongoId("5c0e541586f7747fa54205c9"); + public static readonly MongoId ARMOR_6B2_BODY_ARMOR_FLORA = new MongoId("5df8a2ca86f7740bfe6df777"); + public static readonly MongoId ARMOR_6B231_BODY_ARMOR_EMR = new MongoId("5c0e5bab86f77461f55ed1f3"); + public static readonly MongoId ARMOR_6B232_BODY_ARMOR_MOUNTAIN_FLORA = new MongoId("5c0e57ba86f7747fa141986d"); + public static readonly MongoId ARMOR_6B43_ZABRALOSH_BODY_ARMOR_EMR = new MongoId("545cdb794bdc2d3a198b456a"); public static readonly MongoId ARMOR_BNTI_GZHELK_BODY = new MongoId("5ab8e79e86f7742d8b372e78"); - public static readonly MongoId ARMOR_BNTI_KIRASAN_BODY = new MongoId( - "5b44d22286f774172b0c9de8" - ); - public static readonly MongoId ARMOR_BNTI_KIRASAN_BODY_ARMOR_GREEN = new MongoId( - "67ab2f28dafe3b22670c9116" - ); - public static readonly MongoId ARMOR_BNTI_MODULE3M_BODY = new MongoId( - "59e7635f86f7742cbf2c1095" - ); - public static readonly MongoId ARMOR_BNTI_ZHUK_BODY_ARMOR_EMR = new MongoId( - "5c0e625a86f7742d77340f62" - ); - public static readonly MongoId ARMOR_BNTI_ZHUK_BODY_ARMOR_PRESS = new MongoId( - "5c0e5edb86f77461f55ed1f7" - ); + public static readonly MongoId ARMOR_BNTI_KIRASAN_BODY = new MongoId("5b44d22286f774172b0c9de8"); + public static readonly MongoId ARMOR_BNTI_KIRASAN_BODY_ARMOR_GREEN = new MongoId("67ab2f28dafe3b22670c9116"); + public static readonly MongoId ARMOR_BNTI_MODULE3M_BODY = new MongoId("59e7635f86f7742cbf2c1095"); + public static readonly MongoId ARMOR_BNTI_ZHUK_BODY_ARMOR_EMR = new MongoId("5c0e625a86f7742d77340f62"); + public static readonly MongoId ARMOR_BNTI_ZHUK_BODY_ARMOR_PRESS = new MongoId("5c0e5edb86f77461f55ed1f7"); public static readonly MongoId ARMOR_DRD_BODY = new MongoId("62a09d79de7ac81993580530"); - public static readonly MongoId ARMOR_FORT_DEFENDER2_BODY = new MongoId( - "5e9dacf986f774054d6b89f4" - ); + public static readonly MongoId ARMOR_FORT_DEFENDER2_BODY = new MongoId("5e9dacf986f774054d6b89f4"); public static readonly MongoId ARMOR_FORT_REDUTM_BODY = new MongoId("5ca2151486f774244a3b8d30"); - public static readonly MongoId ARMOR_FORT_REDUTM_BODY_ARMOR_SK_WOODLAND = new MongoId( - "67ab2f5adafe3b22670c911f" - ); - public static readonly MongoId ARMOR_FORT_REDUTT5_BODY_ARMOR_SMOG = new MongoId( - "5ca21c6986f77479963115a7" - ); - public static readonly MongoId ARMOR_HEXATAC_HPC_PLATE_CARRIER_MULTICAM = new MongoId( - "67ab2eecfe82855dcc0f2af6" - ); - public static readonly MongoId ARMOR_HEXATAC_HPC_PLATE_CARRIER_MULTICAM_BLACK = new MongoId( - "63737f448b28897f2802b874" - ); - public static readonly MongoId ARMOR_HIGHCOM_TROOPER_TFO_BODY_ARMOR_COYOTE = new MongoId( - "67ab2f94dafe3b22670c912c" - ); - public static readonly MongoId ARMOR_HIGHCOM_TROOPER_TFO_BODY_ARMOR_MULTICAM = new MongoId( - "5c0e655586f774045612eeb2" - ); - public static readonly MongoId ARMOR_INTERCEPTOR_OTV_BODY_ARMOR_UCP = new MongoId( - "64abd93857958b4249003418" - ); - public static readonly MongoId ARMOR_IOTV_GEN4_BODY_ARMOR_ASSAULT_KIT_MULTICAM = new MongoId( - "5b44cf1486f77431723e3d05" - ); - public static readonly MongoId ARMOR_IOTV_GEN4_BODY_ARMOR_FULL_PROTECTION_KIT_MULTICAM = - new MongoId("5b44cd8b86f774503d30cba2"); - public static readonly MongoId ARMOR_IOTV_GEN4_BODY_ARMOR_HIGH_MOBILITY_KIT_MULTICAM = - new MongoId("5b44d0de86f774503d30cba8"); - public static readonly MongoId ARMOR_LBT6094A_SLICK_PLATE_CARRIER_BLACK = new MongoId( - "5e4abb5086f77406975c9342" - ); - public static readonly MongoId ARMOR_LBT6094A_SLICK_PLATE_CARRIER_COYOTE_TAN = new MongoId( - "6038b4b292ec1c3103795a0b" - ); - public static readonly MongoId ARMOR_LBT6094A_SLICK_PLATE_CARRIER_OLIVE_DRAB = new MongoId( - "6038b4ca92ec1c3103795a0d" - ); + public static readonly MongoId ARMOR_FORT_REDUTM_BODY_ARMOR_SK_WOODLAND = new MongoId("67ab2f5adafe3b22670c911f"); + public static readonly MongoId ARMOR_FORT_REDUTT5_BODY_ARMOR_SMOG = new MongoId("5ca21c6986f77479963115a7"); + public static readonly MongoId ARMOR_HEXATAC_HPC_PLATE_CARRIER_MULTICAM = new MongoId("67ab2eecfe82855dcc0f2af6"); + public static readonly MongoId ARMOR_HEXATAC_HPC_PLATE_CARRIER_MULTICAM_BLACK = new MongoId("63737f448b28897f2802b874"); + public static readonly MongoId ARMOR_HIGHCOM_TROOPER_TFO_BODY_ARMOR_COYOTE = new MongoId("67ab2f94dafe3b22670c912c"); + public static readonly MongoId ARMOR_HIGHCOM_TROOPER_TFO_BODY_ARMOR_MULTICAM = new MongoId("5c0e655586f774045612eeb2"); + public static readonly MongoId ARMOR_INTERCEPTOR_OTV_BODY_ARMOR_UCP = new MongoId("64abd93857958b4249003418"); + public static readonly MongoId ARMOR_IOTV_GEN4_BODY_ARMOR_ASSAULT_KIT_MULTICAM = new MongoId("5b44cf1486f77431723e3d05"); + public static readonly MongoId ARMOR_IOTV_GEN4_BODY_ARMOR_FULL_PROTECTION_KIT_MULTICAM = new MongoId("5b44cd8b86f774503d30cba2"); + public static readonly MongoId ARMOR_IOTV_GEN4_BODY_ARMOR_HIGH_MOBILITY_KIT_MULTICAM = new MongoId("5b44d0de86f774503d30cba8"); + public static readonly MongoId ARMOR_LBT6094A_SLICK_PLATE_CARRIER_BLACK = new MongoId("5e4abb5086f77406975c9342"); + public static readonly MongoId ARMOR_LBT6094A_SLICK_PLATE_CARRIER_COYOTE_TAN = new MongoId("6038b4b292ec1c3103795a0b"); + public static readonly MongoId ARMOR_LBT6094A_SLICK_PLATE_CARRIER_OLIVE_DRAB = new MongoId("6038b4ca92ec1c3103795a0d"); public static readonly MongoId ARMOR_MFUNTAR_BODY = new MongoId("5ab8e4ed86f7742d8e50c7fa"); - public static readonly MongoId ARMOR_NFM_THOR_CONCEALABLE_REINFORCED_VEST_BODY = new MongoId( - "609e8540d5c319764c2bc2e9" - ); - public static readonly MongoId ARMOR_NFM_THOR_INTEGRATED_CARRIER_BODY = new MongoId( - "60a283193cb70855c43a381d" - ); - public static readonly MongoId ARMOR_NPP_KLASS_KORAKULON_BODY_ARMOR_BLACK = new MongoId( - "64be79c487d1510151095552" - ); - public static readonly MongoId ARMOR_NPP_KLASS_KORAKULON_BODY_ARMOR_EMR = new MongoId( - "64be79e2bf8412471d0d9bcc" - ); - public static readonly MongoId ARMOR_NPP_KLASS_KORUNDVM_BODY_ARMOR_BLACK = new MongoId( - "5f5f41476bdad616ad46d631" - ); + public static readonly MongoId ARMOR_NFM_THOR_CONCEALABLE_REINFORCED_VEST_BODY = new MongoId("609e8540d5c319764c2bc2e9"); + public static readonly MongoId ARMOR_NFM_THOR_INTEGRATED_CARRIER_BODY = new MongoId("60a283193cb70855c43a381d"); + public static readonly MongoId ARMOR_NPP_KLASS_KORAKULON_BODY_ARMOR_BLACK = new MongoId("64be79c487d1510151095552"); + public static readonly MongoId ARMOR_NPP_KLASS_KORAKULON_BODY_ARMOR_EMR = new MongoId("64be79e2bf8412471d0d9bcc"); + public static readonly MongoId ARMOR_NPP_KLASS_KORUNDVM_BODY_ARMOR_BLACK = new MongoId("5f5f41476bdad616ad46d631"); public static readonly MongoId ARMOR_PACA_SOFT = new MongoId("5648a7494bdc2d9d488b4583"); - public static readonly MongoId ARMOR_PACA_SOFT_ARMOR_RIVALS_EDITION = new MongoId( - "607f20859ee58b18e41ecd90" - ); - public static readonly MongoId ARMOREDEQUIPMENT_ALTYN_HELMET_FACE_SHIELD = new MongoId( - "5aa7e373e5b5b000137b76f0" - ); - public static readonly MongoId ARMOREDEQUIPMENT_CRYE_PRECISION_AIRFRAME_CHOPS = new MongoId( - "5c178a942e22164bef5ceca3" - ); - public static readonly MongoId ARMOREDEQUIPMENT_CRYE_PRECISION_AIRFRAME_EARS = new MongoId( - "5c1793902e221602b21d3de2" - ); - public static readonly MongoId ARMOREDEQUIPMENT_DIAMOND_AGE_BASTION_HELMET_ARMOR_PLATE = - new MongoId("5ea18c84ecf1982c7712d9a2"); - public static readonly MongoId ARMOREDEQUIPMENT_DIAMOND_AGE_NEOSTEEL_HELMET_BALLISTIC_MANDIBLE = - new MongoId("6570a88c8f221f3b210353b7"); - public static readonly MongoId ARMOREDEQUIPMENT_GALVION_CAIMAN_FIXED_ARM_VISOR = new MongoId( - "5f60bf4558eff926626a60f2" - ); - public static readonly MongoId ARMOREDEQUIPMENT_GALVION_CAIMAN_HYBRID_BALLISTIC_APPLIQUE = - new MongoId("5f60b85bbdb8e27dee3dc985"); - public static readonly MongoId ARMOREDEQUIPMENT_GALVION_CAIMAN_HYBRID_BALLISTIC_MANDIBLE_GUARD = - new MongoId("5f60c076f2bcbb675b00dac2"); - public static readonly MongoId ARMOREDEQUIPMENT_KIVERM_FACE_SHIELD = new MongoId( - "5b46238386f7741a693bcf9c" - ); - public static readonly MongoId ARMOREDEQUIPMENT_KOLPAK1S_FACE_SHIELD = new MongoId( - "5ac4c50d5acfc40019262e87" - ); - public static readonly MongoId ARMOREDEQUIPMENT_LSHZ2DTM_AVENTAIL = new MongoId( - "5d6d3be5a4b9361bc73bc763" - ); - public static readonly MongoId ARMOREDEQUIPMENT_LSHZ2DTM_COVER_BLACK = new MongoId( - "5d6d3943a4b9360dbc46d0cc" - ); - public static readonly MongoId ARMOREDEQUIPMENT_LSHZ2DTM_FACE_SHIELD = new MongoId( - "5d6d3829a4b9361bc8618943" - ); - public static readonly MongoId ARMOREDEQUIPMENT_MASKA1SCH_FACE_SHIELD_KILLA_EDITION = - new MongoId("5c0e842486f77443a74d2976"); - public static readonly MongoId ARMOREDEQUIPMENT_MASKA1SCH_FACE_SHIELD_OLIVE_DRAB = new MongoId( - "5c0919b50db834001b7ce3b9" - ); - public static readonly MongoId ARMOREDEQUIPMENT_NPP_KLASS_TOR2_HELMET_FACE_SHIELD = new MongoId( - "65719f9ef392ad76c50a2ec8" - ); - public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_GUNSIGHT_MANDIBLE = new MongoId( - "5a16ba61fcdbcb098008728a" - ); - public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_MULTIHIT_BALLISTIC_FACE_SHIELD = - new MongoId("5a16b7e1fcdbcb00165aa6c9"); - public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_SIDE_ARMOR = new MongoId( - "5a16badafcdbcb001865f72d" - ); - public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_VISOR = new MongoId( - "5a16b672fcdbcb001912fa83" - ); - public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_SLAAP_ARMOR_HELMET_PLATE_TAN = - new MongoId("5c0e66e2d174af02a96252f4"); - public static readonly MongoId ARMOREDEQUIPMENT_RYST_FACE_SHIELD = new MongoId( - "5f60c85b58eff926626a60f7" - ); - public static readonly MongoId ARMOREDEQUIPMENT_TACKEK_HEAVY_TROOPER_MASK_FOR_OPSCORETYPE_HELMETS = - new MongoId("5ea058e01dbce517f324b3e2"); - public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_BALLISTIC_FACE_SHIELD_BLACK = - new MongoId("5e00cdd986f7747473332240"); - public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_BALLISTIC_FACE_SHIELD_COYOTE_BROWN = - new MongoId("5e01f37686f774773c6f6c15"); - public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_EAR_COVERS_BLACK = new MongoId( - "5e00cfa786f77469dc6e5685" - ); - public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_EAR_COVERS_COYOTE_BROWN = - new MongoId("5e01f31d86f77465cf261343"); - public static readonly MongoId ARMOREDEQUIPMENT_VULKAN5_HELMET_FACE_SHIELD = new MongoId( - "5ca2113f86f7740b2547e1d2" - ); - public static readonly MongoId ARMOREDEQUIPMENT_ZSH12M_FACE_SHIELD = new MongoId( - "5aa7e3abe5b5b000171d064d" - ); - public static readonly MongoId ARMORPLATE_6B12_BALLISTIC_PLATES_FRONT = new MongoId( - "654a4dea7c17dec2f50cc86a" - ); - public static readonly MongoId ARMORPLATE_6B13_CUSTOM_BALLISTIC_PLATES_BACK = new MongoId( - "656efd66034e8e01c407f35c" - ); - public static readonly MongoId ARMORPLATE_6B232_BALLISTIC_PLATE_BACK = new MongoId( - "657b22485f444d6dff0c6c2f" - ); - public static readonly MongoId ARMORPLATE_6B33_BALLISTIC_PLATE_FRONT = new MongoId( - "656f603f94b480b8a500c0d6" - ); - public static readonly MongoId ARMORPLATE_AR500_LEGACY_PLATE_BALLISTIC_PLATE = new MongoId( - "656f9d5900d62bcd2e02407c" - ); - public static readonly MongoId ARMORPLATE_ARAMID_INSERT = new MongoId( - "64b111fe1be308f1800688c1" - ); - public static readonly MongoId ARMORPLATE_CULT_LOCUST_BALLISTIC_PLATE = new MongoId( - "656fa8d700d62bcd2e024084" - ); - public static readonly MongoId ARMORPLATE_CULT_TERMITE_BALLISTIC_PLATE = new MongoId( - "656fa99800d62bcd2e024088" - ); - public static readonly MongoId ARMORPLATE_ESAPI_LEVEL_IV_BALLISTIC_PLATE = new MongoId( - "64afdcb83efdfea28601d041" - ); - public static readonly MongoId ARMORPLATE_ESBI_LEVEL_IV_BALLISTIC_PLATE_SIDE = new MongoId( - "64afdb577bb3bfe8fe03fd1d" - ); - public static readonly MongoId ARMORPLATE_GAC_3S15M_BALLISTIC_PLATE = new MongoId( - "656fae5f7c2d57afe200c0d7" - ); - public static readonly MongoId ARMORPLATE_GAC_4SSS2_BALLISTIC_PLATE = new MongoId( - "656faf0ca0dce000a2020f77" - ); - public static readonly MongoId ARMORPLATE_GLOBAL_ARMORS_STEEL_BALLISTIC_PLATE = new MongoId( - "656fa0fb498d1b7e3e071d9c" - ); - public static readonly MongoId ARMORPLATE_GRANIT_4_BALLISTIC_PLATE_FRONT = new MongoId( - "656f611f94b480b8a500c0db" - ); - public static readonly MongoId ARMORPLATE_GRANIT_4_BALLISTIC_PLATES_BACK = new MongoId( - "656efaf54772930db4031ff5" - ); - public static readonly MongoId ARMORPLATE_GRANIT_4RS_BALLISTIC_PLATE_FRONT = new MongoId( - "656f63c027aed95beb08f62c" - ); - public static readonly MongoId ARMORPLATE_GRANIT_4RS_BALLISTIC_PLATES_BACK = new MongoId( - "654a4a964b446df1ad03f192" - ); - public static readonly MongoId ARMORPLATE_GRANIT_BALLISTIC_PLATE_SIDE = new MongoId( - "64afd81707e2cf40e903a316" - ); - public static readonly MongoId ARMORPLATE_GRANIT_BR4_BALLISTIC_PLATE = new MongoId( - "65573fa5655447403702a816" - ); - public static readonly MongoId ARMORPLATE_GRANIT_BR5_BALLISTIC_PLATE = new MongoId( - "64afc71497cf3a403c01ff38" - ); - public static readonly MongoId ARMORPLATE_HELMET_ALL_EXEPTNECK = new MongoId( - "64b11c08506a73f6a10f9364" - ); - public static readonly MongoId ARMORPLATE_KIBA_ARMS_STEEL_BALLISTIC_PLATE = new MongoId( - "656fa76500d62bcd2e024080" - ); - public static readonly MongoId ARMORPLATE_KIBA_ARMS_TITAN_BALLISTIC_PLATE = new MongoId( - "656fa25e94b480b8a500c0e0" - ); - public static readonly MongoId ARMORPLATE_KITECO_SCIV_SA_BALLISTIC_PLATE = new MongoId( - "656fafe3498d1b7e3e071da4" - ); - public static readonly MongoId ARMORPLATE_KORUNDVM_BALLISTIC_PLATE_BACK = new MongoId( - "657b2797c3dbcb01d60c35ea" - ); - public static readonly MongoId ARMORPLATE_KORUNDVM_BALLISTIC_PLATE_SIDE = new MongoId( - "654a4f8bc721968a4404ef18" - ); - public static readonly MongoId ARMORPLATE_KORUNDVM_BALLISTIC_PLATES_FRONT = new MongoId( - "656f664200d62bcd2e024077" - ); - public static readonly MongoId ARMORPLATE_KORUNDVMK_BALLISTIC_PLATE_BACK = new MongoId( - "657b28d25f444d6dff0c6c77" - ); - public static readonly MongoId ARMORPLATE_KORUNDVMK_BALLISTIC_PLATES_FRONT = new MongoId( - "656f66b5c6baea13cd07e108" - ); - public static readonly MongoId ARMORPLATE_MONOCLETE_LEVEL_III_PE_BALLISTIC_PLATE = new MongoId( - "656fad8c498d1b7e3e071da0" - ); - public static readonly MongoId ARMORPLATE_NESCO_4400SAMC_BALLISTIC_PLATE = new MongoId( - "656fa61e94b480b8a500c0e8" - ); - public static readonly MongoId ARMORPLATE_NEWSPHERETECH_LEVEL_III_BALLISTIC_PLATE = new MongoId( - "656fb21fa0dce000a2020f7c" - ); - public static readonly MongoId ARMORPLATE_PRTCTR_LIGHTWEIGHT_BALLISTIC_PLATE = new MongoId( - "656fac30c6baea13cd07e10c" - ); - public static readonly MongoId ARMORPLATE_SAPI_LEVEL_III_BALLISTIC_PLATE = new MongoId( - "655746010177119f4a097ff7" - ); - public static readonly MongoId ARMORPLATE_SPRTN_ELAPHROS_BALLISTIC_PLATE = new MongoId( - "656fb0bd7c2d57afe200c0dc" - ); - public static readonly MongoId ARMORPLATE_SPRTN_OMEGA_BALLISTIC_PLATE = new MongoId( - "656f9fa0498d1b7e3e071d98" - ); - public static readonly MongoId ARMORPLATE_SSAPI_LEVEL_III_BALLISTIC_PLATE_SIDE = new MongoId( - "6557458f83942d705f0c4962" - ); - public static readonly MongoId ARMORPLATE_TALLCOM_GUARDIAN_BALLISTIC_PLATE = new MongoId( - "656fa53d94b480b8a500c0e4" - ); - public static readonly MongoId ARMORPLATE_ZHUK3_BALLISTIC_PLATE_FRONT = new MongoId( - "656f57dc27aed95beb08f628" - ); - public static readonly MongoId ASSAULTCARBINE_AS_VAL_9X39_SPECIAL_ASSAULT_RIFLE = new MongoId( - "57c44b372459772d2b39b8ce" - ); - public static readonly MongoId ASSAULTCARBINE_KBP_9A91_9X39_COMPACT_ASSAULT_RIFLE = new MongoId( - "644674a13d52156624001fbc" - ); - public static readonly MongoId ASSAULTCARBINE_KBP_VSK94_9X39_RIFLE = new MongoId( - "645e0c6b3b381ede770e1cc9" - ); - public static readonly MongoId ASSAULTCARBINE_MOLOT_ARMS_SIMONOV_OPSKS_762X39_CARBINE = - new MongoId("587e02ff24597743df3deaeb"); - public static readonly MongoId ASSAULTCARBINE_MOLOT_ARMS_VPO101_VEPRHUNTER_762X51_CARBINE = - new MongoId("5c501a4d2e221602b412b540"); - public static readonly MongoId ASSAULTCARBINE_SR3M_9X39_COMPACT_ASSAULT_RIFLE = new MongoId( - "651450ce0e00edc794068371" - ); - public static readonly MongoId ASSAULTCARBINE_TOKAREV_AVT40_762X54R_AUTOMATIC_RIFLE = - new MongoId("6410733d5dd49d77bd07847e"); - public static readonly MongoId ASSAULTCARBINE_TOKAREV_SVT40_762X54R_RIFLE = new MongoId( - "643ea5b23db6f9f57107d9fd" - ); - public static readonly MongoId ASSAULTCARBINE_TOZ_SIMONOV_SKS_762X39_CARBINE = new MongoId( - "574d967124597745970e7c94" - ); - public static readonly MongoId ASSAULTRIFLE_ADAR_215_556X45_CARBINE = new MongoId( - "5c07c60e0db834002330051f" - ); - public static readonly MongoId ASSAULTRIFLE_AKLYS_DEFENSE_VELOCIRAPTOR_300_BLACKOUT_ASSAULT_RIFLE = - new MongoId("674d6121c09f69dfb201a888"); - public static readonly MongoId ASSAULTRIFLE_ASH12_127X55_ASSAULT_RIFLE = new MongoId( - "5cadfbf7ae92152ac412eeef" - ); - public static readonly MongoId ASSAULTRIFLE_CMMG_MK47_MUTANT_762X39_ASSAULT_RIFLE = new MongoId( - "606587252535c57a13424cfd" - ); - public static readonly MongoId ASSAULTRIFLE_COLT_M4A1_556X45_ASSAULT_RIFLE = new MongoId( - "5447a9cd4bdc2dbd208b4567" - ); - public static readonly MongoId ASSAULTRIFLE_DESERT_TECH_MDR_556X45_ASSAULT_RIFLE = new MongoId( - "5c488a752e221602b412af63" - ); - public static readonly MongoId ASSAULTRIFLE_DESERT_TECH_MDR_762X51_ASSAULT_RIFLE = new MongoId( - "5dcbd56fdbd3d91b3e5468d5" - ); - public static readonly MongoId ASSAULTRIFLE_DS_ARMS_SA58_762X51_ASSAULT_RIFLE = new MongoId( - "5b0bbe4e5acfc40dc528a72d" - ); - public static readonly MongoId ASSAULTRIFLE_FN_SCARH_762X51_ASSAULT_RIFLE = new MongoId( - "6183afd850224f204c1da514" - ); - public static readonly MongoId ASSAULTRIFLE_FN_SCARH_762X51_ASSAULT_RIFLE_FDE = new MongoId( - "6165ac306ef05c2ce828ef74" - ); - public static readonly MongoId ASSAULTRIFLE_FN_SCARH_X17_762X51_ASSAULT_RIFLE = new MongoId( - "676176d362e0497044079f4c" - ); - public static readonly MongoId ASSAULTRIFLE_FN_SCARL_556X45_ASSAULT_RIFLE = new MongoId( - "6184055050224f204c1da540" - ); - public static readonly MongoId ASSAULTRIFLE_FN_SCARL_556X45_ASSAULT_RIFLE_FDE = new MongoId( - "618428466ef05c2ce828f218" - ); - public static readonly MongoId ASSAULTRIFLE_HK_416A5_556X45_ASSAULT_RIFLE = new MongoId( - "5bb2475ed4351e00853264e3" - ); - public static readonly MongoId ASSAULTRIFLE_HK_G36_556X45_ASSAULT_RIFLE = new MongoId( - "623063e994fc3f7b302a9696" - ); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK101_556X45_ASSAULT_RIFLE = - new MongoId("5ac66cb05acfc40198510a10"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK102_556X45_ASSAULT_RIFLE = - new MongoId("5ac66d015acfc400180ae6e4"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK103_762X39_ASSAULT_RIFLE = - new MongoId("5ac66d2e5acfc43b321d4b53"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK104_762X39_ASSAULT_RIFLE = - new MongoId("5ac66d725acfc43b321d4b60"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK105_545X39_ASSAULT_RIFLE = - new MongoId("5ac66d9b5acfc4001633997a"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK12_545X39_ASSAULT_RIFLE = new MongoId( - "6499849fc93611967b034949" - ); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK74_545X39_ASSAULT_RIFLE = new MongoId( - "5bf3e03b0db834001d2c4a9c" - ); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK74M_545X39_ASSAULT_RIFLE = - new MongoId("5ac4cd105acfc40016339859"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK74N_545X39_ASSAULT_RIFLE = - new MongoId("5644bd2b4bdc2d3b4c8b4572"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKM_762X39_ASSAULT_RIFLE = new MongoId( - "59d6088586f774275f37482f" - ); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKMN_762X39_ASSAULT_RIFLE = new MongoId( - "5a0ec13bfcdbcb00165aa685" - ); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKMS_762X39_ASSAULT_RIFLE = new MongoId( - "59ff346386f77477562ff5e2" - ); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKMSN_762X39_ASSAULT_RIFLE = - new MongoId("5abcbc27d8ce8700182eceeb"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74_545X39_ASSAULT_RIFLE = - new MongoId("5bf3e0490db83400196199af"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74N_545X39_ASSAULT_RIFLE = - new MongoId("5ab8e9fcd8ce870019439434"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74U_545X39_ASSAULT_RIFLE = - new MongoId("57dc2fa62459775949412633"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74UB_545X39_ASSAULT_RIFLE = - new MongoId("5839a40f24597726f856b511"); - public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74UN_545X39_ASSAULT_RIFLE = - new MongoId("583990e32459771419544dd2"); - public static readonly MongoId ASSAULTRIFLE_LONE_STAR_TX15_DML_556X45_CARBINE = new MongoId( - "5d43021ca4b9362eab4b5e25" - ); - public static readonly MongoId ASSAULTRIFLE_MASTER_HAND = new MongoId( - "5ae083b25acfc4001a5fc702" - ); - public static readonly MongoId ASSAULTRIFLE_MOLOT_ARMS_VPO136_VEPRKM_762X39_CARBINE = - new MongoId("59e6152586f77473dc057aa1"); - public static readonly MongoId ASSAULTRIFLE_MOLOT_ARMS_VPO209_366_TKM_CARBINE = new MongoId( - "59e6687d86f77411d949b251" - ); - public static readonly MongoId ASSAULTRIFLE_RIFLE_DYNAMICS_RD704_762X39_ASSAULT_RIFLE = - new MongoId("628a60ae6b1d481ff772e9c8"); - public static readonly MongoId ASSAULTRIFLE_SAG_AK545_545X39_CARBINE = new MongoId( - "628b5638ad252a16da6dd245" - ); - public static readonly MongoId ASSAULTRIFLE_SAG_AK545_SHORT_545X39_CARBINE = new MongoId( - "628b9c37a733087d0d7fe84b" - ); - public static readonly MongoId ASSAULTRIFLE_SIG_MCX_300_BLACKOUT_ASSAULT_RIFLE = new MongoId( - "5fbcc1d9016cce60e8341ab3" - ); - public static readonly MongoId ASSAULTRIFLE_SIG_MCXSPEAR_68X51_ASSAULT_RIFLE = new MongoId( - "65290f395ae2ae97b80fdf2d" - ); - public static readonly MongoId ASSAULTRIFLE_STEYR_AUG_A1_556X45_ASSAULT_RIFLE = new MongoId( - "62e7c4fba689e8c9c50dfc38" - ); - public static readonly MongoId ASSAULTRIFLE_STEYR_AUG_A3_556X45_ASSAULT_RIFLE = new MongoId( - "63171672192e68c5460cebc5" - ); - public static readonly MongoId ASSAULTRIFLE_STEYR_AUG_A3_556X45_ASSAULT_RIFLE_BLACK = - new MongoId("6718817435e3cfd9550d2c27"); - public static readonly MongoId ASSAULTSCOPE_ELCAN_SPECTER_OS4X_ASSAULT_SCOPE = new MongoId( - "544a3f024bdc2d1d388b4568" - ); - public static readonly MongoId ASSAULTSCOPE_ELCAN_SPECTERDR_1X4X_SCOPE = new MongoId( - "57ac965c24597706be5f975c" - ); - public static readonly MongoId ASSAULTSCOPE_ELCAN_SPECTERDR_1X4X_SCOPE_FDE = new MongoId( - "57aca93d2459771f2c7e26db" - ); - public static readonly MongoId ASSAULTSCOPE_HK_G36_HENSOLDT_HKV_3X_CARRY_HANDLE = new MongoId( - "622b4d7df9cfc87d675d2ded" - ); - public static readonly MongoId ASSAULTSCOPE_HK_G36_HENSOLDT_HKV_ZF_15X_CARRY_HANDLE = - new MongoId("622b4f54dc8dcc0ba8742f85"); - public static readonly MongoId ASSAULTSCOPE_KIBA_ARMS_SHORT_PRISM_25X_SCOPE = new MongoId( - "5c1cdd512e22161b267d91ae" - ); - public static readonly MongoId ASSAULTSCOPE_LEUPOLD_MARK_4_HAMR_4X24_DELTAPOINT_HYBRID_ASSAULT_SCOPE = - new MongoId("544a3a774bdc2d3a388b4567"); - public static readonly MongoId ASSAULTSCOPE_MONSTRUM_TACTICAL_COMPACT_PRISM_SCOPE_2X32 = - new MongoId("5d2dc3e548f035404a1a4798"); - public static readonly MongoId ASSAULTSCOPE_SIG_SAUER_BRAVO4_4X30_SCOPE = new MongoId( - "57adff4f24597737f373b6e6" - ); - public static readonly MongoId ASSAULTSCOPE_STEYR_AUG_A1_STG77_15X_OPTIC_SIGHT = new MongoId( - "62ea7c793043d74a0306e19f" - ); - public static readonly MongoId ASSAULTSCOPE_STEYR_AUG_A3_M1_15X_OPTIC_SIGHT = new MongoId( - "62ebd290c427473eff0baafb" - ); - public static readonly MongoId ASSAULTSCOPE_SWAMPFOX_TRIHAWK_PRISM_SCOPE_3X30 = new MongoId( - "626bb8532c923541184624b4" - ); - public static readonly MongoId ASSAULTSCOPE_TRIJICON_ACOG_TA01NSN_4X32_SCOPE_BLACK = - new MongoId("5c05293e0db83400232fff80"); - public static readonly MongoId ASSAULTSCOPE_TRIJICON_ACOG_TA01NSN_4X32_SCOPE_TAN = new MongoId( - "5c052a900db834001a66acbd" - ); - public static readonly MongoId ASSAULTSCOPE_TRIJICON_ACOG_TA11D_35X35_SCOPE = new MongoId( - "59db7e1086f77448be30ddf3" - ); - public static readonly MongoId ASSAULTSCOPE_VALDAY_PS320_16X_SCOPE = new MongoId( - "5c0517910db83400232ffee5" - ); - public static readonly MongoId AUXILIARYMOD_ARMASIGHT_VULCAN_MG_SCOPE_EYECUP = new MongoId( - "5b3cbc235acfc4001863ac44" - ); - public static readonly MongoId AUXILIARYMOD_ARMASIGHT_ZEUSPRO_SCOPE_EYECUP = new MongoId( - "63fc4533b10b17385349b565" - ); - public static readonly MongoId AUXILIARYMOD_AXION_KOBRA_SIGHT_SHADE = new MongoId( - "591c4e1186f77410354b316e" - ); - public static readonly MongoId AUXILIARYMOD_CYCLONE_SHAKHIN_SCOPE_EYECUP = new MongoId( - "67641bec4ad898aa100c1079" - ); - public static readonly MongoId AUXILIARYMOD_FAB_DEFENSE_PROTECTION_CAP_FOR_AGR870 = new MongoId( - "5bfe86bd0db83400232fe959" - ); - public static readonly MongoId AUXILIARYMOD_GLOCK_ZEV_TECH_SIGHT_MOUNT_CAP = new MongoId( - "5a71e1868dc32e00094b97f3" - ); - public static readonly MongoId AUXILIARYMOD_HK_G36_HAND_STOP = new MongoId( - "622f16a1a5958f63c67f1737" - ); - public static readonly MongoId AUXILIARYMOD_HK_USP_HAMMER = new MongoId( - "6193d3be7c6c7b169525f0da" - ); - public static readonly MongoId AUXILIARYMOD_HK_USP_SLIDE_LOCK = new MongoId( - "6193d5d4f8ee7e52e4210a1b" - ); - public static readonly MongoId AUXILIARYMOD_HK_USP_TRIGGER = new MongoId( - "6193d3cded0429009f543e6a" - ); - public static readonly MongoId AUXILIARYMOD_KAC_URX_331_LONG_PANEL = new MongoId( - "5d123b70d7ad1a0ee35e0754" - ); - public static readonly MongoId AUXILIARYMOD_KAC_URX_331_LONG_PANEL_FDE = new MongoId( - "5d124c0ed7ad1a10d168dd9b" - ); - public static readonly MongoId AUXILIARYMOD_KAC_URX_331_SHORT_PANEL = new MongoId( - "5d123a3cd7ad1a004e476058" - ); - public static readonly MongoId AUXILIARYMOD_KAC_URX_331_SHORT_PANEL_FDE = new MongoId( - "5d124c01d7ad1a115c7d59fb" - ); - public static readonly MongoId AUXILIARYMOD_KAC_URX_331_STOPPER_PANEL = new MongoId( - "5d123b7dd7ad1a004f01b262" - ); - public static readonly MongoId AUXILIARYMOD_KAC_URX_331_STOPPER_PANEL_FDE = new MongoId( - "5d124c1ad7ad1a12227c53a7" - ); - public static readonly MongoId AUXILIARYMOD_KMZ_1P59_SCOPE_EYECUP = new MongoId( - "5d0b5cd3d7ad1a3fe32ad263" - ); - public static readonly MongoId AUXILIARYMOD_KPSR2_SIGHT_SHADE = new MongoId( - "62ff9faffe938a24c90c10df" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_CASPIAN_ARMS_TRIK_TRIGGER = new MongoId( - "5ef32e4d1c1fd62aea6a150d" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_HAMMER = new MongoId( - "5e81c550763d9f754677befd" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_SLIDE_STOP = new MongoId( - "5e81c539cb2b95385c177553" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_STI_HEX_HAMMER = new MongoId( - "5ef35f46382a846010715a96" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_TRIGGER = new MongoId( - "5e81c6a2ac2bb513793cdc7f" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_WILSON_EXTENDED_SLIDE_STOP = new MongoId( - "5ef3553c43cb350a955a7ccb" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_WILSON_RETRO_COMMANDER_HAMMER = new MongoId( - "5ef35d2ac64c5d0dfc0571b0" - ); - public static readonly MongoId AUXILIARYMOD_M1911A1_WILSON_ULTRALIGHT_SKELETONIZED_HAMMER = - new MongoId("5ef35bc243cb350a955a7ccd"); - public static readonly MongoId AUXILIARYMOD_M45A1_HAMMER = new MongoId( - "5f3e76d86cda304dcc634054" - ); - public static readonly MongoId AUXILIARYMOD_M45A1_SLIDE_LOCK = new MongoId( - "5f3e777688ca2d00ad199d25" - ); - public static readonly MongoId AUXILIARYMOD_M45A1_TRIGGER = new MongoId( - "5f3e772a670e2a7b01739a52" - ); - public static readonly MongoId AUXILIARYMOD_MP155_ULTIMA_PISTOL_GRIP_RUBBER_PAD = new MongoId( - "60785c0d232e5a31c233d51c" - ); - public static readonly MongoId AUXILIARYMOD_MP155_ULTIMA_UNDERBARREL_MOUNT = new MongoId( - "606f26752535c57a13424d22" - ); - public static readonly MongoId AUXILIARYMOD_NPZ_1P78_SCOPE_EYECUP = new MongoId( - "618a760e526131765025aae3" - ); - public static readonly MongoId AUXILIARYMOD_NPZ_USP1_SCOPE_EYECUP = new MongoId( - "5cf639aad7f00c065703d455" - ); - public static readonly MongoId AUXILIARYMOD_NSPUM_SCOPE_EYECUP = new MongoId( - "5ba36f85d4351e0085325c81" - ); - public static readonly MongoId AUXILIARYMOD_PSO_SCOPE_EYECUP = new MongoId( - "57f3a5ae2459772b0e0bf19e" - ); - public static readonly MongoId AUXILIARYMOD_SAKO_TRG_M10_REAR_HOOK = new MongoId( - "673ddbb567c759b3c90e5f76" - ); - public static readonly MongoId AUXILIARYMOD_STM9_MAGWELL = new MongoId( - "602f85fd9b513876d4338d9c" - ); - public static readonly MongoId AUXILIARYMOD_STM9_MAGWELL_GREY = new MongoId( - "60338ff388382f4fab3fd2c8" - ); - public static readonly MongoId AUXILIARYMOD_SV98_ANTIHEAT_RIBBON = new MongoId( - "56083eab4bdc2d26448b456a" - ); - public static readonly MongoId AUXILIARYMOD_SV98_SOUND_SUPPRESSOR_HEAT_SHIELD = new MongoId( - "5c4eecde2e221602b3140418" - ); - public static readonly MongoId AUXILIARYMOD_TRIJICON_REAPIR_SCOPE_EYECUP = new MongoId( - "5a1eacb3fcdbcb09800872be" - ); + public static readonly MongoId ARMOR_PACA_SOFT_ARMOR_RIVALS_EDITION = new MongoId("607f20859ee58b18e41ecd90"); + public static readonly MongoId ARMOREDEQUIPMENT_ALTYN_HELMET_FACE_SHIELD = new MongoId("5aa7e373e5b5b000137b76f0"); + public static readonly MongoId ARMOREDEQUIPMENT_CRYE_PRECISION_AIRFRAME_CHOPS = new MongoId("5c178a942e22164bef5ceca3"); + public static readonly MongoId ARMOREDEQUIPMENT_CRYE_PRECISION_AIRFRAME_EARS = new MongoId("5c1793902e221602b21d3de2"); + public static readonly MongoId ARMOREDEQUIPMENT_DIAMOND_AGE_BASTION_HELMET_ARMOR_PLATE = new MongoId("5ea18c84ecf1982c7712d9a2"); + public static readonly MongoId ARMOREDEQUIPMENT_DIAMOND_AGE_NEOSTEEL_HELMET_BALLISTIC_MANDIBLE = new MongoId( + "6570a88c8f221f3b210353b7" + ); + public static readonly MongoId ARMOREDEQUIPMENT_GALVION_CAIMAN_FIXED_ARM_VISOR = new MongoId("5f60bf4558eff926626a60f2"); + public static readonly MongoId ARMOREDEQUIPMENT_GALVION_CAIMAN_HYBRID_BALLISTIC_APPLIQUE = new MongoId("5f60b85bbdb8e27dee3dc985"); + public static readonly MongoId ARMOREDEQUIPMENT_GALVION_CAIMAN_HYBRID_BALLISTIC_MANDIBLE_GUARD = new MongoId( + "5f60c076f2bcbb675b00dac2" + ); + public static readonly MongoId ARMOREDEQUIPMENT_KIVERM_FACE_SHIELD = new MongoId("5b46238386f7741a693bcf9c"); + public static readonly MongoId ARMOREDEQUIPMENT_KOLPAK1S_FACE_SHIELD = new MongoId("5ac4c50d5acfc40019262e87"); + public static readonly MongoId ARMOREDEQUIPMENT_LSHZ2DTM_AVENTAIL = new MongoId("5d6d3be5a4b9361bc73bc763"); + public static readonly MongoId ARMOREDEQUIPMENT_LSHZ2DTM_COVER_BLACK = new MongoId("5d6d3943a4b9360dbc46d0cc"); + public static readonly MongoId ARMOREDEQUIPMENT_LSHZ2DTM_FACE_SHIELD = new MongoId("5d6d3829a4b9361bc8618943"); + public static readonly MongoId ARMOREDEQUIPMENT_MASKA1SCH_FACE_SHIELD_KILLA_EDITION = new MongoId("5c0e842486f77443a74d2976"); + public static readonly MongoId ARMOREDEQUIPMENT_MASKA1SCH_FACE_SHIELD_OLIVE_DRAB = new MongoId("5c0919b50db834001b7ce3b9"); + public static readonly MongoId ARMOREDEQUIPMENT_NPP_KLASS_TOR2_HELMET_FACE_SHIELD = new MongoId("65719f9ef392ad76c50a2ec8"); + public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_GUNSIGHT_MANDIBLE = new MongoId("5a16ba61fcdbcb098008728a"); + public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_MULTIHIT_BALLISTIC_FACE_SHIELD = new MongoId("5a16b7e1fcdbcb00165aa6c9"); + public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_SIDE_ARMOR = new MongoId("5a16badafcdbcb001865f72d"); + public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_FAST_VISOR = new MongoId("5a16b672fcdbcb001912fa83"); + public static readonly MongoId ARMOREDEQUIPMENT_OPSCORE_SLAAP_ARMOR_HELMET_PLATE_TAN = new MongoId("5c0e66e2d174af02a96252f4"); + public static readonly MongoId ARMOREDEQUIPMENT_RYST_FACE_SHIELD = new MongoId("5f60c85b58eff926626a60f7"); + public static readonly MongoId ARMOREDEQUIPMENT_TACKEK_HEAVY_TROOPER_MASK_FOR_OPSCORETYPE_HELMETS = new MongoId( + "5ea058e01dbce517f324b3e2" + ); + public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_BALLISTIC_FACE_SHIELD_BLACK = new MongoId("5e00cdd986f7747473332240"); + public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_BALLISTIC_FACE_SHIELD_COYOTE_BROWN = new MongoId( + "5e01f37686f774773c6f6c15" + ); + public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_EAR_COVERS_BLACK = new MongoId("5e00cfa786f77469dc6e5685"); + public static readonly MongoId ARMOREDEQUIPMENT_TEAM_WENDY_EXFIL_EAR_COVERS_COYOTE_BROWN = new MongoId("5e01f31d86f77465cf261343"); + public static readonly MongoId ARMOREDEQUIPMENT_VULKAN5_HELMET_FACE_SHIELD = new MongoId("5ca2113f86f7740b2547e1d2"); + public static readonly MongoId ARMOREDEQUIPMENT_ZSH12M_FACE_SHIELD = new MongoId("5aa7e3abe5b5b000171d064d"); + public static readonly MongoId ARMORPLATE_6B12_BALLISTIC_PLATES_FRONT = new MongoId("654a4dea7c17dec2f50cc86a"); + public static readonly MongoId ARMORPLATE_6B13_CUSTOM_BALLISTIC_PLATES_BACK = new MongoId("656efd66034e8e01c407f35c"); + public static readonly MongoId ARMORPLATE_6B232_BALLISTIC_PLATE_BACK = new MongoId("657b22485f444d6dff0c6c2f"); + public static readonly MongoId ARMORPLATE_6B33_BALLISTIC_PLATE_FRONT = new MongoId("656f603f94b480b8a500c0d6"); + public static readonly MongoId ARMORPLATE_AR500_LEGACY_PLATE_BALLISTIC_PLATE = new MongoId("656f9d5900d62bcd2e02407c"); + public static readonly MongoId ARMORPLATE_ARAMID_INSERT = new MongoId("64b111fe1be308f1800688c1"); + public static readonly MongoId ARMORPLATE_CULT_LOCUST_BALLISTIC_PLATE = new MongoId("656fa8d700d62bcd2e024084"); + public static readonly MongoId ARMORPLATE_CULT_TERMITE_BALLISTIC_PLATE = new MongoId("656fa99800d62bcd2e024088"); + public static readonly MongoId ARMORPLATE_ESAPI_LEVEL_IV_BALLISTIC_PLATE = new MongoId("64afdcb83efdfea28601d041"); + public static readonly MongoId ARMORPLATE_ESBI_LEVEL_IV_BALLISTIC_PLATE_SIDE = new MongoId("64afdb577bb3bfe8fe03fd1d"); + public static readonly MongoId ARMORPLATE_GAC_3S15M_BALLISTIC_PLATE = new MongoId("656fae5f7c2d57afe200c0d7"); + public static readonly MongoId ARMORPLATE_GAC_4SSS2_BALLISTIC_PLATE = new MongoId("656faf0ca0dce000a2020f77"); + public static readonly MongoId ARMORPLATE_GLOBAL_ARMORS_STEEL_BALLISTIC_PLATE = new MongoId("656fa0fb498d1b7e3e071d9c"); + public static readonly MongoId ARMORPLATE_GRANIT_4_BALLISTIC_PLATE_FRONT = new MongoId("656f611f94b480b8a500c0db"); + public static readonly MongoId ARMORPLATE_GRANIT_4_BALLISTIC_PLATES_BACK = new MongoId("656efaf54772930db4031ff5"); + public static readonly MongoId ARMORPLATE_GRANIT_4RS_BALLISTIC_PLATE_FRONT = new MongoId("656f63c027aed95beb08f62c"); + public static readonly MongoId ARMORPLATE_GRANIT_4RS_BALLISTIC_PLATES_BACK = new MongoId("654a4a964b446df1ad03f192"); + public static readonly MongoId ARMORPLATE_GRANIT_BALLISTIC_PLATE_SIDE = new MongoId("64afd81707e2cf40e903a316"); + public static readonly MongoId ARMORPLATE_GRANIT_BR4_BALLISTIC_PLATE = new MongoId("65573fa5655447403702a816"); + public static readonly MongoId ARMORPLATE_GRANIT_BR5_BALLISTIC_PLATE = new MongoId("64afc71497cf3a403c01ff38"); + public static readonly MongoId ARMORPLATE_HELMET_ALL_EXEPTNECK = new MongoId("64b11c08506a73f6a10f9364"); + public static readonly MongoId ARMORPLATE_KIBA_ARMS_STEEL_BALLISTIC_PLATE = new MongoId("656fa76500d62bcd2e024080"); + public static readonly MongoId ARMORPLATE_KIBA_ARMS_TITAN_BALLISTIC_PLATE = new MongoId("656fa25e94b480b8a500c0e0"); + public static readonly MongoId ARMORPLATE_KITECO_SCIV_SA_BALLISTIC_PLATE = new MongoId("656fafe3498d1b7e3e071da4"); + public static readonly MongoId ARMORPLATE_KORUNDVM_BALLISTIC_PLATE_BACK = new MongoId("657b2797c3dbcb01d60c35ea"); + public static readonly MongoId ARMORPLATE_KORUNDVM_BALLISTIC_PLATE_SIDE = new MongoId("654a4f8bc721968a4404ef18"); + public static readonly MongoId ARMORPLATE_KORUNDVM_BALLISTIC_PLATES_FRONT = new MongoId("656f664200d62bcd2e024077"); + public static readonly MongoId ARMORPLATE_KORUNDVMK_BALLISTIC_PLATE_BACK = new MongoId("657b28d25f444d6dff0c6c77"); + public static readonly MongoId ARMORPLATE_KORUNDVMK_BALLISTIC_PLATES_FRONT = new MongoId("656f66b5c6baea13cd07e108"); + public static readonly MongoId ARMORPLATE_MONOCLETE_LEVEL_III_PE_BALLISTIC_PLATE = new MongoId("656fad8c498d1b7e3e071da0"); + public static readonly MongoId ARMORPLATE_NESCO_4400SAMC_BALLISTIC_PLATE = new MongoId("656fa61e94b480b8a500c0e8"); + public static readonly MongoId ARMORPLATE_NEWSPHERETECH_LEVEL_III_BALLISTIC_PLATE = new MongoId("656fb21fa0dce000a2020f7c"); + public static readonly MongoId ARMORPLATE_PRTCTR_LIGHTWEIGHT_BALLISTIC_PLATE = new MongoId("656fac30c6baea13cd07e10c"); + public static readonly MongoId ARMORPLATE_SAPI_LEVEL_III_BALLISTIC_PLATE = new MongoId("655746010177119f4a097ff7"); + public static readonly MongoId ARMORPLATE_SPRTN_ELAPHROS_BALLISTIC_PLATE = new MongoId("656fb0bd7c2d57afe200c0dc"); + public static readonly MongoId ARMORPLATE_SPRTN_OMEGA_BALLISTIC_PLATE = new MongoId("656f9fa0498d1b7e3e071d98"); + public static readonly MongoId ARMORPLATE_SSAPI_LEVEL_III_BALLISTIC_PLATE_SIDE = new MongoId("6557458f83942d705f0c4962"); + public static readonly MongoId ARMORPLATE_TALLCOM_GUARDIAN_BALLISTIC_PLATE = new MongoId("656fa53d94b480b8a500c0e4"); + public static readonly MongoId ARMORPLATE_ZHUK3_BALLISTIC_PLATE_FRONT = new MongoId("656f57dc27aed95beb08f628"); + public static readonly MongoId ASSAULTCARBINE_AS_VAL_9X39_SPECIAL_ASSAULT_RIFLE = new MongoId("57c44b372459772d2b39b8ce"); + public static readonly MongoId ASSAULTCARBINE_KBP_9A91_9X39_COMPACT_ASSAULT_RIFLE = new MongoId("644674a13d52156624001fbc"); + public static readonly MongoId ASSAULTCARBINE_KBP_VSK94_9X39_RIFLE = new MongoId("645e0c6b3b381ede770e1cc9"); + public static readonly MongoId ASSAULTCARBINE_MOLOT_ARMS_SIMONOV_OPSKS_762X39_CARBINE = new MongoId("587e02ff24597743df3deaeb"); + public static readonly MongoId ASSAULTCARBINE_MOLOT_ARMS_VPO101_VEPRHUNTER_762X51_CARBINE = new MongoId("5c501a4d2e221602b412b540"); + public static readonly MongoId ASSAULTCARBINE_SR3M_9X39_COMPACT_ASSAULT_RIFLE = new MongoId("651450ce0e00edc794068371"); + public static readonly MongoId ASSAULTCARBINE_TOKAREV_AVT40_762X54R_AUTOMATIC_RIFLE = new MongoId("6410733d5dd49d77bd07847e"); + public static readonly MongoId ASSAULTCARBINE_TOKAREV_SVT40_762X54R_RIFLE = new MongoId("643ea5b23db6f9f57107d9fd"); + public static readonly MongoId ASSAULTCARBINE_TOZ_SIMONOV_SKS_762X39_CARBINE = new MongoId("574d967124597745970e7c94"); + public static readonly MongoId ASSAULTRIFLE_ADAR_215_556X45_CARBINE = new MongoId("5c07c60e0db834002330051f"); + public static readonly MongoId ASSAULTRIFLE_AKLYS_DEFENSE_VELOCIRAPTOR_300_BLACKOUT_ASSAULT_RIFLE = new MongoId( + "674d6121c09f69dfb201a888" + ); + public static readonly MongoId ASSAULTRIFLE_ASH12_127X55_ASSAULT_RIFLE = new MongoId("5cadfbf7ae92152ac412eeef"); + public static readonly MongoId ASSAULTRIFLE_CMMG_MK47_MUTANT_762X39_ASSAULT_RIFLE = new MongoId("606587252535c57a13424cfd"); + public static readonly MongoId ASSAULTRIFLE_COLT_M4A1_556X45_ASSAULT_RIFLE = new MongoId("5447a9cd4bdc2dbd208b4567"); + public static readonly MongoId ASSAULTRIFLE_DESERT_TECH_MDR_556X45_ASSAULT_RIFLE = new MongoId("5c488a752e221602b412af63"); + public static readonly MongoId ASSAULTRIFLE_DESERT_TECH_MDR_762X51_ASSAULT_RIFLE = new MongoId("5dcbd56fdbd3d91b3e5468d5"); + public static readonly MongoId ASSAULTRIFLE_DS_ARMS_SA58_762X51_ASSAULT_RIFLE = new MongoId("5b0bbe4e5acfc40dc528a72d"); + public static readonly MongoId ASSAULTRIFLE_FN_SCARH_762X51_ASSAULT_RIFLE = new MongoId("6183afd850224f204c1da514"); + public static readonly MongoId ASSAULTRIFLE_FN_SCARH_762X51_ASSAULT_RIFLE_FDE = new MongoId("6165ac306ef05c2ce828ef74"); + public static readonly MongoId ASSAULTRIFLE_FN_SCARH_X17_762X51_ASSAULT_RIFLE = new MongoId("676176d362e0497044079f4c"); + public static readonly MongoId ASSAULTRIFLE_FN_SCARL_556X45_ASSAULT_RIFLE = new MongoId("6184055050224f204c1da540"); + public static readonly MongoId ASSAULTRIFLE_FN_SCARL_556X45_ASSAULT_RIFLE_FDE = new MongoId("618428466ef05c2ce828f218"); + public static readonly MongoId ASSAULTRIFLE_HK_416A5_556X45_ASSAULT_RIFLE = new MongoId("5bb2475ed4351e00853264e3"); + public static readonly MongoId ASSAULTRIFLE_HK_G36_556X45_ASSAULT_RIFLE = new MongoId("623063e994fc3f7b302a9696"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK101_556X45_ASSAULT_RIFLE = new MongoId("5ac66cb05acfc40198510a10"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK102_556X45_ASSAULT_RIFLE = new MongoId("5ac66d015acfc400180ae6e4"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK103_762X39_ASSAULT_RIFLE = new MongoId("5ac66d2e5acfc43b321d4b53"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK104_762X39_ASSAULT_RIFLE = new MongoId("5ac66d725acfc43b321d4b60"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK105_545X39_ASSAULT_RIFLE = new MongoId("5ac66d9b5acfc4001633997a"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK12_545X39_ASSAULT_RIFLE = new MongoId("6499849fc93611967b034949"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK74_545X39_ASSAULT_RIFLE = new MongoId("5bf3e03b0db834001d2c4a9c"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK74M_545X39_ASSAULT_RIFLE = new MongoId("5ac4cd105acfc40016339859"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AK74N_545X39_ASSAULT_RIFLE = new MongoId("5644bd2b4bdc2d3b4c8b4572"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKM_762X39_ASSAULT_RIFLE = new MongoId("59d6088586f774275f37482f"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKMN_762X39_ASSAULT_RIFLE = new MongoId("5a0ec13bfcdbcb00165aa685"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKMS_762X39_ASSAULT_RIFLE = new MongoId("59ff346386f77477562ff5e2"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKMSN_762X39_ASSAULT_RIFLE = new MongoId("5abcbc27d8ce8700182eceeb"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74_545X39_ASSAULT_RIFLE = new MongoId("5bf3e0490db83400196199af"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74N_545X39_ASSAULT_RIFLE = new MongoId("5ab8e9fcd8ce870019439434"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74U_545X39_ASSAULT_RIFLE = new MongoId("57dc2fa62459775949412633"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74UB_545X39_ASSAULT_RIFLE = new MongoId("5839a40f24597726f856b511"); + public static readonly MongoId ASSAULTRIFLE_KALASHNIKOV_AKS74UN_545X39_ASSAULT_RIFLE = new MongoId("583990e32459771419544dd2"); + public static readonly MongoId ASSAULTRIFLE_LONE_STAR_TX15_DML_556X45_CARBINE = new MongoId("5d43021ca4b9362eab4b5e25"); + public static readonly MongoId ASSAULTRIFLE_MASTER_HAND = new MongoId("5ae083b25acfc4001a5fc702"); + public static readonly MongoId ASSAULTRIFLE_MOLOT_ARMS_VPO136_VEPRKM_762X39_CARBINE = new MongoId("59e6152586f77473dc057aa1"); + public static readonly MongoId ASSAULTRIFLE_MOLOT_ARMS_VPO209_366_TKM_CARBINE = new MongoId("59e6687d86f77411d949b251"); + public static readonly MongoId ASSAULTRIFLE_RIFLE_DYNAMICS_RD704_762X39_ASSAULT_RIFLE = new MongoId("628a60ae6b1d481ff772e9c8"); + public static readonly MongoId ASSAULTRIFLE_SAG_AK545_545X39_CARBINE = new MongoId("628b5638ad252a16da6dd245"); + public static readonly MongoId ASSAULTRIFLE_SAG_AK545_SHORT_545X39_CARBINE = new MongoId("628b9c37a733087d0d7fe84b"); + public static readonly MongoId ASSAULTRIFLE_SIG_MCX_300_BLACKOUT_ASSAULT_RIFLE = new MongoId("5fbcc1d9016cce60e8341ab3"); + public static readonly MongoId ASSAULTRIFLE_SIG_MCXSPEAR_68X51_ASSAULT_RIFLE = new MongoId("65290f395ae2ae97b80fdf2d"); + public static readonly MongoId ASSAULTRIFLE_STEYR_AUG_A1_556X45_ASSAULT_RIFLE = new MongoId("62e7c4fba689e8c9c50dfc38"); + public static readonly MongoId ASSAULTRIFLE_STEYR_AUG_A3_556X45_ASSAULT_RIFLE = new MongoId("63171672192e68c5460cebc5"); + public static readonly MongoId ASSAULTRIFLE_STEYR_AUG_A3_556X45_ASSAULT_RIFLE_BLACK = new MongoId("6718817435e3cfd9550d2c27"); + public static readonly MongoId ASSAULTSCOPE_ELCAN_SPECTER_OS4X_ASSAULT_SCOPE = new MongoId("544a3f024bdc2d1d388b4568"); + public static readonly MongoId ASSAULTSCOPE_ELCAN_SPECTERDR_1X4X_SCOPE = new MongoId("57ac965c24597706be5f975c"); + public static readonly MongoId ASSAULTSCOPE_ELCAN_SPECTERDR_1X4X_SCOPE_FDE = new MongoId("57aca93d2459771f2c7e26db"); + public static readonly MongoId ASSAULTSCOPE_HK_G36_HENSOLDT_HKV_3X_CARRY_HANDLE = new MongoId("622b4d7df9cfc87d675d2ded"); + public static readonly MongoId ASSAULTSCOPE_HK_G36_HENSOLDT_HKV_ZF_15X_CARRY_HANDLE = new MongoId("622b4f54dc8dcc0ba8742f85"); + public static readonly MongoId ASSAULTSCOPE_KIBA_ARMS_SHORT_PRISM_25X_SCOPE = new MongoId("5c1cdd512e22161b267d91ae"); + public static readonly MongoId ASSAULTSCOPE_LEUPOLD_MARK_4_HAMR_4X24_DELTAPOINT_HYBRID_ASSAULT_SCOPE = new MongoId( + "544a3a774bdc2d3a388b4567" + ); + public static readonly MongoId ASSAULTSCOPE_MONSTRUM_TACTICAL_COMPACT_PRISM_SCOPE_2X32 = new MongoId("5d2dc3e548f035404a1a4798"); + public static readonly MongoId ASSAULTSCOPE_SIG_SAUER_BRAVO4_4X30_SCOPE = new MongoId("57adff4f24597737f373b6e6"); + public static readonly MongoId ASSAULTSCOPE_STEYR_AUG_A1_STG77_15X_OPTIC_SIGHT = new MongoId("62ea7c793043d74a0306e19f"); + public static readonly MongoId ASSAULTSCOPE_STEYR_AUG_A3_M1_15X_OPTIC_SIGHT = new MongoId("62ebd290c427473eff0baafb"); + public static readonly MongoId ASSAULTSCOPE_SWAMPFOX_TRIHAWK_PRISM_SCOPE_3X30 = new MongoId("626bb8532c923541184624b4"); + public static readonly MongoId ASSAULTSCOPE_TRIJICON_ACOG_TA01NSN_4X32_SCOPE_BLACK = new MongoId("5c05293e0db83400232fff80"); + public static readonly MongoId ASSAULTSCOPE_TRIJICON_ACOG_TA01NSN_4X32_SCOPE_TAN = new MongoId("5c052a900db834001a66acbd"); + public static readonly MongoId ASSAULTSCOPE_TRIJICON_ACOG_TA11D_35X35_SCOPE = new MongoId("59db7e1086f77448be30ddf3"); + public static readonly MongoId ASSAULTSCOPE_VALDAY_PS320_16X_SCOPE = new MongoId("5c0517910db83400232ffee5"); + public static readonly MongoId AUXILIARYMOD_ARMASIGHT_VULCAN_MG_SCOPE_EYECUP = new MongoId("5b3cbc235acfc4001863ac44"); + public static readonly MongoId AUXILIARYMOD_ARMASIGHT_ZEUSPRO_SCOPE_EYECUP = new MongoId("63fc4533b10b17385349b565"); + public static readonly MongoId AUXILIARYMOD_AXION_KOBRA_SIGHT_SHADE = new MongoId("591c4e1186f77410354b316e"); + public static readonly MongoId AUXILIARYMOD_CYCLONE_SHAKHIN_SCOPE_EYECUP = new MongoId("67641bec4ad898aa100c1079"); + public static readonly MongoId AUXILIARYMOD_FAB_DEFENSE_PROTECTION_CAP_FOR_AGR870 = new MongoId("5bfe86bd0db83400232fe959"); + public static readonly MongoId AUXILIARYMOD_GLOCK_ZEV_TECH_SIGHT_MOUNT_CAP = new MongoId("5a71e1868dc32e00094b97f3"); + public static readonly MongoId AUXILIARYMOD_HK_G36_HAND_STOP = new MongoId("622f16a1a5958f63c67f1737"); + public static readonly MongoId AUXILIARYMOD_HK_USP_HAMMER = new MongoId("6193d3be7c6c7b169525f0da"); + public static readonly MongoId AUXILIARYMOD_HK_USP_SLIDE_LOCK = new MongoId("6193d5d4f8ee7e52e4210a1b"); + public static readonly MongoId AUXILIARYMOD_HK_USP_TRIGGER = new MongoId("6193d3cded0429009f543e6a"); + public static readonly MongoId AUXILIARYMOD_KAC_URX_331_LONG_PANEL = new MongoId("5d123b70d7ad1a0ee35e0754"); + public static readonly MongoId AUXILIARYMOD_KAC_URX_331_LONG_PANEL_FDE = new MongoId("5d124c0ed7ad1a10d168dd9b"); + public static readonly MongoId AUXILIARYMOD_KAC_URX_331_SHORT_PANEL = new MongoId("5d123a3cd7ad1a004e476058"); + public static readonly MongoId AUXILIARYMOD_KAC_URX_331_SHORT_PANEL_FDE = new MongoId("5d124c01d7ad1a115c7d59fb"); + public static readonly MongoId AUXILIARYMOD_KAC_URX_331_STOPPER_PANEL = new MongoId("5d123b7dd7ad1a004f01b262"); + public static readonly MongoId AUXILIARYMOD_KAC_URX_331_STOPPER_PANEL_FDE = new MongoId("5d124c1ad7ad1a12227c53a7"); + public static readonly MongoId AUXILIARYMOD_KMZ_1P59_SCOPE_EYECUP = new MongoId("5d0b5cd3d7ad1a3fe32ad263"); + public static readonly MongoId AUXILIARYMOD_KPSR2_SIGHT_SHADE = new MongoId("62ff9faffe938a24c90c10df"); + public static readonly MongoId AUXILIARYMOD_M1911A1_CASPIAN_ARMS_TRIK_TRIGGER = new MongoId("5ef32e4d1c1fd62aea6a150d"); + public static readonly MongoId AUXILIARYMOD_M1911A1_HAMMER = new MongoId("5e81c550763d9f754677befd"); + public static readonly MongoId AUXILIARYMOD_M1911A1_SLIDE_STOP = new MongoId("5e81c539cb2b95385c177553"); + public static readonly MongoId AUXILIARYMOD_M1911A1_STI_HEX_HAMMER = new MongoId("5ef35f46382a846010715a96"); + public static readonly MongoId AUXILIARYMOD_M1911A1_TRIGGER = new MongoId("5e81c6a2ac2bb513793cdc7f"); + public static readonly MongoId AUXILIARYMOD_M1911A1_WILSON_EXTENDED_SLIDE_STOP = new MongoId("5ef3553c43cb350a955a7ccb"); + public static readonly MongoId AUXILIARYMOD_M1911A1_WILSON_RETRO_COMMANDER_HAMMER = new MongoId("5ef35d2ac64c5d0dfc0571b0"); + public static readonly MongoId AUXILIARYMOD_M1911A1_WILSON_ULTRALIGHT_SKELETONIZED_HAMMER = new MongoId("5ef35bc243cb350a955a7ccd"); + public static readonly MongoId AUXILIARYMOD_M45A1_HAMMER = new MongoId("5f3e76d86cda304dcc634054"); + public static readonly MongoId AUXILIARYMOD_M45A1_SLIDE_LOCK = new MongoId("5f3e777688ca2d00ad199d25"); + public static readonly MongoId AUXILIARYMOD_M45A1_TRIGGER = new MongoId("5f3e772a670e2a7b01739a52"); + public static readonly MongoId AUXILIARYMOD_MP155_ULTIMA_PISTOL_GRIP_RUBBER_PAD = new MongoId("60785c0d232e5a31c233d51c"); + public static readonly MongoId AUXILIARYMOD_MP155_ULTIMA_UNDERBARREL_MOUNT = new MongoId("606f26752535c57a13424d22"); + public static readonly MongoId AUXILIARYMOD_NPZ_1P78_SCOPE_EYECUP = new MongoId("618a760e526131765025aae3"); + public static readonly MongoId AUXILIARYMOD_NPZ_USP1_SCOPE_EYECUP = new MongoId("5cf639aad7f00c065703d455"); + public static readonly MongoId AUXILIARYMOD_NSPUM_SCOPE_EYECUP = new MongoId("5ba36f85d4351e0085325c81"); + public static readonly MongoId AUXILIARYMOD_PSO_SCOPE_EYECUP = new MongoId("57f3a5ae2459772b0e0bf19e"); + public static readonly MongoId AUXILIARYMOD_SAKO_TRG_M10_REAR_HOOK = new MongoId("673ddbb567c759b3c90e5f76"); + public static readonly MongoId AUXILIARYMOD_STM9_MAGWELL = new MongoId("602f85fd9b513876d4338d9c"); + public static readonly MongoId AUXILIARYMOD_STM9_MAGWELL_GREY = new MongoId("60338ff388382f4fab3fd2c8"); + public static readonly MongoId AUXILIARYMOD_SV98_ANTIHEAT_RIBBON = new MongoId("56083eab4bdc2d26448b456a"); + public static readonly MongoId AUXILIARYMOD_SV98_SOUND_SUPPRESSOR_HEAT_SHIELD = new MongoId("5c4eecde2e221602b3140418"); + public static readonly MongoId AUXILIARYMOD_TRIJICON_REAPIR_SCOPE_EYECUP = new MongoId("5a1eacb3fcdbcb09800872be"); public static readonly MongoId AUXILIARYMOD_TROPHY = new MongoId("5ae089fb5acfc408fb13989b"); - public static readonly MongoId BACKPACK_3V_GEAR_PARATUS_3DAY_OPERATORS_TACTICAL_BACKPACK_FOLIAGE_GREY = - new MongoId("5c0e805e86f774683f3dd637"); - public static readonly MongoId BACKPACK_511_TACTICAL_RUSH_100_BACKPACK_BLACK = new MongoId( - "67458730df3c1da90b0b052b" + public static readonly MongoId BACKPACK_3V_GEAR_PARATUS_3DAY_OPERATORS_TACTICAL_BACKPACK_FOLIAGE_GREY = new MongoId( + "5c0e805e86f774683f3dd637" ); - public static readonly MongoId BACKPACK_6SH118_RAID_BACKPACK_EMR = new MongoId( - "5df8a4d786f77412672a1e3b" - ); - public static readonly MongoId BACKPACK_ANA_TACTICAL_BETA_2_BATTLE_BACKPACK_OLIVE_DRAB = - new MongoId("5b44c6ae86f7742d1627baea"); - public static readonly MongoId BACKPACK_CAMELBAK_TRIZIP_ASSAULT_BACKPACK_FOLIAGE = new MongoId( - "545cdae64bdc2d39198b4568" - ); - public static readonly MongoId BACKPACK_CAMELBAK_TRIZIP_ASSAULT_BACKPACK_MULTICAM = new MongoId( - "66b5f22b78bbc0200425f904" - ); - public static readonly MongoId BACKPACK_DIRECT_ACTION_DRAGON_EGG_MARK_II_BACKPACK_BLACK = - new MongoId("656f198fb27298d6fd005466"); + public static readonly MongoId BACKPACK_511_TACTICAL_RUSH_100_BACKPACK_BLACK = new MongoId("67458730df3c1da90b0b052b"); + public static readonly MongoId BACKPACK_6SH118_RAID_BACKPACK_EMR = new MongoId("5df8a4d786f77412672a1e3b"); + public static readonly MongoId BACKPACK_ANA_TACTICAL_BETA_2_BATTLE_BACKPACK_OLIVE_DRAB = new MongoId("5b44c6ae86f7742d1627baea"); + public static readonly MongoId BACKPACK_CAMELBAK_TRIZIP_ASSAULT_BACKPACK_FOLIAGE = new MongoId("545cdae64bdc2d39198b4568"); + public static readonly MongoId BACKPACK_CAMELBAK_TRIZIP_ASSAULT_BACKPACK_MULTICAM = new MongoId("66b5f22b78bbc0200425f904"); + public static readonly MongoId BACKPACK_DIRECT_ACTION_DRAGON_EGG_MARK_II_BACKPACK_BLACK = new MongoId("656f198fb27298d6fd005466"); public static readonly MongoId BACKPACK_DUFFLE_BAG = new MongoId("56e33634d2720bd8058b456b"); - public static readonly MongoId BACKPACK_EBERLESTOCK_F4_TERMINATOR_LOAD_BEARING_BACKPACK_TIGER_STRIPE = - new MongoId("5f5e46b96bdad616ad46d613"); - public static readonly MongoId BACKPACK_EBERLESTOCK_F5_SWITCHBLADE_BACKPACK_DRY_EARTH = - new MongoId("5f5e467b0bc58666c37e7821"); - public static readonly MongoId BACKPACK_EBERLESTOCK_G2_GUNSLINGER_II_BACKPACK_DRY_EARTH = - new MongoId("6034d2d697633951dc245ea6"); - public static readonly MongoId BACKPACK_FLYYE_MBSS_BACKPACK_UCP = new MongoId( - "544a5cde4bdc2d39388b456b" + public static readonly MongoId BACKPACK_EBERLESTOCK_F4_TERMINATOR_LOAD_BEARING_BACKPACK_TIGER_STRIPE = new MongoId( + "5f5e46b96bdad616ad46d613" ); - public static readonly MongoId BACKPACK_GRUPPA_99_T20_BACKPACK_MULTICAM = new MongoId( - "619cf0335771dd3c390269ae" - ); - public static readonly MongoId BACKPACK_GRUPPA_99_T20_BACKPACK_UMBER_BROWN = new MongoId( - "618bb76513f5097c8d5aa2d5" - ); - public static readonly MongoId BACKPACK_GRUPPA_99_T30_BACKPACK_BLACK = new MongoId( - "628e1ffc83ec92260c0f437f" - ); - public static readonly MongoId BACKPACK_GRUPPA_99_T30_BACKPACK_MULTICAM = new MongoId( - "62a1b7fbc30cfa1d366af586" - ); - public static readonly MongoId BACKPACK_HAZARD_4_DRAWBRIDGE_BACKPACK_COYOTE_TAN = new MongoId( - "60a272cc93ef783291411d8e" - ); - public static readonly MongoId BACKPACK_HAZARD_4_PILLBOX_BACKPACK_BLACK = new MongoId( - "60a2828e8689911a226117f9" - ); - public static readonly MongoId BACKPACK_HAZARD_4_TAKEDOWN_SLING_BACKPACK_BLACK = new MongoId( - "6034d103ca006d2dca39b3f0" - ); - public static readonly MongoId BACKPACK_HAZARD_4_TAKEDOWN_SLING_BACKPACK_MULTICAM = new MongoId( - "6038d614d10cbf667352dd44" - ); - public static readonly MongoId BACKPACK_LBT1476A_3DAY_PACK_MULTICAM_ALPINE = new MongoId( - "67458794e21e5d724e066976" - ); - public static readonly MongoId BACKPACK_LBT1476A_3DAY_PACK_WOODLAND = new MongoId( - "618cfae774bb2d036a049e7c" - ); - public static readonly MongoId BACKPACK_LBT2670_SLIM_FIELD_MED_PACK_BLACK = new MongoId( - "5e4abc6786f77406812bd572" - ); - public static readonly MongoId BACKPACK_LBT8005A_DAY_PACK_BACKPACK_MULTICAM_BLACK = new MongoId( - "5e9dcf5986f7746c417435b3" - ); - public static readonly MongoId BACKPACK_LOLKEK_3F_TRANSFER_TOURIST = new MongoId( - "5f5e45cc5021ce62144be7aa" - ); - public static readonly MongoId BACKPACK_MYSTERY_RANCH_BLACKJACK_50_BACKPACK_MULTICAM = - new MongoId("5c0e774286f77468413cc5b2"); - public static readonly MongoId BACKPACK_MYSTERY_RANCH_NICE_COMM_3_BVS_FRAME_SYSTEM_COYOTE = - new MongoId("628bc7fb408e2b2e9c0801b1"); - public static readonly MongoId BACKPACK_MYSTERY_RANCH_SATL_BRIDGER_ASSAULT_PACK_FOLIAGE = - new MongoId("656e0436d44a1bb4220303a0"); - public static readonly MongoId BACKPACK_MYSTERY_RANCH_TERRAFRAME_BACKPACK_CHRISTMAS_EDITION = - new MongoId("674da9cf0cb4bcde7103c07b"); - public static readonly MongoId BACKPACK_MYSTERY_RANCH_TERRAFRAME_BACKPACK_OLIVE_DRAB = - new MongoId("674da107c512807d1a0e7436"); - public static readonly MongoId BACKPACK_MYSTERY_RANCH_TERRAPLANE = new MongoId( - "56e294cdd2720b603a8b4575" - ); - public static readonly MongoId BACKPACK_OAKLEY_MECHANISM_HEAVY_DUTY_BACKPACK_BLACK = - new MongoId("5d5d940f86f7742797262046"); + public static readonly MongoId BACKPACK_EBERLESTOCK_F5_SWITCHBLADE_BACKPACK_DRY_EARTH = new MongoId("5f5e467b0bc58666c37e7821"); + public static readonly MongoId BACKPACK_EBERLESTOCK_G2_GUNSLINGER_II_BACKPACK_DRY_EARTH = new MongoId("6034d2d697633951dc245ea6"); + public static readonly MongoId BACKPACK_FLYYE_MBSS_BACKPACK_UCP = new MongoId("544a5cde4bdc2d39388b456b"); + public static readonly MongoId BACKPACK_GRUPPA_99_T20_BACKPACK_MULTICAM = new MongoId("619cf0335771dd3c390269ae"); + public static readonly MongoId BACKPACK_GRUPPA_99_T20_BACKPACK_UMBER_BROWN = new MongoId("618bb76513f5097c8d5aa2d5"); + public static readonly MongoId BACKPACK_GRUPPA_99_T30_BACKPACK_BLACK = new MongoId("628e1ffc83ec92260c0f437f"); + public static readonly MongoId BACKPACK_GRUPPA_99_T30_BACKPACK_MULTICAM = new MongoId("62a1b7fbc30cfa1d366af586"); + public static readonly MongoId BACKPACK_HAZARD_4_DRAWBRIDGE_BACKPACK_COYOTE_TAN = new MongoId("60a272cc93ef783291411d8e"); + public static readonly MongoId BACKPACK_HAZARD_4_PILLBOX_BACKPACK_BLACK = new MongoId("60a2828e8689911a226117f9"); + public static readonly MongoId BACKPACK_HAZARD_4_TAKEDOWN_SLING_BACKPACK_BLACK = new MongoId("6034d103ca006d2dca39b3f0"); + public static readonly MongoId BACKPACK_HAZARD_4_TAKEDOWN_SLING_BACKPACK_MULTICAM = new MongoId("6038d614d10cbf667352dd44"); + public static readonly MongoId BACKPACK_LBT1476A_3DAY_PACK_MULTICAM_ALPINE = new MongoId("67458794e21e5d724e066976"); + public static readonly MongoId BACKPACK_LBT1476A_3DAY_PACK_WOODLAND = new MongoId("618cfae774bb2d036a049e7c"); + public static readonly MongoId BACKPACK_LBT2670_SLIM_FIELD_MED_PACK_BLACK = new MongoId("5e4abc6786f77406812bd572"); + public static readonly MongoId BACKPACK_LBT8005A_DAY_PACK_BACKPACK_MULTICAM_BLACK = new MongoId("5e9dcf5986f7746c417435b3"); + public static readonly MongoId BACKPACK_LOLKEK_3F_TRANSFER_TOURIST = new MongoId("5f5e45cc5021ce62144be7aa"); + public static readonly MongoId BACKPACK_MYSTERY_RANCH_BLACKJACK_50_BACKPACK_MULTICAM = new MongoId("5c0e774286f77468413cc5b2"); + public static readonly MongoId BACKPACK_MYSTERY_RANCH_NICE_COMM_3_BVS_FRAME_SYSTEM_COYOTE = new MongoId("628bc7fb408e2b2e9c0801b1"); + public static readonly MongoId BACKPACK_MYSTERY_RANCH_SATL_BRIDGER_ASSAULT_PACK_FOLIAGE = new MongoId("656e0436d44a1bb4220303a0"); + public static readonly MongoId BACKPACK_MYSTERY_RANCH_TERRAFRAME_BACKPACK_CHRISTMAS_EDITION = new MongoId("674da9cf0cb4bcde7103c07b"); + public static readonly MongoId BACKPACK_MYSTERY_RANCH_TERRAFRAME_BACKPACK_OLIVE_DRAB = new MongoId("674da107c512807d1a0e7436"); + public static readonly MongoId BACKPACK_MYSTERY_RANCH_TERRAPLANE = new MongoId("56e294cdd2720b603a8b4575"); + public static readonly MongoId BACKPACK_OAKLEY_MECHANISM_HEAVY_DUTY_BACKPACK_BLACK = new MongoId("5d5d940f86f7742797262046"); public static readonly MongoId BACKPACK_PARTISANS_BAG = new MongoId("66a9f98f3bd5a41b162030f4"); - public static readonly MongoId BACKPACK_PILGRIM_TOURIST = new MongoId( - "59e763f286f7742ee57895da" - ); + public static readonly MongoId BACKPACK_PILGRIM_TOURIST = new MongoId("59e763f286f7742ee57895da"); public static readonly MongoId BACKPACK_SANITARS_BAG = new MongoId("5e997f0b86f7741ac73993e2"); public static readonly MongoId BACKPACK_SANTAS_BAG = new MongoId("61b9e1aaef9a1b5d6a79899a"); public static readonly MongoId BACKPACK_SCAV = new MongoId("56e335e4d2720b6c058b456d"); - public static readonly MongoId BACKPACK_SSO_ATTACK_2_RAID_BACKPACK_KHAKI = new MongoId( - "5ab8ebf186f7742d8b372e80" - ); - public static readonly MongoId BACKPACK_TACTICAL_SLING_BAG_KHAKI = new MongoId( - "5ab8f04f86f774585f4237d8" - ); - public static readonly MongoId BACKPACK_TASMANIAN_TIGER_TROOPER_35_BACKPACK_KHAKI = new MongoId( - "639346cc1c8f182ad90c8972" - ); - public static readonly MongoId BACKPACK_TEHINKOM_RKPT25_PATROL_BACKPACK_EMR = new MongoId( - "656ddcf0f02d7bcea90bf395" - ); - public static readonly MongoId BACKPACK_TRANSFORMER_BAG = new MongoId( - "56e33680d2720be2748b4576" - ); - public static readonly MongoId BACKPACK_VERTX_READY_PACK_BACKPACK_RED = new MongoId( - "66b5f247af44ca0014063c02" - ); + public static readonly MongoId BACKPACK_SSO_ATTACK_2_RAID_BACKPACK_KHAKI = new MongoId("5ab8ebf186f7742d8b372e80"); + public static readonly MongoId BACKPACK_TACTICAL_SLING_BAG_KHAKI = new MongoId("5ab8f04f86f774585f4237d8"); + public static readonly MongoId BACKPACK_TASMANIAN_TIGER_TROOPER_35_BACKPACK_KHAKI = new MongoId("639346cc1c8f182ad90c8972"); + public static readonly MongoId BACKPACK_TEHINKOM_RKPT25_PATROL_BACKPACK_EMR = new MongoId("656ddcf0f02d7bcea90bf395"); + public static readonly MongoId BACKPACK_TRANSFORMER_BAG = new MongoId("56e33680d2720be2748b4576"); + public static readonly MongoId BACKPACK_VERTX_READY_PACK_BACKPACK_RED = new MongoId("66b5f247af44ca0014063c02"); public static readonly MongoId BACKPACK_VKBO_ARMY_BAG = new MongoId("5ab8ee7786f7742d8f33f0b9"); - public static readonly MongoId BACKPACK_WARTECH_BERKUT_BB102_BACKPACK_ATACS_FG = new MongoId( - "5ca20d5986f774331e7c9602" - ); + public static readonly MongoId BACKPACK_WARTECH_BERKUT_BB102_BACKPACK_ATACS_FG = new MongoId("5ca20d5986f774331e7c9602"); public static readonly MongoId BARREL_9A91_9X39 = new MongoId("645122f6d4928d46d30be3ff"); public static readonly MongoId BARREL_AA12_12GA_330MM = new MongoId("66ffac601f7492c901027bbb"); - public static readonly MongoId BARREL_AA12_12GA_342MM_THREADED = new MongoId( - "670fd03dc424cf758f006946" - ); - public static readonly MongoId BARREL_AA12_12GA_417MM_THREADED = new MongoId( - "670fd0a8d8d4eae4790c8187" - ); + public static readonly MongoId BARREL_AA12_12GA_342MM_THREADED = new MongoId("670fd03dc424cf758f006946"); + public static readonly MongoId BARREL_AA12_12GA_417MM_THREADED = new MongoId("670fd0a8d8d4eae4790c8187"); public static readonly MongoId BARREL_AA12_12GA_457MM = new MongoId("670fced86a7e274b1a0964e8"); - public static readonly MongoId BARREL_AI_AXMC_338_LM_28_INCH = new MongoId( - "628121434fa03b6b6c35dc6a" - ); - public static readonly MongoId BARREL_AK50_50_BMG_24_INCH = new MongoId( - "67d4178bffb910d21f04720a" - ); - public static readonly MongoId BARREL_AR10_762X51_18_INCH = new MongoId( - "5a34f7f1c4a2826c6e06d75d" - ); - public static readonly MongoId BARREL_AR10_762X51_22_INCH = new MongoId( - "5a34fae7c4a2826c6e06d760" - ); - public static readonly MongoId BARREL_AR15_556X45_103_INCH = new MongoId( - "55d35ee94bdc2d61338b4568" - ); - public static readonly MongoId BARREL_AR15_556X45_145_INCH = new MongoId( - "55d3632e4bdc2d972f8b4569" - ); - public static readonly MongoId BARREL_AR15_556X45_18_INCH = new MongoId( - "5d440b93a4b9364276578d4b" - ); - public static readonly MongoId BARREL_AR15_556X45_20_INCH = new MongoId( - "5d440b9fa4b93601354d480c" - ); - public static readonly MongoId BARREL_AR15_556X45_BALLISTIC_ADVANTAGE_HANSON_CARBINE_PRO_137_INCH = - new MongoId("63d3ce0446bd475bcb50f55f"); - public static readonly MongoId BARREL_AR15_556X45_BALLISTIC_ADVANTAGE_HANSON_CARBINE_PRO_16_INCH = - new MongoId("63d3d44a2a49307baf09386d"); - public static readonly MongoId BARREL_AR15_556X45_MOLOT_ARMS_16_INCH = new MongoId( - "5c0e2f94d174af029f650d56" - ); - public static readonly MongoId BARREL_BENELLI_M3_SUPER_90_12GA_500MM = new MongoId( - "6259c2c1d714855d182bad85" - ); - public static readonly MongoId BARREL_DESERT_EAGLE_L5_357_127MM = new MongoId( - "669fa4c61bd4416eaa09b3ca" - ); - public static readonly MongoId BARREL_DESERT_EAGLE_L5_50_AE_127MM = new MongoId( - "669fa4ba1bd4416eaa09b3c6" - ); - public static readonly MongoId BARREL_DESERT_EAGLE_L6_50_AE_152MM = new MongoId( - "669fa47da0bab4e8510d9526" - ); - public static readonly MongoId BARREL_DESERT_EAGLE_L6_50_AE_152MM_BARREL_WTS = new MongoId( - "669fa48fa0bab4e8510d952a" - ); - public static readonly MongoId BARREL_DESERT_EAGLE_MK_XIX_50_AE_152MM = new MongoId( - "668fe5f62a0f85eea407cc18" - ); - public static readonly MongoId BARREL_DO_NOT_USEAI_AXMC_762X51_20_INCH = new MongoId( - "628121651d5df4475f46a33c" - ); - public static readonly MongoId BARREL_DO_NOT_USEAI_AXMC_762X51_24_INCH = new MongoId( - "6281215b4fa03b6b6c35dc6c" - ); - public static readonly MongoId BARREL_DO_NOT_USEAI_AXMC_762X51_26_INCH = new MongoId( - "6281214c1d5df4475f46a33a" - ); - public static readonly MongoId BARREL_DVL10_762X51_500MM_SUPPRESSED = new MongoId( - "5888945a2459774bf43ba385" - ); - public static readonly MongoId BARREL_DVL10_M2_762X51_660MM = new MongoId( - "5888956924597752983e182d" - ); - public static readonly MongoId BARREL_FN_FIVESEVEN_57X28_120MM = new MongoId( - "5d3eb5b6a4b9361eab311902" - ); - public static readonly MongoId BARREL_FN_FIVESEVEN_57X28_120MM_THREADED = new MongoId( - "5d3eb59ea4b9361c284bb4b2" - ); - public static readonly MongoId BARREL_FN_P90_57X28_105_INCH = new MongoId( - "5cc701aae4a949000e1ea45c" - ); - public static readonly MongoId BARREL_FN_P90_57X28_16_INCH = new MongoId( - "5cc701d7e4a94900100ac4e7" - ); - public static readonly MongoId BARREL_FN_SCARH_762X51_13_INCH = new MongoId( - "618168b350224f204c1da4d8" - ); - public static readonly MongoId BARREL_FN_SCARH_762X51_16_INCH = new MongoId( - "6183b0711cb55961fa0fdcad" - ); - public static readonly MongoId BARREL_FN_SCARH_762X51_20_INCH = new MongoId( - "6183b084a112697a4b3a6e6c" - ); - public static readonly MongoId BARREL_FN_SCARL_556X45_10_INCH = new MongoId( - "6183fc15d3a39d50044c13e9" - ); - public static readonly MongoId BARREL_FN_SCARL_556X45_14_INCH = new MongoId( - "6183fd911cb55961fa0fdce9" - ); - public static readonly MongoId BARREL_FN_SCARL_556X45_18_INCH = new MongoId( - "6183fd9e8004cc50514c358f" - ); - public static readonly MongoId BARREL_GLOCK_17_9X19_114MM = new MongoId( - "5a6b5f868dc32e000a311389" - ); - public static readonly MongoId BARREL_GLOCK_17_9X19_114MM_COMPENSATED = new MongoId( - "5a6b60158dc32e000a31138b" - ); - public static readonly MongoId BARREL_GLOCK_18C_9X19_114MM_COMPENSATED = new MongoId( - "5b1fa9ea5acfc40018633c0a" - ); - public static readonly MongoId BARREL_GLOCK_19X_9X19_102MM = new MongoId( - "630764fea987397c0816d219" - ); - public static readonly MongoId BARREL_GLOCK_9X19_DOUBLE_DIAMOND_114MM_THREADED = new MongoId( - "5a6b5e468dc32e001207faf5" - ); - public static readonly MongoId BARREL_GLOCK_9X19_LONE_WOLF_ALPHAWOLF_114MM_THREADED = - new MongoId("5a6b5b8a8dc32e001207faf3"); - public static readonly MongoId BARREL_GLOCK_9X19_SAI_114MM_THREADED = new MongoId( - "5a6b5ed88dc32e000c52ec86" - ); - public static readonly MongoId BARREL_HK_416_556X45_106_INCH = new MongoId( - "5c6d85e02e22165df16b81f4" - ); - public static readonly MongoId BARREL_HK_416_556X45_11_INCH = new MongoId( - "5bb20d92d4351e00853263eb" - ); - public static readonly MongoId BARREL_HK_416_556X45_145_INCH_BARREL_WITH_FLIPUP_FRONT_SIGHT = - new MongoId("5bb20d9cd4351e00334c9d8a"); - public static readonly MongoId BARREL_HK_416_556X45_165_INCH_BARREL_WITH_FLIPUP_FRONT_SIGHT = - new MongoId("5bb20da5d4351e0035629dbf"); - public static readonly MongoId BARREL_HK_416_556X45_20_INCH_BARREL_WITH_FLIPUP_FRONT_SIGHT = - new MongoId("5bb20dadd4351e00367faeff"); - public static readonly MongoId BARREL_HK_G36_556X45_228MM = new MongoId( - "622b379bf9cfc87d675d2de5" - ); - public static readonly MongoId BARREL_HK_G36_556X45_318MM = new MongoId( - "622b3858034a3e17ad0b81f5" - ); - public static readonly MongoId BARREL_HK_G36_556X45_480MM = new MongoId( - "622b38c56762c718e457e246" - ); - public static readonly MongoId BARREL_HK_UMP_45_ACP_8_INCH = new MongoId( - "5fc3e4a27283c4046c5814ab" - ); - public static readonly MongoId BARREL_HK_UMP_45_ACP_8_INCH_THREADED = new MongoId( - "6130c3dffaa1272e43151c7d" - ); - public static readonly MongoId BARREL_HK_USP_45_ACP_112MM = new MongoId( - "6194ef39de3cdf1d2614a768" - ); - public static readonly MongoId BARREL_HK_USP_ELITE_45_ACP_153MM = new MongoId( - "6194f017ed0429009f543eaa" - ); - public static readonly MongoId BARREL_HK_USP_EXPERT_45_ACP_132MM = new MongoId( - "6194eff92d2c397d6600348b" - ); - public static readonly MongoId BARREL_HK_USP_MATCH_45_ACP_153MM = new MongoId( - "6194f02d9bb3d20b0946d2f0" - ); - public static readonly MongoId BARREL_HK_USP_TACTICAL_45_ACP_129MM_THREADED = new MongoId( - "6194efe07c6c7b169525f11b" - ); - public static readonly MongoId BARREL_HK417_762X51_165_INCH = new MongoId( - "61702be9faa1272e431522c3" - ); - public static readonly MongoId BARREL_KRISS_VECTOR_45_ACP_5_INCH = new MongoId( - "5fb65363d1409e5ca04b54f5" - ); - public static readonly MongoId BARREL_KRISS_VECTOR_45_ACP_6_INCH = new MongoId( - "5fb653962b1b027b1f50bd03" - ); - public static readonly MongoId BARREL_KRISS_VECTOR_9X19_5_INCH = new MongoId( - "5fbbc366ca32ed67276c1557" - ); - public static readonly MongoId BARREL_KRISS_VECTOR_9X19_6_INCH = new MongoId( - "5fbbc383d5cb881a7363194a" - ); - public static readonly MongoId BARREL_KS23_23X75_510MM = new MongoId( - "5e848d1c264f7c180b5e35a9" - ); - public static readonly MongoId BARREL_KS23_23X75_700MM = new MongoId( - "5e848d2eea0a7c419c2f9bfd" - ); - public static readonly MongoId BARREL_M1911A1_45_ACP_127MM = new MongoId( - "5e81c519cb2b95385c177551" - ); - public static readonly MongoId BARREL_M1911A1_45_ACP_141MM_THREADED = new MongoId( - "5f3e77f59103d430b93f94c1" - ); - public static readonly MongoId BARREL_M1911A1_45_ACP_NATIONAL_MATCH_127MM = new MongoId( - "5f3e7801153b8571434a924c" - ); - public static readonly MongoId BARREL_M1A_762X51_16_INCH = new MongoId( - "5aaf9d53e5b5b00015042a52" - ); - public static readonly MongoId BARREL_M1A_762X51_22_INCH = new MongoId( - "5addbac75acfc400194dbc56" - ); - public static readonly MongoId BARREL_M60E3_762X51_584MM = new MongoId( - "6601279cc752a02bbe05e692" - ); - public static readonly MongoId BARREL_M60E4_762X51_458MM = new MongoId( - "660126f7c752a02bbe05e688" - ); - public static readonly MongoId BARREL_M60E4_762X51_475MM_HEAVY = new MongoId( - "66012788c752a02bbe05e68e" - ); - public static readonly MongoId BARREL_M60E6_762X51_458MM = new MongoId( - "66225d88a1c7e3b81600c76f" - ); - public static readonly MongoId BARREL_M700_762X51_20_INCH_STAINLESS_STEEL_THREADED = - new MongoId("5d2703038abbc3105103d94c"); - public static readonly MongoId BARREL_M700_762X51_20_INCH_THREADED = new MongoId( - "5bfebc320db8340019668d79" - ); - public static readonly MongoId BARREL_M700_762X51_26_INCH = new MongoId( - "5bfebc250db834001a6694e1" - ); - public static readonly MongoId BARREL_M700_762X51_26_INCH_STAINLESS_STEEL = new MongoId( - "5d2702e88abbc31ed91efc44" - ); + public static readonly MongoId BARREL_AI_AXMC_338_LM_28_INCH = new MongoId("628121434fa03b6b6c35dc6a"); + public static readonly MongoId BARREL_AK50_50_BMG_24_INCH = new MongoId("67d4178bffb910d21f04720a"); + public static readonly MongoId BARREL_AR10_762X51_18_INCH = new MongoId("5a34f7f1c4a2826c6e06d75d"); + public static readonly MongoId BARREL_AR10_762X51_22_INCH = new MongoId("5a34fae7c4a2826c6e06d760"); + public static readonly MongoId BARREL_AR15_556X45_103_INCH = new MongoId("55d35ee94bdc2d61338b4568"); + public static readonly MongoId BARREL_AR15_556X45_145_INCH = new MongoId("55d3632e4bdc2d972f8b4569"); + public static readonly MongoId BARREL_AR15_556X45_18_INCH = new MongoId("5d440b93a4b9364276578d4b"); + public static readonly MongoId BARREL_AR15_556X45_20_INCH = new MongoId("5d440b9fa4b93601354d480c"); + public static readonly MongoId BARREL_AR15_556X45_BALLISTIC_ADVANTAGE_HANSON_CARBINE_PRO_137_INCH = new MongoId( + "63d3ce0446bd475bcb50f55f" + ); + public static readonly MongoId BARREL_AR15_556X45_BALLISTIC_ADVANTAGE_HANSON_CARBINE_PRO_16_INCH = new MongoId( + "63d3d44a2a49307baf09386d" + ); + public static readonly MongoId BARREL_AR15_556X45_MOLOT_ARMS_16_INCH = new MongoId("5c0e2f94d174af029f650d56"); + public static readonly MongoId BARREL_BENELLI_M3_SUPER_90_12GA_500MM = new MongoId("6259c2c1d714855d182bad85"); + public static readonly MongoId BARREL_DESERT_EAGLE_L5_357_127MM = new MongoId("669fa4c61bd4416eaa09b3ca"); + public static readonly MongoId BARREL_DESERT_EAGLE_L5_50_AE_127MM = new MongoId("669fa4ba1bd4416eaa09b3c6"); + public static readonly MongoId BARREL_DESERT_EAGLE_L6_50_AE_152MM = new MongoId("669fa47da0bab4e8510d9526"); + public static readonly MongoId BARREL_DESERT_EAGLE_L6_50_AE_152MM_BARREL_WTS = new MongoId("669fa48fa0bab4e8510d952a"); + public static readonly MongoId BARREL_DESERT_EAGLE_MK_XIX_50_AE_152MM = new MongoId("668fe5f62a0f85eea407cc18"); + public static readonly MongoId BARREL_DO_NOT_USEAI_AXMC_762X51_20_INCH = new MongoId("628121651d5df4475f46a33c"); + public static readonly MongoId BARREL_DO_NOT_USEAI_AXMC_762X51_24_INCH = new MongoId("6281215b4fa03b6b6c35dc6c"); + public static readonly MongoId BARREL_DO_NOT_USEAI_AXMC_762X51_26_INCH = new MongoId("6281214c1d5df4475f46a33a"); + public static readonly MongoId BARREL_DVL10_762X51_500MM_SUPPRESSED = new MongoId("5888945a2459774bf43ba385"); + public static readonly MongoId BARREL_DVL10_M2_762X51_660MM = new MongoId("5888956924597752983e182d"); + public static readonly MongoId BARREL_FN_FIVESEVEN_57X28_120MM = new MongoId("5d3eb5b6a4b9361eab311902"); + public static readonly MongoId BARREL_FN_FIVESEVEN_57X28_120MM_THREADED = new MongoId("5d3eb59ea4b9361c284bb4b2"); + public static readonly MongoId BARREL_FN_P90_57X28_105_INCH = new MongoId("5cc701aae4a949000e1ea45c"); + public static readonly MongoId BARREL_FN_P90_57X28_16_INCH = new MongoId("5cc701d7e4a94900100ac4e7"); + public static readonly MongoId BARREL_FN_SCARH_762X51_13_INCH = new MongoId("618168b350224f204c1da4d8"); + public static readonly MongoId BARREL_FN_SCARH_762X51_16_INCH = new MongoId("6183b0711cb55961fa0fdcad"); + public static readonly MongoId BARREL_FN_SCARH_762X51_20_INCH = new MongoId("6183b084a112697a4b3a6e6c"); + public static readonly MongoId BARREL_FN_SCARL_556X45_10_INCH = new MongoId("6183fc15d3a39d50044c13e9"); + public static readonly MongoId BARREL_FN_SCARL_556X45_14_INCH = new MongoId("6183fd911cb55961fa0fdce9"); + public static readonly MongoId BARREL_FN_SCARL_556X45_18_INCH = new MongoId("6183fd9e8004cc50514c358f"); + public static readonly MongoId BARREL_GLOCK_17_9X19_114MM = new MongoId("5a6b5f868dc32e000a311389"); + public static readonly MongoId BARREL_GLOCK_17_9X19_114MM_COMPENSATED = new MongoId("5a6b60158dc32e000a31138b"); + public static readonly MongoId BARREL_GLOCK_18C_9X19_114MM_COMPENSATED = new MongoId("5b1fa9ea5acfc40018633c0a"); + public static readonly MongoId BARREL_GLOCK_19X_9X19_102MM = new MongoId("630764fea987397c0816d219"); + public static readonly MongoId BARREL_GLOCK_9X19_DOUBLE_DIAMOND_114MM_THREADED = new MongoId("5a6b5e468dc32e001207faf5"); + public static readonly MongoId BARREL_GLOCK_9X19_LONE_WOLF_ALPHAWOLF_114MM_THREADED = new MongoId("5a6b5b8a8dc32e001207faf3"); + public static readonly MongoId BARREL_GLOCK_9X19_SAI_114MM_THREADED = new MongoId("5a6b5ed88dc32e000c52ec86"); + public static readonly MongoId BARREL_HK_416_556X45_106_INCH = new MongoId("5c6d85e02e22165df16b81f4"); + public static readonly MongoId BARREL_HK_416_556X45_11_INCH = new MongoId("5bb20d92d4351e00853263eb"); + public static readonly MongoId BARREL_HK_416_556X45_145_INCH_BARREL_WITH_FLIPUP_FRONT_SIGHT = new MongoId("5bb20d9cd4351e00334c9d8a"); + public static readonly MongoId BARREL_HK_416_556X45_165_INCH_BARREL_WITH_FLIPUP_FRONT_SIGHT = new MongoId("5bb20da5d4351e0035629dbf"); + public static readonly MongoId BARREL_HK_416_556X45_20_INCH_BARREL_WITH_FLIPUP_FRONT_SIGHT = new MongoId("5bb20dadd4351e00367faeff"); + public static readonly MongoId BARREL_HK_G36_556X45_228MM = new MongoId("622b379bf9cfc87d675d2de5"); + public static readonly MongoId BARREL_HK_G36_556X45_318MM = new MongoId("622b3858034a3e17ad0b81f5"); + public static readonly MongoId BARREL_HK_G36_556X45_480MM = new MongoId("622b38c56762c718e457e246"); + public static readonly MongoId BARREL_HK_UMP_45_ACP_8_INCH = new MongoId("5fc3e4a27283c4046c5814ab"); + public static readonly MongoId BARREL_HK_UMP_45_ACP_8_INCH_THREADED = new MongoId("6130c3dffaa1272e43151c7d"); + public static readonly MongoId BARREL_HK_USP_45_ACP_112MM = new MongoId("6194ef39de3cdf1d2614a768"); + public static readonly MongoId BARREL_HK_USP_ELITE_45_ACP_153MM = new MongoId("6194f017ed0429009f543eaa"); + public static readonly MongoId BARREL_HK_USP_EXPERT_45_ACP_132MM = new MongoId("6194eff92d2c397d6600348b"); + public static readonly MongoId BARREL_HK_USP_MATCH_45_ACP_153MM = new MongoId("6194f02d9bb3d20b0946d2f0"); + public static readonly MongoId BARREL_HK_USP_TACTICAL_45_ACP_129MM_THREADED = new MongoId("6194efe07c6c7b169525f11b"); + public static readonly MongoId BARREL_HK417_762X51_165_INCH = new MongoId("61702be9faa1272e431522c3"); + public static readonly MongoId BARREL_KRISS_VECTOR_45_ACP_5_INCH = new MongoId("5fb65363d1409e5ca04b54f5"); + public static readonly MongoId BARREL_KRISS_VECTOR_45_ACP_6_INCH = new MongoId("5fb653962b1b027b1f50bd03"); + public static readonly MongoId BARREL_KRISS_VECTOR_9X19_5_INCH = new MongoId("5fbbc366ca32ed67276c1557"); + public static readonly MongoId BARREL_KRISS_VECTOR_9X19_6_INCH = new MongoId("5fbbc383d5cb881a7363194a"); + public static readonly MongoId BARREL_KS23_23X75_510MM = new MongoId("5e848d1c264f7c180b5e35a9"); + public static readonly MongoId BARREL_KS23_23X75_700MM = new MongoId("5e848d2eea0a7c419c2f9bfd"); + public static readonly MongoId BARREL_M1911A1_45_ACP_127MM = new MongoId("5e81c519cb2b95385c177551"); + public static readonly MongoId BARREL_M1911A1_45_ACP_141MM_THREADED = new MongoId("5f3e77f59103d430b93f94c1"); + public static readonly MongoId BARREL_M1911A1_45_ACP_NATIONAL_MATCH_127MM = new MongoId("5f3e7801153b8571434a924c"); + public static readonly MongoId BARREL_M1A_762X51_16_INCH = new MongoId("5aaf9d53e5b5b00015042a52"); + public static readonly MongoId BARREL_M1A_762X51_22_INCH = new MongoId("5addbac75acfc400194dbc56"); + public static readonly MongoId BARREL_M60E3_762X51_584MM = new MongoId("6601279cc752a02bbe05e692"); + public static readonly MongoId BARREL_M60E4_762X51_458MM = new MongoId("660126f7c752a02bbe05e688"); + public static readonly MongoId BARREL_M60E4_762X51_475MM_HEAVY = new MongoId("66012788c752a02bbe05e68e"); + public static readonly MongoId BARREL_M60E6_762X51_458MM = new MongoId("66225d88a1c7e3b81600c76f"); + public static readonly MongoId BARREL_M700_762X51_20_INCH_STAINLESS_STEEL_THREADED = new MongoId("5d2703038abbc3105103d94c"); + public static readonly MongoId BARREL_M700_762X51_20_INCH_THREADED = new MongoId("5bfebc320db8340019668d79"); + public static readonly MongoId BARREL_M700_762X51_26_INCH = new MongoId("5bfebc250db834001a6694e1"); + public static readonly MongoId BARREL_M700_762X51_26_INCH_STAINLESS_STEEL = new MongoId("5d2702e88abbc31ed91efc44"); public static readonly MongoId BARREL_M870_12GA_355MM = new MongoId("5a787f25c5856700186c4ab9"); public static readonly MongoId BARREL_M870_12GA_508MM = new MongoId("5a787f7ac5856700177af660"); - public static readonly MongoId BARREL_M870_12GA_508MM_BARREL_WITH_A_FIXED_SIGHT = new MongoId( - "5a787ebcc5856700142fdd98" - ); - public static readonly MongoId BARREL_M870_12GA_660MM_VENT_RIB = new MongoId( - "5a787fadc5856700155a6ca1" - ); - public static readonly MongoId BARREL_M870_12GA_SAWEDOFF_325MM = new MongoId( - "5a787fdfc5856700142fdd9a" - ); - public static readonly MongoId BARREL_M9A3_9X19_127MM_THREADED = new MongoId( - "5cadc1c6ae9215000f2775a4" - ); - public static readonly MongoId BARREL_MCX_300_BLK_675_INCH = new MongoId( - "5fbbfabed5cb881a7363194e" - ); - public static readonly MongoId BARREL_MCX_300_BLK_9_INCH = new MongoId( - "5fbbfacda56d053a3543f799" - ); - public static readonly MongoId BARREL_MCXSPEAR_68X51_13_INCH = new MongoId( - "652910565ae2ae97b80fdf35" - ); - public static readonly MongoId BARREL_MDR_556X45_16_INCH = new MongoId( - "5c48a2852e221602b21d5923" - ); - public static readonly MongoId BARREL_MDR_762X51_16_INCH = new MongoId( - "5dcbe9431e1f4616d354987e" - ); - public static readonly MongoId BARREL_MK18_338_LM_24_INCH = new MongoId( - "5fc23678ab884124df0cd590" - ); + public static readonly MongoId BARREL_M870_12GA_508MM_BARREL_WITH_A_FIXED_SIGHT = new MongoId("5a787ebcc5856700142fdd98"); + public static readonly MongoId BARREL_M870_12GA_660MM_VENT_RIB = new MongoId("5a787fadc5856700155a6ca1"); + public static readonly MongoId BARREL_M870_12GA_SAWEDOFF_325MM = new MongoId("5a787fdfc5856700142fdd9a"); + public static readonly MongoId BARREL_M9A3_9X19_127MM_THREADED = new MongoId("5cadc1c6ae9215000f2775a4"); + public static readonly MongoId BARREL_MCX_300_BLK_675_INCH = new MongoId("5fbbfabed5cb881a7363194e"); + public static readonly MongoId BARREL_MCX_300_BLK_9_INCH = new MongoId("5fbbfacda56d053a3543f799"); + public static readonly MongoId BARREL_MCXSPEAR_68X51_13_INCH = new MongoId("652910565ae2ae97b80fdf35"); + public static readonly MongoId BARREL_MDR_556X45_16_INCH = new MongoId("5c48a2852e221602b21d5923"); + public static readonly MongoId BARREL_MDR_762X51_16_INCH = new MongoId("5dcbe9431e1f4616d354987e"); + public static readonly MongoId BARREL_MK18_338_LM_24_INCH = new MongoId("5fc23678ab884124df0cd590"); public static readonly MongoId BARREL_MK47_254MM = new MongoId("60658776f2cb2e02a42ace2b"); public static readonly MongoId BARREL_MK47_409MM = new MongoId("6065878ac9cf8012264142fd"); - public static readonly MongoId BARREL_MOSIN_CARBINE_762X54R_514MM = new MongoId( - "5bfd4cbe0db834001b73449f" - ); - public static readonly MongoId BARREL_MOSIN_RIFLE_762X54R_730MM_REGULAR = new MongoId( - "5ae09bff5acfc4001562219d" - ); - public static readonly MongoId BARREL_MOSIN_RIFLE_762X54R_SAWEDOFF_200MM = new MongoId( - "5bfd4cc90db834001d23e846" - ); - public static readonly MongoId BARREL_MOSIN_RIFLE_762X54R_SAWEDOFF_220MM_THREADED = new MongoId( - "5bfd4cd60db834001c38f095" - ); - public static readonly MongoId BARREL_MOSSBERG_590A1_12GA_20_INCH = new MongoId( - "5e87071478f43e51ca2de5e1" - ); - public static readonly MongoId BARREL_MP133_12GA_510MM = new MongoId( - "55d4491a4bdc2d882f8b456e" - ); - public static readonly MongoId BARREL_MP133_12GA_510MM_BARREL_WITH_RIB = new MongoId( - "560835c74bdc2dc8488b456f" - ); - public static readonly MongoId BARREL_MP133_12GA_540MM = new MongoId( - "560836484bdc2d20478b456e" - ); - public static readonly MongoId BARREL_MP133_12GA_540MM_BARREL_WITH_RIB = new MongoId( - "560836b64bdc2d57468b4567" - ); - public static readonly MongoId BARREL_MP133_12GA_610MM = new MongoId( - "55d448594bdc2d8c2f8b4569" - ); - public static readonly MongoId BARREL_MP133_12GA_610MM_BARREL_WITH_RIB = new MongoId( - "55d449444bdc2d962f8b456d" - ); - public static readonly MongoId BARREL_MP133_12GA_660MM = new MongoId( - "560836fb4bdc2d773f8b4569" - ); - public static readonly MongoId BARREL_MP133_12GA_660MM_BARREL_WITH_RIB = new MongoId( - "560837154bdc2da74d8b4568" - ); - public static readonly MongoId BARREL_MP133_12GA_710MM = new MongoId( - "5608373c4bdc2dc8488b4570" - ); - public static readonly MongoId BARREL_MP133_12GA_710MM_BARREL_WITH_RIB = new MongoId( - "560837544bdc2de22e8b456e" - ); - public static readonly MongoId BARREL_MP133_12GA_750MM = new MongoId( - "560837824bdc2d57468b4568" - ); - public static readonly MongoId BARREL_MP133_12GA_750MM_BARREL_WITH_RIB = new MongoId( - "5608379a4bdc2d26448b4569" - ); - public static readonly MongoId BARREL_MP153_12GA_610MM = new MongoId( - "588200af24597742fa221dfb" - ); - public static readonly MongoId BARREL_MP153_12GA_660MM = new MongoId( - "588200c224597743990da9ed" - ); - public static readonly MongoId BARREL_MP153_12GA_710MM = new MongoId( - "588200cf2459774414733d55" - ); - public static readonly MongoId BARREL_MP153_12GA_750MM = new MongoId( - "56deec93d2720bec348b4568" - ); - public static readonly MongoId BARREL_MP155_12GA_510MM = new MongoId( - "6076c1b9f2cb2e02a42acedc" - ); - public static readonly MongoId BARREL_MP18_762X54R_600MM = new MongoId( - "61f4012adfc9f01a816adda1" - ); + public static readonly MongoId BARREL_MOSIN_CARBINE_762X54R_514MM = new MongoId("5bfd4cbe0db834001b73449f"); + public static readonly MongoId BARREL_MOSIN_RIFLE_762X54R_730MM_REGULAR = new MongoId("5ae09bff5acfc4001562219d"); + public static readonly MongoId BARREL_MOSIN_RIFLE_762X54R_SAWEDOFF_200MM = new MongoId("5bfd4cc90db834001d23e846"); + public static readonly MongoId BARREL_MOSIN_RIFLE_762X54R_SAWEDOFF_220MM_THREADED = new MongoId("5bfd4cd60db834001c38f095"); + public static readonly MongoId BARREL_MOSSBERG_590A1_12GA_20_INCH = new MongoId("5e87071478f43e51ca2de5e1"); + public static readonly MongoId BARREL_MP133_12GA_510MM = new MongoId("55d4491a4bdc2d882f8b456e"); + public static readonly MongoId BARREL_MP133_12GA_510MM_BARREL_WITH_RIB = new MongoId("560835c74bdc2dc8488b456f"); + public static readonly MongoId BARREL_MP133_12GA_540MM = new MongoId("560836484bdc2d20478b456e"); + public static readonly MongoId BARREL_MP133_12GA_540MM_BARREL_WITH_RIB = new MongoId("560836b64bdc2d57468b4567"); + public static readonly MongoId BARREL_MP133_12GA_610MM = new MongoId("55d448594bdc2d8c2f8b4569"); + public static readonly MongoId BARREL_MP133_12GA_610MM_BARREL_WITH_RIB = new MongoId("55d449444bdc2d962f8b456d"); + public static readonly MongoId BARREL_MP133_12GA_660MM = new MongoId("560836fb4bdc2d773f8b4569"); + public static readonly MongoId BARREL_MP133_12GA_660MM_BARREL_WITH_RIB = new MongoId("560837154bdc2da74d8b4568"); + public static readonly MongoId BARREL_MP133_12GA_710MM = new MongoId("5608373c4bdc2dc8488b4570"); + public static readonly MongoId BARREL_MP133_12GA_710MM_BARREL_WITH_RIB = new MongoId("560837544bdc2de22e8b456e"); + public static readonly MongoId BARREL_MP133_12GA_750MM = new MongoId("560837824bdc2d57468b4568"); + public static readonly MongoId BARREL_MP133_12GA_750MM_BARREL_WITH_RIB = new MongoId("5608379a4bdc2d26448b4569"); + public static readonly MongoId BARREL_MP153_12GA_610MM = new MongoId("588200af24597742fa221dfb"); + public static readonly MongoId BARREL_MP153_12GA_660MM = new MongoId("588200c224597743990da9ed"); + public static readonly MongoId BARREL_MP153_12GA_710MM = new MongoId("588200cf2459774414733d55"); + public static readonly MongoId BARREL_MP153_12GA_750MM = new MongoId("56deec93d2720bec348b4568"); + public static readonly MongoId BARREL_MP155_12GA_510MM = new MongoId("6076c1b9f2cb2e02a42acedc"); + public static readonly MongoId BARREL_MP18_762X54R_600MM = new MongoId("61f4012adfc9f01a816adda1"); public static readonly MongoId BARREL_MP43_12GA_750MM = new MongoId("611a30addbdd8440277441dc"); - public static readonly MongoId BARREL_MP43_12GA_SAWEDOFF_310MM = new MongoId( - "64748d02d1c009260702b526" - ); - public static readonly MongoId BARREL_MP431C_12GA_510MM = new MongoId( - "5580169d4bdc2d9d138b4585" - ); - public static readonly MongoId BARREL_MP431C_12GA_725MM = new MongoId( - "55d447bb4bdc2d892f8b456f" - ); - public static readonly MongoId BARREL_MPX_9X19_105_INCH = new MongoId( - "5c5db5b82e2216003a0fe71d" - ); - public static readonly MongoId BARREL_MPX_9X19_14_INCH = new MongoId( - "5c5db5c62e22160012542255" - ); - public static readonly MongoId BARREL_MPX_9X19_45_INCH = new MongoId( - "5c5db5852e2216003a0fe71a" - ); - public static readonly MongoId BARREL_MPX_9X19_65_INCH = new MongoId( - "5c5db5962e2216000e5e46eb" - ); + public static readonly MongoId BARREL_MP43_12GA_SAWEDOFF_310MM = new MongoId("64748d02d1c009260702b526"); + public static readonly MongoId BARREL_MP431C_12GA_510MM = new MongoId("5580169d4bdc2d9d138b4585"); + public static readonly MongoId BARREL_MP431C_12GA_725MM = new MongoId("55d447bb4bdc2d892f8b456f"); + public static readonly MongoId BARREL_MPX_9X19_105_INCH = new MongoId("5c5db5b82e2216003a0fe71d"); + public static readonly MongoId BARREL_MPX_9X19_14_INCH = new MongoId("5c5db5c62e22160012542255"); + public static readonly MongoId BARREL_MPX_9X19_45_INCH = new MongoId("5c5db5852e2216003a0fe71a"); + public static readonly MongoId BARREL_MPX_9X19_65_INCH = new MongoId("5c5db5962e2216000e5e46eb"); public static readonly MongoId BARREL_MPX_9X19_8_INCH = new MongoId("5894a2c386f77427140b8342"); - public static readonly MongoId BARREL_MPX_9X19_RONIN_ARMS_475_INCH_PORTED_SD = new MongoId( - "67614994e889e1972605d6bb" - ); - public static readonly MongoId BARREL_MPX_9X19_RONIN_ARMS_675_INCH_PORTED_SD = new MongoId( - "676149a3e2cf1419500357eb" - ); - public static readonly MongoId BARREL_MPXSD_9X19_65_INCH_PORTED = new MongoId( - "58aeaaa886f7744fc1560f81" - ); - public static readonly MongoId BARREL_MTS25512_12GA_755MM_BARREL_WITH_RIB = new MongoId( - "612368f58b401f4f51239b33" - ); - public static readonly MongoId BARREL_OPSKS_762X39_520MM = new MongoId( - "634eff66517ccc8a960fc735" - ); - public static readonly MongoId BARREL_ORSIS_T5000M_762X51_660MM = new MongoId( - "5df256570dee1b22f862e9c4" - ); + public static readonly MongoId BARREL_MPX_9X19_RONIN_ARMS_475_INCH_PORTED_SD = new MongoId("67614994e889e1972605d6bb"); + public static readonly MongoId BARREL_MPX_9X19_RONIN_ARMS_675_INCH_PORTED_SD = new MongoId("676149a3e2cf1419500357eb"); + public static readonly MongoId BARREL_MPXSD_9X19_65_INCH_PORTED = new MongoId("58aeaaa886f7744fc1560f81"); + public static readonly MongoId BARREL_MTS25512_12GA_755MM_BARREL_WITH_RIB = new MongoId("612368f58b401f4f51239b33"); + public static readonly MongoId BARREL_OPSKS_762X39_520MM = new MongoId("634eff66517ccc8a960fc735"); + public static readonly MongoId BARREL_ORSIS_T5000M_762X51_660MM = new MongoId("5df256570dee1b22f862e9c4"); public static readonly MongoId BARREL_P226_9X19_112MM = new MongoId("56d5a1f7d2720bb3418b456a"); - public static readonly MongoId BARREL_P226_9X19_112MM_THREADED = new MongoId( - "587de4282459771bca0ec90b" - ); - public static readonly MongoId BARREL_PKM_762X54R_658MM = new MongoId( - "646371faf2404ab67905c8e9" - ); - public static readonly MongoId BARREL_PKP_762X54R_658MM = new MongoId( - "64639a9aab86f8fd4300146c" - ); + public static readonly MongoId BARREL_P226_9X19_112MM_THREADED = new MongoId("587de4282459771bca0ec90b"); + public static readonly MongoId BARREL_PKM_762X54R_658MM = new MongoId("646371faf2404ab67905c8e9"); + public static readonly MongoId BARREL_PKP_762X54R_658MM = new MongoId("64639a9aab86f8fd4300146c"); public static readonly MongoId BARREL_PL15_9X19_112MM = new MongoId("602a95edda11d6478d5a06da"); - public static readonly MongoId BARREL_PL15_9X19_112MM_THREADED = new MongoId( - "602a95fe4e02ce1eaa358729" - ); - public static readonly MongoId BARREL_PPSH41_762X25_269MM = new MongoId( - "5ea02bb600685063ec28bfa1" - ); - public static readonly MongoId BARREL_RFB_762X51_18_INCH = new MongoId( - "5f2aa46b878ef416f538b567" - ); - public static readonly MongoId BARREL_RPD_762X39_520MM = new MongoId( - "6513eff1e06849f06c0957d4" - ); - public static readonly MongoId BARREL_RPD_762X39_SAWEDOFF_350MM = new MongoId( - "65266fd43341ed9aa903dd56" - ); - public static readonly MongoId BARREL_RPK16_545X39_15_INCH = new MongoId( - "5beec1bd0db834001e6006f3" - ); - public static readonly MongoId BARREL_RPK16_545X39_22_INCH = new MongoId( - "5beec2820db834001b095426" - ); - public static readonly MongoId BARREL_SA58_762X51_11_INCH = new MongoId( - "5b099a765acfc47a8607efe3" - ); - public static readonly MongoId BARREL_SA58_762X51_16_INCH = new MongoId( - "5b7be1125acfc4001876c0e5" - ); - public static readonly MongoId BARREL_SA58_762X51_21_INCH = new MongoId( - "5b7be1265acfc400161d0798" - ); - public static readonly MongoId BARREL_SAKO_TRG_M10_338_LM_20_INCH = new MongoId( - "67405d760098dcb5940ea1a6" - ); - public static readonly MongoId BARREL_SAKO_TRG_M10_338_LM_235_INCH = new MongoId( - "673cb551093e0ea7fd0b874a" - ); - public static readonly MongoId BARREL_SAKO_TRG_M10_338_LM_27_INCH = new MongoId( - "67405e3b83ac5c69ae025406" - ); - public static readonly MongoId BARREL_SKS_762X39_520MM = new MongoId( - "634f02331f9f536910079b51" - ); - public static readonly MongoId BARREL_SR25_762X51_16_INCH = new MongoId( - "5df917564a9f347bc92edca3" - ); - public static readonly MongoId BARREL_SR25_762X51_20_INCH = new MongoId( - "5dfa397fb11454561e39246c" - ); - public static readonly MongoId BARREL_STEYR_AUG_A1_556X45_16_INCH = new MongoId( - "6333f05d1bc0e6217a0e9d34" - ); - public static readonly MongoId BARREL_STEYR_AUG_A1_556X45_20_INCH = new MongoId( - "62e7c7f3c34ea971710c32fc" - ); - public static readonly MongoId BARREL_STEYR_AUG_A3_556X45_16_INCH = new MongoId( - "630e39c3bd357927e4007c15" - ); - public static readonly MongoId BARREL_STM9_9X19_105_INCH = new MongoId( - "603372b4da11d6478d5a07ff" - ); - public static readonly MongoId BARREL_STM9_9X19_12_INCH = new MongoId( - "603372d154072b51b239f9e1" - ); - public static readonly MongoId BARREL_STM9_9X19_14_INCH = new MongoId( - "603372f153a60014f970616d" - ); - public static readonly MongoId BARREL_STM9_9X19_16_INCH = new MongoId( - "603373004e02ce1eaa358814" - ); - public static readonly MongoId BARREL_SVD_762X54R_565MM = new MongoId( - "5c471cb32e221602b177afaa" - ); - public static readonly MongoId BARREL_SVT40_762X54R_625MM = new MongoId( - "6410758c857473525b08bb77" - ); + public static readonly MongoId BARREL_PL15_9X19_112MM_THREADED = new MongoId("602a95fe4e02ce1eaa358729"); + public static readonly MongoId BARREL_PPSH41_762X25_269MM = new MongoId("5ea02bb600685063ec28bfa1"); + public static readonly MongoId BARREL_RFB_762X51_18_INCH = new MongoId("5f2aa46b878ef416f538b567"); + public static readonly MongoId BARREL_RPD_762X39_520MM = new MongoId("6513eff1e06849f06c0957d4"); + public static readonly MongoId BARREL_RPD_762X39_SAWEDOFF_350MM = new MongoId("65266fd43341ed9aa903dd56"); + public static readonly MongoId BARREL_RPK16_545X39_15_INCH = new MongoId("5beec1bd0db834001e6006f3"); + public static readonly MongoId BARREL_RPK16_545X39_22_INCH = new MongoId("5beec2820db834001b095426"); + public static readonly MongoId BARREL_SA58_762X51_11_INCH = new MongoId("5b099a765acfc47a8607efe3"); + public static readonly MongoId BARREL_SA58_762X51_16_INCH = new MongoId("5b7be1125acfc4001876c0e5"); + public static readonly MongoId BARREL_SA58_762X51_21_INCH = new MongoId("5b7be1265acfc400161d0798"); + public static readonly MongoId BARREL_SAKO_TRG_M10_338_LM_20_INCH = new MongoId("67405d760098dcb5940ea1a6"); + public static readonly MongoId BARREL_SAKO_TRG_M10_338_LM_235_INCH = new MongoId("673cb551093e0ea7fd0b874a"); + public static readonly MongoId BARREL_SAKO_TRG_M10_338_LM_27_INCH = new MongoId("67405e3b83ac5c69ae025406"); + public static readonly MongoId BARREL_SKS_762X39_520MM = new MongoId("634f02331f9f536910079b51"); + public static readonly MongoId BARREL_SR25_762X51_16_INCH = new MongoId("5df917564a9f347bc92edca3"); + public static readonly MongoId BARREL_SR25_762X51_20_INCH = new MongoId("5dfa397fb11454561e39246c"); + public static readonly MongoId BARREL_STEYR_AUG_A1_556X45_16_INCH = new MongoId("6333f05d1bc0e6217a0e9d34"); + public static readonly MongoId BARREL_STEYR_AUG_A1_556X45_20_INCH = new MongoId("62e7c7f3c34ea971710c32fc"); + public static readonly MongoId BARREL_STEYR_AUG_A3_556X45_16_INCH = new MongoId("630e39c3bd357927e4007c15"); + public static readonly MongoId BARREL_STM9_9X19_105_INCH = new MongoId("603372b4da11d6478d5a07ff"); + public static readonly MongoId BARREL_STM9_9X19_12_INCH = new MongoId("603372d154072b51b239f9e1"); + public static readonly MongoId BARREL_STM9_9X19_14_INCH = new MongoId("603372f153a60014f970616d"); + public static readonly MongoId BARREL_STM9_9X19_16_INCH = new MongoId("603373004e02ce1eaa358814"); + public static readonly MongoId BARREL_SVD_762X54R_565MM = new MongoId("5c471cb32e221602b177afaa"); + public static readonly MongoId BARREL_SVT40_762X54R_625MM = new MongoId("6410758c857473525b08bb77"); public static readonly MongoId BARREL_TT_762X25_116MM = new MongoId("571a26d524597720680fbe8a"); - public static readonly MongoId BARREL_TT_762X25_116MM_GILDED = new MongoId( - "5b3baf8f5acfc40dc5296692" - ); - public static readonly MongoId BARREL_TT_762X25_121MM_MAKESHIFT_THREADED = new MongoId( - "571a279b24597720b4066566" - ); - public static readonly MongoId BARREL_UZI_238MM_THREADED_3LUG = new MongoId( - "6698c89bfbc8142e60024b0e" - ); + public static readonly MongoId BARREL_TT_762X25_116MM_GILDED = new MongoId("5b3baf8f5acfc40dc5296692"); + public static readonly MongoId BARREL_TT_762X25_121MM_MAKESHIFT_THREADED = new MongoId("571a279b24597720b4066566"); + public static readonly MongoId BARREL_UZI_238MM_THREADED_3LUG = new MongoId("6698c89bfbc8142e60024b0e"); public static readonly MongoId BARREL_UZI_9X19_259MM = new MongoId("6698c8ab29e062525d0ad8ab"); public static readonly MongoId BARREL_UZI_9X19_409MM = new MongoId("6698c8b7710a4525fe0e9e55"); - public static readonly MongoId BARREL_UZI_PRO_9X19_114MM = new MongoId( - "66866fe776d1a87cd80fd388" - ); - public static readonly MongoId BARREL_UZI_PRO_9X19_170MM = new MongoId( - "6686700a2b934a68630a7fe6" - ); - public static readonly MongoId BARREL_UZI_PRO_9X19_210MM = new MongoId( - "66867023c3d473265104f384" - ); - public static readonly MongoId BARREL_UZI_PRO_9X19_240MM = new MongoId( - "668670432b934a68630a7fe8" - ); - public static readonly MongoId BARREL_UZI_PRO_9X19_PIKE_ARMS_114MM_THREADED = new MongoId( - "668031705014e211b4078046" - ); - public static readonly MongoId BARREL_VPO21502_366TKM_600MM = new MongoId( - "5de65547883dde217541644b" - ); + public static readonly MongoId BARREL_UZI_PRO_9X19_114MM = new MongoId("66866fe776d1a87cd80fd388"); + public static readonly MongoId BARREL_UZI_PRO_9X19_170MM = new MongoId("6686700a2b934a68630a7fe6"); + public static readonly MongoId BARREL_UZI_PRO_9X19_210MM = new MongoId("66867023c3d473265104f384"); + public static readonly MongoId BARREL_UZI_PRO_9X19_240MM = new MongoId("668670432b934a68630a7fe8"); + public static readonly MongoId BARREL_UZI_PRO_9X19_PIKE_ARMS_114MM_THREADED = new MongoId("668031705014e211b4078046"); + public static readonly MongoId BARREL_VPO21502_366TKM_600MM = new MongoId("5de65547883dde217541644b"); public static readonly MongoId BARREL_VSK94_9X39 = new MongoId("645123013d52156624001fd1"); - public static readonly MongoId BARTER_42_SIGNATURE_BLEND_ENGLISH_TEA = new MongoId( - "5bc9be8fd4351e00334cae6e" - ); - public static readonly MongoId BARTER_6STEN140M_MILITARY_BATTERY = new MongoId( - "5d03794386f77420415576f5" - ); + public static readonly MongoId BARTER_42_SIGNATURE_BLEND_ENGLISH_TEA = new MongoId("5bc9be8fd4351e00334cae6e"); + public static readonly MongoId BARTER_6STEN140M_MILITARY_BATTERY = new MongoId("5d03794386f77420415576f5"); public static readonly MongoId BARTER_AA_BATTERY = new MongoId("5672cb124bdc2d1a0f8b4568"); - public static readonly MongoId BARTER_ADVANCED_CURRENT_CONVERTER = new MongoId( - "6389c85357baa773a825b356" - ); - public static readonly MongoId BARTER_ALKALINE_CLEANER_FOR_HEAT_EXCHANGERS = new MongoId( - "59faf98186f774067b6be103" - ); - public static readonly MongoId BARTER_ANALOG_THERMOMETER = new MongoId( - "5d1b32c186f774252167a530" - ); + public static readonly MongoId BARTER_ADVANCED_CURRENT_CONVERTER = new MongoId("6389c85357baa773a825b356"); + public static readonly MongoId BARTER_ALKALINE_CLEANER_FOR_HEAT_EXCHANGERS = new MongoId("59faf98186f774067b6be103"); + public static readonly MongoId BARTER_ANALOG_THERMOMETER = new MongoId("5d1b32c186f774252167a530"); public static readonly MongoId BARTER_ANTIQUE_TEAPOT = new MongoId("590de71386f774347051a052"); public static readonly MongoId BARTER_ANTIQUE_VASE = new MongoId("590de7e986f7741b096e5f32"); - public static readonly MongoId BARTER_APOLLO_SOYUZ_CIGARETTES = new MongoId( - "573475fb24597737fb1379e1" - ); - public static readonly MongoId BARTER_AQUAPEPS_WATER_PURIFICATION_TABLETS = new MongoId( - "6389c6c7dbfd5e4b95197e68" - ); - public static readonly MongoId BARTER_ARAMID_FIBER_FABRIC = new MongoId( - "5e2af4d286f7746d4159f07a" - ); + public static readonly MongoId BARTER_APOLLO_SOYUZ_CIGARETTES = new MongoId("573475fb24597737fb1379e1"); + public static readonly MongoId BARTER_AQUAPEPS_WATER_PURIFICATION_TABLETS = new MongoId("6389c6c7dbfd5e4b95197e68"); + public static readonly MongoId BARTER_ARAMID_FIBER_FABRIC = new MongoId("5e2af4d286f7746d4159f07a"); public static readonly MongoId BARTER_AWL = new MongoId("62a0a098de7ac8199358053b"); - public static readonly MongoId BARTER_AXEL_PARROT_FIGURINE = new MongoId( - "62a091170b9d3c46de5b6cf2" - ); - public static readonly MongoId BARTER_BATTERED_ANTIQUE_BOOK = new MongoId( - "5bc9c049d4351e44f824d360" - ); - public static readonly MongoId BARTER_BEAR_BUDDY_PLUSH_TOY = new MongoId( - "62a08f4c4f842e1bd12d9d62" - ); - public static readonly MongoId BARTER_BEAR_OPERATIVE_FIGURINE = new MongoId( - "655c652d60d0ac437100fed7" - ); + public static readonly MongoId BARTER_AXEL_PARROT_FIGURINE = new MongoId("62a091170b9d3c46de5b6cf2"); + public static readonly MongoId BARTER_BATTERED_ANTIQUE_BOOK = new MongoId("5bc9c049d4351e44f824d360"); + public static readonly MongoId BARTER_BEAR_BUDDY_PLUSH_TOY = new MongoId("62a08f4c4f842e1bd12d9d62"); + public static readonly MongoId BARTER_BEAR_OPERATIVE_FIGURINE = new MongoId("655c652d60d0ac437100fed7"); public static readonly MongoId BARTER_BOLTS = new MongoId("57347c5b245977448d35f6e1"); - public static readonly MongoId BARTER_BOTTLE_OF_HYDROGEN_PEROXIDE = new MongoId( - "59e361e886f774176c10a2a5" - ); - public static readonly MongoId BARTER_BOTTLE_OF_OLOLO_MULTIVITAMINS = new MongoId( - "62a0a043cf4a99369e2624a5" - ); - public static readonly MongoId BARTER_BOTTLE_OF_SALINE_SOLUTION = new MongoId( - "59e3606886f77417674759a5" - ); - public static readonly MongoId BARTER_BROKEN_GPHONE_SMARTPHONE = new MongoId( - "56742c324bdc2d150f8b456d" - ); - public static readonly MongoId BARTER_BROKEN_GPHONE_X_SMARTPHONE = new MongoId( - "5c1265fc86f7743f896a21c2" - ); + public static readonly MongoId BARTER_BOTTLE_OF_HYDROGEN_PEROXIDE = new MongoId("59e361e886f774176c10a2a5"); + public static readonly MongoId BARTER_BOTTLE_OF_OLOLO_MULTIVITAMINS = new MongoId("62a0a043cf4a99369e2624a5"); + public static readonly MongoId BARTER_BOTTLE_OF_SALINE_SOLUTION = new MongoId("59e3606886f77417674759a5"); + public static readonly MongoId BARTER_BROKEN_GPHONE_SMARTPHONE = new MongoId("56742c324bdc2d150f8b456d"); + public static readonly MongoId BARTER_BROKEN_GPHONE_X_SMARTPHONE = new MongoId("5c1265fc86f7743f896a21c2"); public static readonly MongoId BARTER_BROKEN_LCD = new MongoId("5d1b309586f77425227d1676"); - public static readonly MongoId BARTER_BRONZE_LION_FIGURINE = new MongoId( - "59e3639286f7741777737013" - ); - public static readonly MongoId BARTER_BULBEX_CABLE_CUTTER = new MongoId( - "619cbfeb6b8a1b37a54eebfa" - ); + public static readonly MongoId BARTER_BRONZE_LION_FIGURINE = new MongoId("59e3639286f7741777737013"); + public static readonly MongoId BARTER_BULBEX_CABLE_CUTTER = new MongoId("619cbfeb6b8a1b37a54eebfa"); public static readonly MongoId BARTER_BUNDLE_OF_WIRES = new MongoId("5c06779c86f77426e00dd782"); - public static readonly MongoId BARTER_CAN_OF_DR_LUPOS_COFFEE_BEANS = new MongoId( - "5e54f6af86f7742199090bf3" - ); - public static readonly MongoId BARTER_CAN_OF_MAJAICA_COFFEE_BEANS = new MongoId( - "5af0484c86f7740f02001f7f" - ); + public static readonly MongoId BARTER_CAN_OF_DR_LUPOS_COFFEE_BEANS = new MongoId("5e54f6af86f7742199090bf3"); + public static readonly MongoId BARTER_CAN_OF_MAJAICA_COFFEE_BEANS = new MongoId("5af0484c86f7740f02001f7f"); public static readonly MongoId BARTER_CAN_OF_THERMITE = new MongoId("60391a8b3364dc22b04d0ce5"); - public static readonly MongoId BARTER_CAN_OF_WHITE_SALT = new MongoId( - "62a09ee4cf4a99369e262453" - ); + public static readonly MongoId BARTER_CAN_OF_WHITE_SALT = new MongoId("62a09ee4cf4a99369e262453"); public static readonly MongoId BARTER_CAPACITORS = new MongoId("5c06782b86f77426df5407d2"); public static readonly MongoId BARTER_CAR_BATTERY = new MongoId("5733279d245977289b77ec24"); public static readonly MongoId BARTER_CASE_KEY = new MongoId("67449b6c89d5e1ddc603f504"); public static readonly MongoId BARTER_CAT_FIGURINE = new MongoId("59e3658a86f7741776641ac4"); - public static readonly MongoId BARTER_CHAIN_WITH_PROKILL_MEDALLION = new MongoId( - "5c1267ee86f77416ec610f72" - ); + public static readonly MongoId BARTER_CHAIN_WITH_PROKILL_MEDALLION = new MongoId("5c1267ee86f77416ec610f72"); public static readonly MongoId BARTER_CHAINLET = new MongoId("573474f924597738002c6174"); - public static readonly MongoId BARTER_CHRISTMAS_TREE_ORNAMENT_RED = new MongoId( - "5df8a6a186f77412640e2e80" - ); - public static readonly MongoId BARTER_CHRISTMAS_TREE_ORNAMENT_SILVER = new MongoId( - "5df8a72c86f77412640e2e83" - ); - public static readonly MongoId BARTER_CHRISTMAS_TREE_ORNAMENT_VIOLET = new MongoId( - "5df8a77486f77412672a1e3f" - ); + public static readonly MongoId BARTER_CHRISTMAS_TREE_ORNAMENT_RED = new MongoId("5df8a6a186f77412640e2e80"); + public static readonly MongoId BARTER_CHRISTMAS_TREE_ORNAMENT_SILVER = new MongoId("5df8a72c86f77412640e2e83"); + public static readonly MongoId BARTER_CHRISTMAS_TREE_ORNAMENT_VIOLET = new MongoId("5df8a77486f77412672a1e3f"); public static readonly MongoId BARTER_CLASSIC_MATCHES = new MongoId("57347b8b24597737dd42e192"); - public static readonly MongoId BARTER_CLIN_WINDOW_CLEANER = new MongoId( - "59e358a886f7741776641ac3" - ); - public static readonly MongoId BARTER_CONSTRUCTION_MEASURING_TAPE = new MongoId( - "590c2c9c86f774245b1f03f2" - ); + public static readonly MongoId BARTER_CLIN_WINDOW_CLEANER = new MongoId("59e358a886f7741776641ac3"); + public static readonly MongoId BARTER_CONSTRUCTION_MEASURING_TAPE = new MongoId("590c2c9c86f774245b1f03f2"); public static readonly MongoId BARTER_CONTRABAND_BOX = new MongoId("67408903268737ef6908d432"); - public static readonly MongoId BARTER_CORDURA_POLYAMIDE_FABRIC = new MongoId( - "5e2af41e86f774755a234b67" - ); + public static readonly MongoId BARTER_CORDURA_POLYAMIDE_FABRIC = new MongoId("5e2af41e86f774755a234b67"); public static readonly MongoId BARTER_CORRUGATED_HOSE = new MongoId("59e35cbb86f7741778269d83"); - public static readonly MongoId BARTER_COUNT_BLOODSUCKER_FIGURINE = new MongoId( - "679b9d4b3374fb14f40efe6d" - ); + public static readonly MongoId BARTER_COUNT_BLOODSUCKER_FIGURINE = new MongoId("679b9d4b3374fb14f40efe6d"); public static readonly MongoId BARTER_CPU_FAN = new MongoId("5734779624597737e04bf329"); - public static readonly MongoId BARTER_CRICKENT_LIGHTER = new MongoId( - "56742c284bdc2d98058b456d" - ); - public static readonly MongoId BARTER_CULTIST_FIGURINE = new MongoId( - "655c669103999d3c810c025b" - ); - public static readonly MongoId BARTER_CYCLON_RECHARGEABLE_BATTERY = new MongoId( - "5e2aee0a86f774755a234b62" - ); + public static readonly MongoId BARTER_CRICKENT_LIGHTER = new MongoId("56742c284bdc2d98058b456d"); + public static readonly MongoId BARTER_CULTIST_FIGURINE = new MongoId("655c669103999d3c810c025b"); + public static readonly MongoId BARTER_CYCLON_RECHARGEABLE_BATTERY = new MongoId("5e2aee0a86f774755a234b62"); public static readonly MongoId BARTER_D_SIZE_BATTERY = new MongoId("5672cb304bdc2dc2088b456a"); - public static readonly MongoId BARTER_DAMAGED_HARD_DRIVE = new MongoId( - "590a386e86f77429692b27ab" - ); - public static readonly MongoId BARTER_DEADLYSLOBS_BEARD_OIL = new MongoId( - "5bc9b9ecd4351e3bac122519" - ); - public static readonly MongoId BARTER_DED_MOROZ_FIGURINE = new MongoId( - "655c67ab0d37ca5135388f4b" - ); + public static readonly MongoId BARTER_DAMAGED_HARD_DRIVE = new MongoId("590a386e86f77429692b27ab"); + public static readonly MongoId BARTER_DEADLYSLOBS_BEARD_OIL = new MongoId("5bc9b9ecd4351e3bac122519"); + public static readonly MongoId BARTER_DED_MOROZ_FIGURINE = new MongoId("655c67ab0d37ca5135388f4b"); public static readonly MongoId BARTER_DEN_FIGURINE = new MongoId("66572b8d80b1cd4b6a67847f"); - public static readonly MongoId BARTER_DISPOSABLE_SYRINGE = new MongoId( - "5d1b3f2d86f774253763b735" - ); + public static readonly MongoId BARTER_DISPOSABLE_SYRINGE = new MongoId("5d1b3f2d86f774253763b735"); public static readonly MongoId BARTER_DOGTAG_BEAR = new MongoId("59f32bb586f774757e1e8442"); public static readonly MongoId BARTER_DOGTAG_BEAR_EOD = new MongoId("6662e9aca7e0b43baa3d5f74"); - public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_1 = new MongoId( - "675dc9d37ae1a8792107ca96" - ); - public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_2 = new MongoId( - "675dcb0545b1a2d108011b2b" - ); - public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_3 = new MongoId( - "684180bc51bf8645f7067bc8" - ); - public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_4 = new MongoId( - "684181208d035f60230f63f9" - ); + public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_1 = new MongoId("675dc9d37ae1a8792107ca96"); + public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_2 = new MongoId("675dcb0545b1a2d108011b2b"); + public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_3 = new MongoId("684180bc51bf8645f7067bc8"); + public static readonly MongoId BARTER_DOGTAG_BEAR_PRESTIGE_4 = new MongoId("684181208d035f60230f63f9"); public static readonly MongoId BARTER_DOGTAG_BEAR_TUE = new MongoId("6662e9cda7e0b43baa3d5f76"); public static readonly MongoId BARTER_DOGTAG_USEC = new MongoId("59f32c3b86f77472a31742f0"); public static readonly MongoId BARTER_DOGTAG_USEC_EOD = new MongoId("6662e9f37fa79a6d83730fa0"); - public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_1 = new MongoId( - "6764207f2fa5e32733055c4a" - ); - public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_2 = new MongoId( - "6764202ae307804338014c1a" - ); - public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_3 = new MongoId( - "68418091b5b0c9e4c60f0e7a" - ); - public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_4 = new MongoId( - "684180ee9b6d80d840042e8a" - ); + public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_1 = new MongoId("6764207f2fa5e32733055c4a"); + public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_2 = new MongoId("6764202ae307804338014c1a"); + public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_3 = new MongoId("68418091b5b0c9e4c60f0e7a"); + public static readonly MongoId BARTER_DOGTAG_USEC_PRESTIGE_4 = new MongoId("684180ee9b6d80d840042e8a"); public static readonly MongoId BARTER_DOGTAG_USEC_TUE = new MongoId("6662ea05f6259762c56f3189"); public static readonly MongoId BARTER_DOGTAGT = new MongoId("5b9b9020e7ef6f5716480215"); public static readonly MongoId BARTER_DRY_FUEL = new MongoId("590a373286f774287540368b"); @@ -2178,270 +975,123 @@ public static class ItemTpl public static readonly MongoId BARTER_DVD_DRIVE = new MongoId("5734781f24597737e04bf32a"); public static readonly MongoId BARTER_ELECTRIC_DRILL = new MongoId("59e35de086f7741778269d84"); public static readonly MongoId BARTER_ELECTRIC_MOTOR = new MongoId("5d1b2fa286f77425227d1674"); - public static readonly MongoId BARTER_ELECTRONIC_COMPONENTS = new MongoId( - "6389c70ca33d8c4cdf4932c6" - ); - public static readonly MongoId BARTER_ENERGYSAVING_LAMP = new MongoId( - "590a3cd386f77436f20848cb" - ); - public static readonly MongoId BARTER_EXPEDITIONARY_FUEL_TANK = new MongoId( - "5d1b371186f774253763a656" - ); - public static readonly MongoId BARTER_FARFORWARD_GPS_SIGNAL_AMPLIFIER_UNIT = new MongoId( - "6389c7f115805221fb410466" - ); - public static readonly MongoId BARTER_FIERCE_BLOW_SLEDGEHAMMER = new MongoId( - "63a0b208f444d32d6f03ea1e" - ); - public static readonly MongoId BARTER_FIREKLEAN_GUN_LUBE = new MongoId( - "5bc9b355d4351e6d1509862a" - ); - public static readonly MongoId BARTER_FLAT_SCREWDRIVER = new MongoId( - "5d63d33b86f7746ea9275524" - ); - public static readonly MongoId BARTER_FLAT_SCREWDRIVER_LONG = new MongoId( - "5d4042a986f7743185265463" - ); + public static readonly MongoId BARTER_ELECTRONIC_COMPONENTS = new MongoId("6389c70ca33d8c4cdf4932c6"); + public static readonly MongoId BARTER_ENERGYSAVING_LAMP = new MongoId("590a3cd386f77436f20848cb"); + public static readonly MongoId BARTER_EXPEDITIONARY_FUEL_TANK = new MongoId("5d1b371186f774253763a656"); + public static readonly MongoId BARTER_FARFORWARD_GPS_SIGNAL_AMPLIFIER_UNIT = new MongoId("6389c7f115805221fb410466"); + public static readonly MongoId BARTER_FIERCE_BLOW_SLEDGEHAMMER = new MongoId("63a0b208f444d32d6f03ea1e"); + public static readonly MongoId BARTER_FIREKLEAN_GUN_LUBE = new MongoId("5bc9b355d4351e6d1509862a"); + public static readonly MongoId BARTER_FLAT_SCREWDRIVER = new MongoId("5d63d33b86f7746ea9275524"); + public static readonly MongoId BARTER_FLAT_SCREWDRIVER_LONG = new MongoId("5d4042a986f7743185265463"); public static readonly MongoId BARTER_FLEECE_FABRIC = new MongoId("5e2af47786f7746d404f3aaa"); - public static readonly MongoId BARTER_FP100_FILTER_ABSORBER = new MongoId( - "5d1b2f3f86f774252167a52c" - ); - public static readonly MongoId BARTER_FUEL_CONDITIONER = new MongoId( - "5b43575a86f77424f443fe62" - ); - public static readonly MongoId BARTER_GARY_ZONT_PORTABLE_ELECTRONIC_WARFARE_DEVICE = - new MongoId("66d9f8744827a77e870ecaf1"); + public static readonly MongoId BARTER_FP100_FILTER_ABSORBER = new MongoId("5d1b2f3f86f774252167a52c"); + public static readonly MongoId BARTER_FUEL_CONDITIONER = new MongoId("5b43575a86f77424f443fe62"); + public static readonly MongoId BARTER_GARY_ZONT_PORTABLE_ELECTRONIC_WARFARE_DEVICE = new MongoId("66d9f8744827a77e870ecaf1"); public static readonly MongoId BARTER_GAS_ANALYZER = new MongoId("590a3efd86f77437d351a25b"); - public static readonly MongoId BARTER_GAS_MASK_AIR_FILTER = new MongoId( - "590c595c86f7747884343ad7" - ); - public static readonly MongoId BARTER_GEIGERMULLER_COUNTER = new MongoId( - "5672cb724bdc2dc2088b456b" - ); + public static readonly MongoId BARTER_GAS_MASK_AIR_FILTER = new MongoId("590c595c86f7747884343ad7"); + public static readonly MongoId BARTER_GEIGERMULLER_COUNTER = new MongoId("5672cb724bdc2dc2088b456b"); public static readonly MongoId BARTER_GOLD_SKULL_RING = new MongoId("5d235a5986f77443f6329bc6"); - public static readonly MongoId BARTER_GOLDEN_1GPHONE_SMARTPHONE = new MongoId( - "5bc9b720d4351e450201234b" - ); + public static readonly MongoId BARTER_GOLDEN_1GPHONE_SMARTPHONE = new MongoId("5bc9b720d4351e450201234b"); public static readonly MongoId BARTER_GOLDEN_EGG = new MongoId("62a09cfe4f842e1bd12da3e4"); - public static readonly MongoId BARTER_GOLDEN_NECK_CHAIN = new MongoId( - "5734758f24597738025ee253" - ); - public static readonly MongoId BARTER_GOLDEN_ROOSTER_FIGURINE = new MongoId( - "5bc9bc53d4351e00367fbcee" - ); + public static readonly MongoId BARTER_GOLDEN_NECK_CHAIN = new MongoId("5734758f24597738025ee253"); + public static readonly MongoId BARTER_GOLDEN_ROOSTER_FIGURINE = new MongoId("5bc9bc53d4351e00367fbcee"); public static readonly MongoId BARTER_GRAPHICS_CARD = new MongoId("57347ca924597744596b4e71"); - public static readonly MongoId BARTER_GREENBAT_LITHIUM_BATTERY = new MongoId( - "5e2aedd986f7746d404f3aa4" - ); + public static readonly MongoId BARTER_GREENBAT_LITHIUM_BATTERY = new MongoId("5e2aedd986f7746d404f3aa4"); public static readonly MongoId BARTER_GUNPOWDER_EAGLE = new MongoId("5d6fc78386f77449d825f9dc"); public static readonly MongoId BARTER_GUNPOWDER_HAWK = new MongoId("5d6fc87386f77449db3db94e"); public static readonly MongoId BARTER_GUNPOWDER_KITE = new MongoId("590c5a7286f7747884343aea"); public static readonly MongoId BARTER_HAND_DRILL = new MongoId("5d1b317c86f7742523398392"); public static readonly MongoId BARTER_HORSE_FIGURINE = new MongoId("573478bc24597738002c6175"); public static readonly MongoId BARTER_HUNTING_MATCHES = new MongoId("5e2af2bc86f7746d3f3c33fc"); - public static readonly MongoId BARTER_INSEQ_GAS_PIPE_WRENCH = new MongoId( - "66b37f114410565a8f6789e2" - ); + public static readonly MongoId BARTER_INSEQ_GAS_PIPE_WRENCH = new MongoId("66b37f114410565a8f6789e2"); public static readonly MongoId BARTER_INSULATING_TAPE = new MongoId("5734795124597738002c6176"); - public static readonly MongoId BARTER_IRIDIUM_MILITARY_THERMAL_VISION_MODULE = new MongoId( - "5d0377ce86f774186372f689" - ); + public static readonly MongoId BARTER_IRIDIUM_MILITARY_THERMAL_VISION_MODULE = new MongoId("5d0377ce86f774186372f689"); public static readonly MongoId BARTER_JAR_OF_PICKLES = new MongoId("67586af7036d7f3da60c3612"); - public static readonly MongoId BARTER_KEKTAPE_DUCT_TAPE = new MongoId( - "5e2af29386f7746d4159f077" - ); + public static readonly MongoId BARTER_KEKTAPE_DUCT_TAPE = new MongoId("5e2af29386f7746d4159f077"); public static readonly MongoId BARTER_KILLA_FIGURINE = new MongoId("66572c82ad599021091c6118"); - public static readonly MongoId BARTER_KOSA_UAV_ELECTRONIC_JAMMING_DEVICE = new MongoId( - "66d9f7e7099cf6adcc07a369" - ); - public static readonly MongoId BARTER_LEDX_SKIN_TRANSILLUMINATOR = new MongoId( - "5c0530ee86f774697952d952" - ); + public static readonly MongoId BARTER_KOSA_UAV_ELECTRONIC_JAMMING_DEVICE = new MongoId("66d9f7e7099cf6adcc07a369"); + public static readonly MongoId BARTER_LEDX_SKIN_TRANSILLUMINATOR = new MongoId("5c0530ee86f774697952d952"); public static readonly MongoId BARTER_LEGA_MEDAL = new MongoId("6656560053eaaa7a23349c86"); public static readonly MongoId BARTER_LIGHT_BULB = new MongoId("5d1b392c86f77425243e98fe"); public static readonly MongoId BARTER_LOCKED_CASE = new MongoId("6740987b89d5e1ddc603f4f0"); - public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_BATTLEPASS_0 = new MongoId( - "67cad1ec19b006e9e50f44d6" - ); - public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_COMMON = new MongoId( - "66588b514de4820934746dc6" - ); - public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_EPIC = new MongoId( - "6658285190486915542256c4" - ); - public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_RARE = new MongoId( - "66571bf06a723f7f005a0619" - ); - public static readonly MongoId BARTER_LOCKED_SUPPLY_CRATE_COMMON = new MongoId( - "66588ba291f6e93c4c06efef" - ); - public static readonly MongoId BARTER_LOCKED_SUPPLY_CRATE_EPIC = new MongoId( - "665828c44de4820934746ce4" - ); - public static readonly MongoId BARTER_LOCKED_SUPPLY_CRATE_RARE = new MongoId( - "66572b88ac60f009f270d1dc" - ); - public static readonly MongoId BARTER_LOCKED_VALUABLES_CRATE_COMMON = new MongoId( - "66588bb047fbd536a674240e" - ); - public static readonly MongoId BARTER_LOCKED_VALUABLES_CRATE_EPIC = new MongoId( - "665828f490486915542256c6" - ); - public static readonly MongoId BARTER_LOCKED_VALUABLES_CRATE_RARE = new MongoId( - "66572bb3ac60f009f270d1df" - ); - public static readonly MongoId BARTER_LOCKED_WEAPON_CRATE_COMMON = new MongoId( - "66588b6dcb48a73e674b2649" - ); - public static readonly MongoId BARTER_LOCKED_WEAPON_CRATE_EPIC = new MongoId( - "66582889efd94e2d665b14a2" - ); - public static readonly MongoId BARTER_LOCKED_WEAPON_CRATE_RARE = new MongoId( - "66572b3f6a723f7f005a066c" - ); - public static readonly MongoId BARTER_LOOT_LORD_PLUSHIE = new MongoId( - "60b0f7057897d47c5b04ab94" - ); - public static readonly MongoId BARTER_LVNDMARKS_RAT_POISON = new MongoId( - "60b0f561c4449e4cb624c1d7" - ); + public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_BATTLEPASS_0 = new MongoId("67cad1ec19b006e9e50f44d6"); + public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_COMMON = new MongoId("66588b514de4820934746dc6"); + public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_EPIC = new MongoId("6658285190486915542256c4"); + public static readonly MongoId BARTER_LOCKED_EQUIPMENT_CRATE_RARE = new MongoId("66571bf06a723f7f005a0619"); + public static readonly MongoId BARTER_LOCKED_SUPPLY_CRATE_COMMON = new MongoId("66588ba291f6e93c4c06efef"); + public static readonly MongoId BARTER_LOCKED_SUPPLY_CRATE_EPIC = new MongoId("665828c44de4820934746ce4"); + public static readonly MongoId BARTER_LOCKED_SUPPLY_CRATE_RARE = new MongoId("66572b88ac60f009f270d1dc"); + public static readonly MongoId BARTER_LOCKED_VALUABLES_CRATE_COMMON = new MongoId("66588bb047fbd536a674240e"); + public static readonly MongoId BARTER_LOCKED_VALUABLES_CRATE_EPIC = new MongoId("665828f490486915542256c6"); + public static readonly MongoId BARTER_LOCKED_VALUABLES_CRATE_RARE = new MongoId("66572bb3ac60f009f270d1df"); + public static readonly MongoId BARTER_LOCKED_WEAPON_CRATE_COMMON = new MongoId("66588b6dcb48a73e674b2649"); + public static readonly MongoId BARTER_LOCKED_WEAPON_CRATE_EPIC = new MongoId("66582889efd94e2d665b14a2"); + public static readonly MongoId BARTER_LOCKED_WEAPON_CRATE_RARE = new MongoId("66572b3f6a723f7f005a066c"); + public static readonly MongoId BARTER_LOOT_LORD_PLUSHIE = new MongoId("60b0f7057897d47c5b04ab94"); + public static readonly MongoId BARTER_LVNDMARKS_RAT_POISON = new MongoId("60b0f561c4449e4cb624c1d7"); public static readonly MongoId BARTER_MAGNET = new MongoId("590a391c86f774385a33c404"); - public static readonly MongoId BARTER_MALBORO_CIGARETTES = new MongoId( - "573476d324597737da2adc13" - ); - public static readonly MongoId BARTER_MEDICAL_BLOODSET = new MongoId( - "5b4335ba86f7744d2837a264" - ); + public static readonly MongoId BARTER_MALBORO_CIGARETTES = new MongoId("573476d324597737da2adc13"); + public static readonly MongoId BARTER_MEDICAL_BLOODSET = new MongoId("5b4335ba86f7744d2837a264"); public static readonly MongoId BARTER_MEDICAL_TOOLS = new MongoId("619cc01e0a7c3a1a2731940c"); - public static readonly MongoId BARTER_METAL_CUTTING_SCISSORS = new MongoId( - "5d40419286f774318526545f" - ); + public static readonly MongoId BARTER_METAL_CUTTING_SCISSORS = new MongoId("5d40419286f774318526545f"); public static readonly MongoId BARTER_METAL_FUEL_TANK = new MongoId("5d1b36a186f7742523398433"); - public static readonly MongoId BARTER_METAL_SPARE_PARTS = new MongoId( - "61bf7b6302b3924be92fa8c3" - ); - public static readonly MongoId BARTER_MICROCONTROLLER_BOARD = new MongoId( - "6389c7750ef44505c87f5996" - ); + public static readonly MongoId BARTER_METAL_SPARE_PARTS = new MongoId("61bf7b6302b3924be92fa8c3"); + public static readonly MongoId BARTER_MICROCONTROLLER_BOARD = new MongoId("6389c7750ef44505c87f5996"); public static readonly MongoId BARTER_MILITARY_CABLE = new MongoId("5d0375ff86f774186372f685"); - public static readonly MongoId BARTER_MILITARY_CIRCUIT_BOARD = new MongoId( - "5d0376a486f7747d8050965c" - ); - public static readonly MongoId BARTER_MILITARY_COFDM_WIRELESS_SIGNAL_TRANSMITTER = new MongoId( - "5c052f6886f7746b1e3db148" - ); - public static readonly MongoId BARTER_MILITARY_CORRUGATED_TUBE = new MongoId( - "619cbf476b8a1b37a54eebf8" - ); - public static readonly MongoId BARTER_MILITARY_GYROTACHOMETER = new MongoId( - "5d03784a86f774203e7e0c4d" - ); - public static readonly MongoId BARTER_MILITARY_POWER_FILTER = new MongoId( - "5d0378d486f77420421a5ff4" - ); - public static readonly MongoId BARTER_MR_KERMANS_CAT_HOLOGRAM = new MongoId( - "6638a5474e92f038531e210e" - ); - public static readonly MongoId BARTER_NAILHEAD_FIGURINE = new MongoId( - "679b9cce4e4ed4b3b40ae5c5" - ); + public static readonly MongoId BARTER_MILITARY_CIRCUIT_BOARD = new MongoId("5d0376a486f7747d8050965c"); + public static readonly MongoId BARTER_MILITARY_COFDM_WIRELESS_SIGNAL_TRANSMITTER = new MongoId("5c052f6886f7746b1e3db148"); + public static readonly MongoId BARTER_MILITARY_CORRUGATED_TUBE = new MongoId("619cbf476b8a1b37a54eebf8"); + public static readonly MongoId BARTER_MILITARY_GYROTACHOMETER = new MongoId("5d03784a86f774203e7e0c4d"); + public static readonly MongoId BARTER_MILITARY_POWER_FILTER = new MongoId("5d0378d486f77420421a5ff4"); + public static readonly MongoId BARTER_MR_KERMANS_CAT_HOLOGRAM = new MongoId("6638a5474e92f038531e210e"); + public static readonly MongoId BARTER_NAILHEAD_FIGURINE = new MongoId("679b9cce4e4ed4b3b40ae5c5"); public static readonly MongoId BARTER_NIPPERS = new MongoId("5d40425986f7743185265461"); public static readonly MongoId BARTER_NIXXOR_LENS = new MongoId("5d1b2ffd86f77425243e8d17"); - public static readonly MongoId BARTER_OFZ_30X165MM_SHELL = new MongoId( - "5d0379a886f77420407aa271" - ); + public static readonly MongoId BARTER_OFZ_30X165MM_SHELL = new MongoId("5d0379a886f77420407aa271"); public static readonly MongoId BARTER_OLD_FIRESTEEL = new MongoId("5bc9c377d4351e3bac12251b"); - public static readonly MongoId BARTER_OLIVIER_SALAD_BOX = new MongoId( - "67586b7e49c2fa592e0d8ed9" - ); + public static readonly MongoId BARTER_OLIVIER_SALAD_BOX = new MongoId("67586b7e49c2fa592e0d8ed9"); public static readonly MongoId BARTER_OPHTHALMOSCOPE = new MongoId("5af0534a86f7743b6f354284"); - public static readonly MongoId BARTER_ORTODONTOX_TOOTHPASTE = new MongoId( - "5d4041f086f7743cac3f22a7" - ); + public static readonly MongoId BARTER_ORTODONTOX_TOOTHPASTE = new MongoId("5d4041f086f7743cac3f22a7"); public static readonly MongoId BARTER_OX_BLEACH = new MongoId("59e3556c86f7741776641ac2"); - public static readonly MongoId BARTER_PACK_OF_ARSENIY_BUCKWHEAT = new MongoId( - "6389c6463485cf0eeb260715" - ); - public static readonly MongoId BARTER_PACK_OF_CHLORINE = new MongoId( - "5e2af02c86f7746d420957d4" - ); + public static readonly MongoId BARTER_PACK_OF_ARSENIY_BUCKWHEAT = new MongoId("6389c6463485cf0eeb260715"); + public static readonly MongoId BARTER_PACK_OF_CHLORINE = new MongoId("5e2af02c86f7746d420957d4"); public static readonly MongoId BARTER_PACK_OF_NAILS = new MongoId("590c31c586f774245e3141b2"); public static readonly MongoId BARTER_PACK_OF_SCREWS = new MongoId("59e35ef086f7741777737012"); - public static readonly MongoId BARTER_PACK_OF_SODIUM_BICARBONATE = new MongoId( - "59e35abd86f7741778269d82" - ); - public static readonly MongoId BARTER_PAID_ANTIROACH_SPRAY = new MongoId( - "59e3596386f774176c10a2a2" - ); + public static readonly MongoId BARTER_PACK_OF_SODIUM_BICARBONATE = new MongoId("59e35abd86f7741778269d82"); + public static readonly MongoId BARTER_PAID_ANTIROACH_SPRAY = new MongoId("59e3596386f774176c10a2a2"); public static readonly MongoId BARTER_PARACORD = new MongoId("5c12688486f77426843c7d32"); public static readonly MongoId BARTER_PC_CPU = new MongoId("573477e124597737dd42e191"); - public static readonly MongoId BARTER_PETYA_CROOKER_FIGURINE = new MongoId( - "679b9d43597ba2ed120c3d44" - ); - public static readonly MongoId BARTER_PHASE_CONTROL_RELAY = new MongoId( - "5d1b313086f77425227d1678" - ); - public static readonly MongoId BARTER_PHASED_ARRAY_ELEMENT = new MongoId( - "5d03775b86f774203e7e0c4b" - ); - public static readonly MongoId BARTER_PHYSICAL_BITCOIN = new MongoId( - "59faff1d86f7746c51718c9c" - ); - public static readonly MongoId BARTER_PIECE_OF_PLEXIGLASS = new MongoId( - "59e366c186f7741778269d85" - ); + public static readonly MongoId BARTER_PETYA_CROOKER_FIGURINE = new MongoId("679b9d43597ba2ed120c3d44"); + public static readonly MongoId BARTER_PHASE_CONTROL_RELAY = new MongoId("5d1b313086f77425227d1678"); + public static readonly MongoId BARTER_PHASED_ARRAY_ELEMENT = new MongoId("5d03775b86f774203e7e0c4b"); + public static readonly MongoId BARTER_PHYSICAL_BITCOIN = new MongoId("59faff1d86f7746c51718c9c"); + public static readonly MongoId BARTER_PIECE_OF_PLEXIGLASS = new MongoId("59e366c186f7741778269d85"); public static readonly MongoId BARTER_PILE_OF_MEDS = new MongoId("5d1b3a5d86f774252167ba22"); - public static readonly MongoId BARTER_PIPE_GRIP_WRENCH = new MongoId( - "619cbfccbedcde2f5b3f7bdd" - ); + public static readonly MongoId BARTER_PIPE_GRIP_WRENCH = new MongoId("619cbfccbedcde2f5b3f7bdd"); public static readonly MongoId BARTER_PLIERS = new MongoId("590c2b4386f77425357b6123"); public static readonly MongoId BARTER_PLIERS_ELITE = new MongoId("5af04b6486f774195a3ebb49"); - public static readonly MongoId BARTER_PMC_ORIGINS_FIGURINE = new MongoId( - "6841b6b674a3c16f5e03d653" - ); - public static readonly MongoId BARTER_POINTY_GUY_FIGURINE = new MongoId( - "679b9d6390622daf9708da76" - ); - public static readonly MongoId BARTER_POLITICIAN_MUTKEVICH_FIGURINE = new MongoId( - "655c66e40b2de553b618d4b8" - ); - public static readonly MongoId BARTER_PORTABLE_DEFIBRILLATOR = new MongoId( - "5c052e6986f7746b207bc3c9" - ); - public static readonly MongoId BARTER_PORTABLE_POWERBANK = new MongoId( - "5af0561e86f7745f5f3ad6ac" - ); + public static readonly MongoId BARTER_PMC_ORIGINS_FIGURINE = new MongoId("6841b6b674a3c16f5e03d653"); + public static readonly MongoId BARTER_POINTY_GUY_FIGURINE = new MongoId("679b9d6390622daf9708da76"); + public static readonly MongoId BARTER_POLITICIAN_MUTKEVICH_FIGURINE = new MongoId("655c66e40b2de553b618d4b8"); + public static readonly MongoId BARTER_PORTABLE_DEFIBRILLATOR = new MongoId("5c052e6986f7746b207bc3c9"); + public static readonly MongoId BARTER_PORTABLE_POWERBANK = new MongoId("5af0561e86f7745f5f3ad6ac"); public static readonly MongoId BARTER_POWER_CORD = new MongoId("59e36c6f86f774176c10a2a7"); - public static readonly MongoId BARTER_POWER_SUPPLY_UNIT = new MongoId( - "57347c2e24597744902c94a1" - ); - public static readonly MongoId BARTER_PRESS_PASS_ISSUED_FOR_NOICEGUY = new MongoId( - "62a09cb7a04c0c5c6e0a84f8" - ); + public static readonly MongoId BARTER_POWER_SUPPLY_UNIT = new MongoId("57347c2e24597744902c94a1"); + public static readonly MongoId BARTER_PRESS_PASS_ISSUED_FOR_NOICEGUY = new MongoId("62a09cb7a04c0c5c6e0a84f8"); public static readonly MongoId BARTER_PRESSURE_GAUGE = new MongoId("5d1b327086f7742525194449"); - public static readonly MongoId BARTER_PRINTED_CIRCUIT_BOARD = new MongoId( - "590a3b0486f7743954552bdb" - ); + public static readonly MongoId BARTER_PRINTED_CIRCUIT_BOARD = new MongoId("590a3b0486f7743954552bdb"); public static readonly MongoId BARTER_PRINTER_PAPER = new MongoId("577e1c9d2459773cd707c525"); public static readonly MongoId BARTER_PROPANE_TANK_5L = new MongoId("59fafb5d86f774067a6f2084"); - public static readonly MongoId BARTER_RADAR_STATION_SPARE_PARTS = new MongoId( - "66d9f7256916142b3b02276e" - ); + public static readonly MongoId BARTER_RADAR_STATION_SPARE_PARTS = new MongoId("66d9f7256916142b3b02276e"); public static readonly MongoId BARTER_RADIATOR_HELIX = new MongoId("5d1c774f86f7746d6620f8db"); public static readonly MongoId BARTER_RAM_STICK = new MongoId("57347baf24597738002c6178"); public static readonly MongoId BARTER_RATCHET_WRENCH = new MongoId("60391afc25aff57af81f7085"); public static readonly MongoId BARTER_RAVEN_FIGURINE = new MongoId("5e54f62086f774219b0f1937"); - public static readonly MongoId BARTER_RECHARGEABLE_BATTERY = new MongoId( - "590a358486f77429692b2790" - ); + public static readonly MongoId BARTER_RECHARGEABLE_BATTERY = new MongoId("590a358486f77429692b2790"); public static readonly MongoId BARTER_REPELLENT = new MongoId("5e2aef7986f7746d3f3c33f5"); - public static readonly MongoId BARTER_RESHALA_FIGURINE = new MongoId( - "66572be36a723f7f005a066e" - ); + public static readonly MongoId BARTER_RESHALA_FIGURINE = new MongoId("66572be36a723f7f005a066e"); public static readonly MongoId BARTER_RIPSTOP_FABRIC = new MongoId("5e2af4a786f7746d3f3c3400"); - public static readonly MongoId BARTER_ROLER_SUBMARINER_GOLD_WRIST_WATCH = new MongoId( - "59faf7ca86f7740dbe19f6c2" - ); + public static readonly MongoId BARTER_ROLER_SUBMARINER_GOLD_WRIST_WATCH = new MongoId("59faf7ca86f7740dbe19f6c2"); public static readonly MongoId BARTER_ROUND_PLIERS = new MongoId("5d1b31ce86f7742523398394"); public static readonly MongoId BARTER_RYZHY_FIGURINE = new MongoId("655c67782a1356436041c9c5"); public static readonly MongoId BARTER_SCAV_FIGURINE = new MongoId("655c673673a43e23e857aebd"); @@ -2449,92 +1099,48 @@ public static class ItemTpl public static readonly MongoId BARTER_SCREW_NUTS = new MongoId("57347c77245977448d35f6e2"); public static readonly MongoId BARTER_SCREWDRIVER = new MongoId("590c2d8786f774245b1f03f3"); public static readonly MongoId BARTER_SEALED_BOX = new MongoId("67409848d0b2f8eb9b034db9"); - public static readonly MongoId BARTER_SET_OF_FILES_MASTER = new MongoId( - "62a0a0bb621468534a797ad5" - ); + public static readonly MongoId BARTER_SET_OF_FILES_MASTER = new MongoId("62a0a0bb621468534a797ad5"); public static readonly MongoId BARTER_SEWING_KIT = new MongoId("61bf83814088ec1a363d7097"); - public static readonly MongoId BARTER_SHUSTRILO_SEALING_FOAM = new MongoId( - "590c35a486f774273531c822" - ); - public static readonly MongoId BARTER_SHYSHKA_CHRISTMAS_TREE_LIFE_EXTENDER = new MongoId( - "67586c61a0c49554ed0bb4a8" - ); + public static readonly MongoId BARTER_SHUSTRILO_SEALING_FOAM = new MongoId("590c35a486f774273531c822"); + public static readonly MongoId BARTER_SHYSHKA_CHRISTMAS_TREE_LIFE_EXTENDER = new MongoId("67586c61a0c49554ed0bb4a8"); public static readonly MongoId BARTER_SILICONE_TUBE = new MongoId("5d1b39a386f774252339976f"); public static readonly MongoId BARTER_SILVER_BADGE = new MongoId("5bc9bdb8d4351e003562b8a1"); - public static readonly MongoId BARTER_SMOKED_CHIMNEY_DRAIN_CLEANER = new MongoId( - "5e2af00086f7746d3f3c33f7" - ); + public static readonly MongoId BARTER_SMOKED_CHIMNEY_DRAIN_CLEANER = new MongoId("5e2af00086f7746d3f3c33f7"); public static readonly MongoId BARTER_SOAP = new MongoId("5c13cd2486f774072c757944"); public static readonly MongoId BARTER_SPARK_PLUG = new MongoId("590a3c0a86f774385a33c450"); - public static readonly MongoId BARTER_SPECIAL_40DEGREE_FUEL = new MongoId( - "67586bee39b1b82b0d0f9d06" - ); - public static readonly MongoId BARTER_STRIKE_CIGARETTES = new MongoId( - "5734770f24597738025ee254" - ); - public static readonly MongoId BARTER_SURVL_SURVIVOR_LIGHTER = new MongoId( - "5e2af37686f774755a234b65" - ); - public static readonly MongoId BARTER_TAGILLA_FIGURINE = new MongoId( - "66572cbdad599021091c611a" - ); - public static readonly MongoId BARTER_TAGILLAS_WELDING_MASK_ZABEY_REPLICA = new MongoId( - "67ea616a74f765cefd009fb7" - ); - public static readonly MongoId BARTER_TAMATTHI_KUNAI_KNIFE_REPLICA = new MongoId( - "66b37ea4c5d72b0277488439" - ); - public static readonly MongoId BARTER_TETRIZ_PORTABLE_GAME_CONSOLE = new MongoId( - "5c12620d86f7743f8b198b72" - ); + public static readonly MongoId BARTER_SPECIAL_40DEGREE_FUEL = new MongoId("67586bee39b1b82b0d0f9d06"); + public static readonly MongoId BARTER_STRIKE_CIGARETTES = new MongoId("5734770f24597738025ee254"); + public static readonly MongoId BARTER_SURVL_SURVIVOR_LIGHTER = new MongoId("5e2af37686f774755a234b65"); + public static readonly MongoId BARTER_TAGILLA_FIGURINE = new MongoId("66572cbdad599021091c611a"); + public static readonly MongoId BARTER_TAGILLAS_WELDING_MASK_ZABEY_REPLICA = new MongoId("67ea616a74f765cefd009fb7"); + public static readonly MongoId BARTER_TAMATTHI_KUNAI_KNIFE_REPLICA = new MongoId("66b37ea4c5d72b0277488439"); + public static readonly MongoId BARTER_TETRIZ_PORTABLE_GAME_CONSOLE = new MongoId("5c12620d86f7743f8b198b72"); public static readonly MongoId BARTER_TOILET_PAPER = new MongoId("5c13cef886f774072e618e82"); public static readonly MongoId BARTER_TOOLSET = new MongoId("590c2e1186f77425357b6124"); public static readonly MongoId BARTER_TOOTHPASTE = new MongoId("57347c93245977448d35f6e3"); public static readonly MongoId BARTER_TP200_TNT_BRICK = new MongoId("60391b0fb847c71012789415"); public static readonly MongoId BARTER_TSHAPED_PLUG = new MongoId("57347cd0245977445a2d6ff1"); - public static readonly MongoId BARTER_TUBE_OF_POXERAM_COLD_WELDING = new MongoId( - "5e2af22086f7746d3f3c33fa" - ); + public static readonly MongoId BARTER_TUBE_OF_POXERAM_COLD_WELDING = new MongoId("5e2af22086f7746d3f3c33fa"); public static readonly MongoId BARTER_UHF_RFID_READER = new MongoId("5c052fb986f7746b2101e909"); - public static readonly MongoId BARTER_ULTRALINK_SATELLITE_INTERNET_STATION = new MongoId( - "6389c88b33a719183c7f63b6" - ); - public static readonly MongoId BARTER_ULTRAVIOLET_LAMP = new MongoId( - "590a3d9c86f774385926e510" - ); + public static readonly MongoId BARTER_ULTRALINK_SATELLITE_INTERNET_STATION = new MongoId("6389c88b33a719183c7f63b6"); + public static readonly MongoId BARTER_ULTRAVIOLET_LAMP = new MongoId("590a3d9c86f774385926e510"); public static readonly MongoId BARTER_USB_ADAPTER = new MongoId("5909e99886f7740c983b9984"); - public static readonly MongoId BARTER_USEC_OPERATIVE_FIGURINE = new MongoId( - "655c663a6689c676ce57af85" - ); - public static readonly MongoId BARTER_UZRGM_GRENADE_FUZE = new MongoId( - "5e2af51086f7746d3f3c3402" - ); - public static readonly MongoId BARTER_VERITAS_GUITAR_PICK = new MongoId( - "5f745ee30acaeb0d490d8c5b" - ); + public static readonly MongoId BARTER_USEC_OPERATIVE_FIGURINE = new MongoId("655c663a6689c676ce57af85"); + public static readonly MongoId BARTER_UZRGM_GRENADE_FUZE = new MongoId("5e2af51086f7746d3f3c3402"); + public static readonly MongoId BARTER_VERITAS_GUITAR_PICK = new MongoId("5f745ee30acaeb0d490d8c5b"); public static readonly MongoId BARTER_VIIBIIN_SNEAKER = new MongoId("66b37eb4acff495a29492407"); - public static readonly MongoId BARTER_VIRTEX_PROGRAMMABLE_PROCESSOR = new MongoId( - "5c05308086f7746b2101e90b" - ); - public static readonly MongoId BARTER_VPX_FLASH_STORAGE_MODULE = new MongoId( - "5c05300686f7746dce784e5d" - ); + public static readonly MongoId BARTER_VIRTEX_PROGRAMMABLE_PROCESSOR = new MongoId("5c05308086f7746b2101e90b"); + public static readonly MongoId BARTER_VPX_FLASH_STORAGE_MODULE = new MongoId("5c05300686f7746dce784e5d"); public static readonly MongoId BARTER_WATER_FILTER = new MongoId("5d1b385e86f774252167b98a"); public static readonly MongoId BARTER_WD40_100ML = new MongoId("590c5bbd86f774785762df04"); public static readonly MongoId BARTER_WD40_400ML = new MongoId("590c5c9f86f77477c91c36e7"); public static readonly MongoId BARTER_WEAPON_PARTS = new MongoId("5d1c819a86f774771b0acd6c"); - public static readonly MongoId BARTER_WILSTON_CIGARETTES = new MongoId( - "573476f124597737e04bf328" - ); + public static readonly MongoId BARTER_WILSTON_CIGARETTES = new MongoId("573476f124597737e04bf328"); public static readonly MongoId BARTER_WOODEN_CLOCK = new MongoId("59e3647686f774176a362507"); public static readonly MongoId BARTER_WORKING_LCD = new MongoId("5d1b304286f774253763a528"); public static readonly MongoId BARTER_WRENCH = new MongoId("590c311186f77424d1667482"); - public static readonly MongoId BARTER_XENOALIEN_FIGURINE = new MongoId( - "679b9d55708cfcb2060b9ae3" - ); - public static readonly MongoId BARTER_XENOMORPH_SEALING_FOAM = new MongoId( - "590c346786f77423e50ed342" - ); + public static readonly MongoId BARTER_XENOALIEN_FIGURINE = new MongoId("679b9d55708cfcb2060b9ae3"); + public static readonly MongoId BARTER_XENOMORPH_SEALING_FOAM = new MongoId("590c346786f77423e50ed342"); public static readonly MongoId BARTER_ZIBBO_LIGHTER = new MongoId("56742c2e4bdc2d95058b456d"); public static readonly MongoId BIPOD_ALL_TEST = new MongoId("665745c8a3c672c7b00bb355"); public static readonly MongoId BIPOD_BT10_V8_ATLAS = new MongoId("6644920d49817dc7d505ca71"); @@ -2544,3556 +1150,1422 @@ public static class ItemTpl public static readonly MongoId BIPOD_PK = new MongoId("6464d870bb2c580352070cc4"); public static readonly MongoId BIPOD_RPD = new MongoId("6513f037e06849f06c0957d7"); public static readonly MongoId BIPOD_SV98 = new MongoId("56ea8222d2720b69698b4567"); - public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575ea4cf6a13a7b7100adc4" - ); - public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "6575ea719c7cad336508e418" - ); - public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575ea3060703324250610da" - ); - public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575ea7c60703324250610e2"); - public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6575ea5cf6a13a7b7100adc8"); - public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575ea6760703324250610de"); - public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "654a8976f414fcea4004d78b" - ); - public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "654a8ae00337d53f9102c2aa" - ); - public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "654a8b0b0337d53f9102c2ae" - ); - public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_GROIN = new MongoId( - "654a8bc5f414fcea4004d79b" - ); - public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "654a8b3df414fcea4004d78f" - ); - public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "654a8b80f414fcea4004d797" - ); - public static readonly MongoId BUILTININSERTS_6B2_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "656fd89bf5a9631d4e042575" - ); - public static readonly MongoId BUILTININSERTS_6B2_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "656fd7c32668ef0402028fb9" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6571baa74cb80d995d0a1490" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "6571babb4076795e5e07383f" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6571b27a6d84a2b8b6007f92" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId( - "6571babf4cb80d995d0a1494" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId( - "6571bac34076795e5e073843" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6571baac6d84a2b8b6007fa3" - ); - public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "6571bab0f41985531a038091" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6570800612755ae0d907acf8" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "657080ca12755ae0d907ad5e" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "65707fc348c7a887f2010432" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId( - "65708165696fe382cf073255" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId( - "65708122f65e2491bf009755" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_LEFT = new MongoId( - "65708070f65e2491bf00972c" - ); - public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId( - "657080a212755ae0d907ad04" - ); - public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65764fae2bc38ef78e07648d" - ); - public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId( - "6576500f526e320fbe03577f" - ); - public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL4_SOFT_ARMOR_FRONT = new MongoId( - "65764e1e2bc38ef78e076489" - ); - public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL4_SOFT_ARMOR_GROIN_FRONT = new MongoId( - "6576504b526e320fbe035783" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575ce45dc9932aed601c616" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "6575ce6f16c2762fba005806" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575ce3716c2762fba0057fd" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575ce8bdc9932aed601c61e"); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId( - "6575ce9db15fef3dd4051628" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6575ce5016c2762fba005802" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId( - "6575cea8b15fef3dd405162c" - ); - public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575ce5befc786cd9101a671"); - public static readonly MongoId BUILTININSERTS_6B515_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "65708afe4a747dbb63005eee" - ); - public static readonly MongoId BUILTININSERTS_6B515_LEVEL4_SOFT_ARMOR_BACK = new MongoId( - "6570880f4a747dbb63005ee5" - ); - public static readonly MongoId BUILTININSERTS_6B515_LEVEL4_SOFT_ARMOR_FRONT = new MongoId( - "657087577f6d4590ac0d2109" - ); - public static readonly MongoId BUILTININSERTS_6B515_LEVEL4_SOFT_ARMOR_GROIN = new MongoId( - "65708b4c4a747dbb63005ef3" - ); - public static readonly MongoId BUILTININSERTS_6B516_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65764bc22bc38ef78e076485" - ); - public static readonly MongoId BUILTININSERTS_6B516_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "65764c39526e320fbe035777" - ); - public static readonly MongoId BUILTININSERTS_6B516_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "65764a4cd8537eb26a0355ee" - ); - public static readonly MongoId BUILTININSERTS_6B516_LEVEL3_SOFT_ARMOR_GROIN = new MongoId( - "65764c6b526e320fbe03577b" - ); - public static readonly MongoId BUILTININSERTS_ADEPT_NEOSTEEL_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657f9ef6c6679fefb3051e1f"); - public static readonly MongoId BUILTININSERTS_ADEPT_NEOSTEEL_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657f9eb7e9433140ad0baf86"); - public static readonly MongoId BUILTININSERTS_ALTIN_LEVEL5_HELMET_ARMOR_EARS = new MongoId( - "657bc107aab96fccee08be9f" - ); - public static readonly MongoId BUILTININSERTS_ALTIN_LEVEL5_HELMET_ARMOR_NAPE = new MongoId( - "657bc0d8a1c61ee0c303632f" - ); - public static readonly MongoId BUILTININSERTS_ALTIN_LEVEL5_HELMET_ARMOR_TOP = new MongoId( - "657bc06daab96fccee08be9b" - ); - public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65730c2213a2f660f60bea96" - ); - public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "65730c0e292ecadbfa09ad49" - ); - public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "65730c2b292ecadbfa09ad50" - ); - public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "65730c35292ecadbfa09ad54" - ); - public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6570f71dd67d0309980a7af8" - ); - public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6570f6e774d84423df065f21" - ); - public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_LEFT = new MongoId( - "6570f74774d84423df065f25" - ); - public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_RIGHT = new MongoId( - "6570f79c4c65ab77a6015121" - ); - public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575ef6bf6a13a7b7100b093" - ); - public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575ef599c7cad336508e453" - ); - public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6575ef78da698a4e980677eb" - ); - public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575ef7f9c7cad336508e457"); - public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6570e479a6560e4ee50c2b02" - ); - public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6570e5100b57c03ec90b970a" - ); - public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_LEFT = new MongoId( - "6570e5674cc0d2ab1e05edbb" - ); - public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId( - "6570e59b0b57c03ec90b970e" - ); - public static readonly MongoId BUILTININSERTS_AVS_MBAV_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575f5e1da698a4e98067869" - ); - public static readonly MongoId BUILTININSERTS_AVS_MBAV_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575f5cbf6a13a7b7100b0bf" - ); - public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "657322a4cea9255e21023651" - ); - public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "657322988c1cc6dcd9098b2d" - ); - public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "657322acd9d89ff7ac0d961b" - ); - public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("657322b7d9d89ff7ac0d961f"); - public static readonly MongoId BUILTININSERTS_BALLISTICARMORCO_BASTION_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("66b61ce0c5d72b027748867e"); - public static readonly MongoId BUILTININSERTS_BALLISTICARMORCO_BASTION_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("66b61cfae98be930d701c029"); - public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6573102b292ecadbfa09b38d" - ); - public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6573101e292ecadbfa09b389" - ); - public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "65731038292ecadbfa09b391" - ); - public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("65731045f31d5be00e08a75a"); - public static readonly MongoId BUILTININSERTS_BNTI_LSHZ_2DTM_LEVEL4_HELMET_ARMOR_EARS = - new MongoId("657fa07387e11c61f70bface"); - public static readonly MongoId BUILTININSERTS_BNTI_LSHZ_2DTM_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657fa04ac6679fefb3051e24"); - public static readonly MongoId BUILTININSERTS_BNTI_LSHZ_2DTM_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657fa009d4caf976440afe3a"); - public static readonly MongoId BUILTININSERTS_CLASS_TOR2_LEVEL3_HELMET_ARMOR_EARS = new MongoId( - "657fa186d4caf976440afe42" - ); - public static readonly MongoId BUILTININSERTS_CLASS_TOR2_LEVEL3_HELMET_ARMOR_NAPE = new MongoId( - "657fa168e9433140ad0baf8e" - ); - public static readonly MongoId BUILTININSERTS_CLASS_TOR2_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "657fa0fcd4caf976440afe3e" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6570fa1f4c65ab77a601512f" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "6570fb8f4c65ab77a601514d" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6570fae34c65ab77a6015146" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_LEFT = new MongoId( - "6570fb22584a51c23e03251f" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_LEFT_ARM = new MongoId( - "6570fbdd74d84423df065f60" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId( - "6570fb6ad3eefd23430f8c7c" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_RIGHT_ARM = - new MongoId("6570fc41d3eefd23430f8c83"); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "657333232cc8dfad2c0a3d97" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "6573334aca0ca984940a2d5b" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "65733312ca0ca984940a2d53" - ); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_LEFT_ARM = - new MongoId("65733375b7a8d286530e3dd7"); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("657333302cc8dfad2c0a3d9b"); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_RIGHT_ARM = - new MongoId("6573337f2cc8dfad2c0a3da7"); - public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6573333eca0ca984940a2d57"); - public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6570e87c23c1f638ef0b0ee2" - ); - public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6570e83223c1f638ef0b0ede" - ); - public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_GROIN = new MongoId( - "6570e90b3a5689d85f08db97" - ); - public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_LEFT = new MongoId( - "6570e8a623c1f638ef0b0ee6" - ); - public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_RIGHT = new MongoId( - "6570e8e7ab49e964120b4563" - ); - public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575f25ada698a4e98067836" - ); - public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575f24ff6a13a7b7100b09e" - ); - public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6575f2649cfdfe416f0399b8"); - public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575f26d9c7cad336508e480"); - public static readonly MongoId BUILTININSERTS_CRYE_PRECISION_AIRFRAME_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657f98fbada5fadd1f07a585"); - public static readonly MongoId BUILTININSERTS_CRYE_PRECISION_AIRFRAME_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657f9897f4c82973640b235e"); - public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "65732df4d0acf75aea06c87b" - ); - public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "65732e215d3a3129fb05f3e1" - ); - public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "65732de75d3a3129fb05f3dd" - ); - public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("65732e30dd8739f6440ef383"); - public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("65732e05d0acf75aea06c87f"); - public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("65732e0f6784ca384b0167ad"); - public static readonly MongoId BUILTININSERTS_DIAMOND_AGE_BASTION_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657f9a94ada5fadd1f07a589"); - public static readonly MongoId BUILTININSERTS_DIAMOND_AGE_BASTION_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657f9a55c6679fefb3051e19"); - public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_EARS = - new MongoId("657ba75e23918923cb0df573"); - public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_NAPE = - new MongoId("657ba737b7e9ca9a02045bf6"); - public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_SHIELD = - new MongoId("658188edf026a90c1708c827"); - public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_TOP = new MongoId( - "657ba6c3c6f689d3a205b857" - ); - public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6572e059371fccfbf909d5dc" - ); - public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6572e048371fccfbf909d5d8" - ); - public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6572e06219b4b511af012f89" - ); - public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "6572e06819b4b511af012f8d" - ); - public static readonly MongoId BUILTININSERTS_EXFIL_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "655200ba0ef76cf7be09d528" - ); - public static readonly MongoId BUILTININSERTS_EXFIL_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "6551fec55d0cf82e51014288" - ); - public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_EARS = - new MongoId("657ba8eab7e9ca9a02045bfd"); - public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_NAPE = - new MongoId("657ba8bccfcf63c951052dab"); - public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_SHIELD = - new MongoId("65818e4e566d2de69901b1b1"); - public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_TOP = - new MongoId("657ba85ecfcf63c951052da7"); - public static readonly MongoId BUILTININSERTS_FORT_KIVER_M_LEVEL3_HELMET_ARMOR_EARS = - new MongoId("657baecbc6f689d3a205b863"); - public static readonly MongoId BUILTININSERTS_FORT_KIVER_M_LEVEL3_HELMET_ARMOR_NAPE = - new MongoId("657baeaacfcf63c951052db3"); - public static readonly MongoId BUILTININSERTS_FORT_KIVER_M_LEVEL3_HELMET_ARMOR_TOP = - new MongoId("657bae18b7e9ca9a02045c0a"); - public static readonly MongoId BUILTININSERTS_GALVION_CAIMAN_LEVEL3_HELMET_ARMOR_NAPE = - new MongoId("657bbb31b30eca9763051183"); - public static readonly MongoId BUILTININSERTS_GALVION_CAIMAN_LEVEL3_HELMET_ARMOR_TOP = - new MongoId("657bbad7a1c61ee0c3036323"); - public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "657326978c1cc6dcd9098b56" - ); - public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "657326bc5d3a3129fb05f36b" - ); - public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "65732688d9d89ff7ac0d9c4c" - ); - public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "657326a28c1cc6dcd9098b5a" - ); - public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "657326b08c1cc6dcd9098b5e" - ); - public static readonly MongoId BUILTININSERTS_HIGHCOM_STRIKER_ACHHC_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657f9605f4c82973640b2358"); - public static readonly MongoId BUILTININSERTS_HIGHCOM_STRIKER_ACHHC_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657f95bff92cd718b701550c"); - public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6570f35cd67d0309980a7acb" - ); - public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6570f30b0921c914bf07964c" - ); - public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_LEFT = new MongoId( - "6570f3890b4ae5847f060dad" - ); - public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId( - "6570f3bb0b4ae5847f060db2" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575c3beefc786cd9101a5ed" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_COLLAR = - new MongoId("6575c3ec52b7f8c76a05ee39"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575c3b3dc9932aed601c5f4" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_LEFT_ARM = - new MongoId("6575c3fd52b7f8c76a05ee3d"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6575c3cdc6700bd6b40e8a90"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_RIGHT_ARM = - new MongoId("6575c40c52b7f8c76a05ee41"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575c3dfdc9932aed601c5f8"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575c2be52b7f8c76a05ee25" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_COLLAR = - new MongoId("6575c2e4efc786cd9101a5dd"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575c2adefc786cd9101a5d9" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_GROIN_BACK = - new MongoId("6575c326c6700bd6b40e8a80"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575c31b52b7f8c76a05ee35"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_LEFT_ARM = - new MongoId("6575c2f7efc786cd9101a5e1"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6575c2cd52b7f8c76a05ee29"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_RIGHT_ARM = - new MongoId("6575c30352b7f8c76a05ee31"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575c2d852b7f8c76a05ee2d"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575c34bc6700bd6b40e8a84" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_COLLAR = - new MongoId("6575c373dc9932aed601c5ec"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575c342efc786cd9101a5e5" - ); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_GROIN_BACK = - new MongoId("6575c390efc786cd9101a5e9"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575c385dc9932aed601c5f0"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6575c35bc6700bd6b40e8a88"); - public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575c366c6700bd6b40e8a8c"); - public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65705c3c14f2ed6d7d0b7738" - ); - public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "65705cea4916448ae1050897" - ); - public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "65704de13e7bba58ea0285c8" - ); - public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "65705c777260e1139e091408" - ); - public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("65705cb314f2ed6d7d0b773c"); - public static readonly MongoId BUILTININSERTS_KOLPAK_1S_4ML_LEVEL2_HELMET_ARMOR_EARS = - new MongoId("657ba57af58ba5a62501079e"); - public static readonly MongoId BUILTININSERTS_KOLPAK_1S_4ML_LEVEL2_HELMET_ARMOR_NAPE = - new MongoId("657ba5439ba22f103e08139f"); - public static readonly MongoId BUILTININSERTS_KOLPAK_1S_4ML_LEVEL2_HELMET_ARMOR_TOP = - new MongoId("657ba50c23918923cb0df56c"); - public static readonly MongoId BUILTININSERTS_KORA_KULON_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "657049d23425b19bbc0502f0" - ); - public static readonly MongoId BUILTININSERTS_KORA_KULON_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6570495b45d573133d0d6adb" - ); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65731b4fcea9255e2102360e" - ); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "65731b666e709cddd001ec43" - ); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "65731b46cea9255e2102360a" - ); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_GROIN_BACK = - new MongoId("65731b6b6042b0f210020ef6"); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_GROIN_FRONT = - new MongoId("65731b716e709cddd001ec47"); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_LEFT_SIDE = - new MongoId("65731b576e709cddd001ec3f"); - public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("65731b60ff6dc44a7d068c4a"); - public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_LEFT_ARM = new MongoId( - "654a8b60f414fcea4004d793" - ); - public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_PLATE_BACK = new MongoId( - "655751db58aa1b6dbd0cc295" - ); - public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_PLATE_FRONT = new MongoId( - "6557519ac9b1d9bdcb0777e1" - ); - public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_RIGHT_ARM = new MongoId( - "654a8ba90337d53f9102c2b2" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "64ad2d8d7e2fcecf0305533f" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "64ad2dd30b9840e4c80c2489" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "64ad2dac6f9247c2f4012439" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId( - "64afee8e9f589807e30dc68a" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "64ad2dba0b9840e4c80c2485" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId( - "64afeecb977493a0ee026213" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "64ad2dc66f9247c2f401243d" - ); - public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_STOMACH = new MongoId( - "64afef49977493a0ee026217" - ); - public static readonly MongoId BUILTININSERTS_LSHZ_LEVEL3_HELMET_ARMOR_NAPE = new MongoId( - "657bb99db30eca976305117f" - ); - public static readonly MongoId BUILTININSERTS_LSHZ_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "657bb92fa1c61ee0c303631f" - ); - public static readonly MongoId BUILTININSERTS_LSHZ5_VULKAN5_LEVEL6_HELMET_ARMOR_EARS = - new MongoId("657bbefeb30eca9763051189"); - public static readonly MongoId BUILTININSERTS_LSHZ5_VULKAN5_LEVEL6_HELMET_ARMOR_NAPE = - new MongoId("657bbed0aab96fccee08be96"); - public static readonly MongoId BUILTININSERTS_LSHZ5_VULKAN5_LEVEL6_HELMET_ARMOR_TOP = - new MongoId("657bbe73a1c61ee0c303632b"); - public static readonly MongoId BUILTININSERTS_MASKA1SHA_LEVEL4_HELMET_ARMOR_EARS = new MongoId( - "657112fa818110db4600aa6b" - ); - public static readonly MongoId BUILTININSERTS_MASKA1SHA_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "6571138e818110db4600aa71" - ); - public static readonly MongoId BUILTININSERTS_MASKA1SHA_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "6571133d22996eaf11088200" - ); - public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6572fc8c9a866b80ab07eb5d" - ); - public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6572fc809a866b80ab07eb59" - ); - public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6572fc989a866b80ab07eb61" - ); - public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "6572fca39a866b80ab07eb65" - ); - public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65702fe593b7ea9c330f4ce8" - ); - public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "65702f87722744627e05cdb8" - ); - public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6570305d93b7ea9c330f4ced"); - public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("65703472c9030b928a0a8a78"); - public static readonly MongoId BUILTININSERTS_MSA_GALLET_TC800_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657f9cb587e11c61f70bfaca"); - public static readonly MongoId BUILTININSERTS_MSA_GALLET_TC800_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657f9c78ada5fadd1f07a58d"); - public static readonly MongoId BUILTININSERTS_MSA_TC2001_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "657f8b05f4c82973640b2348" - ); - public static readonly MongoId BUILTININSERTS_MSA_TC2001_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "657f8a8d7db258e5600fe33d" - ); - public static readonly MongoId BUILTININSERTS_MSA_TC2002_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "657f8b43f92cd718b70154fb" - ); - public static readonly MongoId BUILTININSERTS_MSA_TC2002_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "657f8b94f92cd718b70154ff" - ); - public static readonly MongoId BUILTININSERTS_MTEK_FLUX_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "676307b4d9ec0af3d9001fa8" - ); - public static readonly MongoId BUILTININSERTS_MTEK_FLUX_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "676307c004856a0b3c0dfffd" - ); - public static readonly MongoId BUILTININSERTS_MTEK_STRIKE_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("676307d3d9ec0af3d9001fac"); - public static readonly MongoId BUILTININSERTS_MTEK_STRIKE_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "676307ded8b241b4f703a3e8" - ); - public static readonly MongoId BUILTININSERTS_NFM_HJELM_LEVEL3_HELMET_ARMOR_NAPE = new MongoId( - "657bbcffbbd440df880b2dd5" - ); - public static readonly MongoId BUILTININSERTS_NFM_HJELM_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "657bbcc9a1c61ee0c3036327" - ); - public static readonly MongoId BUILTININSERTS_OPS_CORE_FASTMT_LEVEL4_HELMET_ARMOR_NAPE = - new MongoId("657f8f10f4c82973640b2350"); - public static readonly MongoId BUILTININSERTS_OPS_CORE_FASTMT_LEVEL4_HELMET_ARMOR_TOP = - new MongoId("657f8ec5f4c82973640b234c"); - public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "65703fa06584602f7d057a8e" - ); - public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "65703d866584602f7d057a8a" - ); - public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "65703fe46a912c8b5c03468b" - ); - public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "657040374e67e8ec7a0d261c" - ); - public static readonly MongoId BUILTININSERTS_RATNIK_6B47_LEVEL3_HELMET_ARMOR_EARS = - new MongoId("657babc6f58ba5a6250107a2"); - public static readonly MongoId BUILTININSERTS_RATNIK_6B47_LEVEL3_HELMET_ARMOR_NAPE = - new MongoId("657bab6ec6f689d3a205b85f"); - public static readonly MongoId BUILTININSERTS_RATNIK_6B47_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "657baaf0b7e9ca9a02045c02" - ); - public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6572f1d60103b4a3270332db" - ); - public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6572f1ca4c8d903cc60c874e" - ); - public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6572f1f7ea457732140ce879"); - public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6572f1e10103b4a3270332df" - ); - public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6572f1edea457732140ce875"); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575dd519e27f4a85e081146" - ); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "6575dd769d3a0ddf660b904b" - ); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575dd3e9e27f4a85e081142" - ); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_GROIN_BACK = - new MongoId("6575dd94945bf78edd04c43c"); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575dd800546f8b1de093df6"); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6575dd64945bf78edd04c438" - ); - public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575dd6e9d3a0ddf660b9047"); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575d9b8945bf78edd04c427" - ); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "6575d9d8945bf78edd04c42b" - ); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575d9a79e27f4a85e08112d" - ); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_GROIN_BACK = - new MongoId("6575d9f816c2762fba00588d"); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575d9e7945bf78edd04c42f"); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId( - "6575da07945bf78edd04c433" - ); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6575d9c40546f8b1de093dee" - ); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId( - "6575da159e27f4a85e081131" - ); - public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575d9cf0546f8b1de093df2"); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_EARS = new MongoId( - "66bdc2c90b603c26902b2018" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_EYES = new MongoId( - "66bdc2d051aa8c345646d03f" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_JAW = new MongoId( - "66bdc2d9408f1e66eb4fd957" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_NAPE = new MongoId( - "66bdc2e25f17154509115d1e" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "66bdc2ea8cbd597c9c2f9360" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_EARS = new MongoId( - "65711b706d197c216005b31c" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_EYES = new MongoId( - "65711b9b65daf6aa960c9b1b" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_JAW = new MongoId( - "65711bc79eb8c145180dbba1" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "65711b489eb8c145180dbb9d" - ); - public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "65711b07a330b8c9060f7b01" - ); - public static readonly MongoId BUILTININSERTS_RYS_T_LEVEL5_HELMET_ARMOR_EARS = new MongoId( - "657bc2e7b30eca976305118d" - ); - public static readonly MongoId BUILTININSERTS_RYS_T_LEVEL5_HELMET_ARMOR_NAPE = new MongoId( - "657bc2c5a1c61ee0c3036333" - ); - public static readonly MongoId BUILTININSERTS_RYS_T_LEVEL5_HELMET_ARMOR_TOP = new MongoId( - "657bc285aab96fccee08bea3" - ); - public static readonly MongoId BUILTININSERTS_SFERAS_SSSH94_LEVEL3_HELMET_ARMOR_EARS = - new MongoId("657bb7d7b30eca9763051176"); - public static readonly MongoId BUILTININSERTS_SFERAS_SSSH94_LEVEL3_HELMET_ARMOR_NAPE = - new MongoId("657bb79ba1c61ee0c303631a"); - public static readonly MongoId BUILTININSERTS_SFERAS_SSSH94_LEVEL3_HELMET_ARMOR_TOP = - new MongoId("657bb70486c7f9ef7a009936"); - public static readonly MongoId BUILTININSERTS_SHLEMOFON_TSH_4ML_LEVEL1_HELMET_ARMOR_EARS = - new MongoId("657ba18923918923cb0df568"); - public static readonly MongoId BUILTININSERTS_SHLEMOFON_TSH_4ML_LEVEL1_HELMET_ARMOR_NAPE = - new MongoId("657ba145e57570b7f80a17ff"); - public static readonly MongoId BUILTININSERTS_SHLEMOFON_TSH_4ML_LEVEL1_HELMET_ARMOR_TOP = - new MongoId("657ba096e57570b7f80a17fb"); - public static readonly MongoId BUILTININSERTS_SLICK_BLACK_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575e72660703324250610c7" - ); - public static readonly MongoId BUILTININSERTS_SLICK_BLACK_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575e71760703324250610c3" - ); - public static readonly MongoId BUILTININSERTS_SSH68_LEVEL3_HELMET_ARMOR_EARS = new MongoId( - "657119fea330b8c9060f7afc" - ); - public static readonly MongoId BUILTININSERTS_SSH68_LEVEL3_HELMET_ARMOR_NAPE = new MongoId( - "657119d49eb8c145180dbb95" - ); - public static readonly MongoId BUILTININSERTS_SSH68_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "6571199565daf6aa960c9b10" - ); - public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_BACK = - new MongoId("66b8b20c5891c84aab75cb96"); - public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_FRONT = - new MongoId("66b8b217c5d72b02774887b4"); - public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("66b8b223a7f72d197e70bed3"); - public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("66b8b22b78bbc0200425fb20"); - public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_BACK = - new MongoId("66b884eaacff495a29492849"); - public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_FRONT = - new MongoId("66b884f4c5d72b02774886eb"); - public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_GROIN_FRONT = - new MongoId("66b884fd7994640992013b37"); - public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_LEFT_SIDE = - new MongoId("66b8851678bbc0200425fa03"); - public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("66b88521a7f72d197e70be3b"); - public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6572eb1b04ee6483ef039882" - ); - public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6572eb0e55beba16bc04079f" - ); - public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6572eb865b5eac12f10a03ee"); - public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6572eb3004ee6483ef039886"); - public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6572eb3b04ee6483ef03988a"); - public static readonly MongoId BUILTININSERTS_TAC_KEK_FAST_MT_LEVEL1_HELMET_ARMOR_NAPE = - new MongoId("657ba34b9ba22f103e08139b"); - public static readonly MongoId BUILTININSERTS_TAC_KEK_FAST_MT_LEVEL1_HELMET_ARMOR_TOP = - new MongoId("657ba2eef58ba5a625010798"); - public static readonly MongoId BUILTININSERTS_TACTEC_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575bca0dc9932aed601c5d7" - ); - public static readonly MongoId BUILTININSERTS_TACTEC_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575bc88c6700bd6b40e8a57" - ); - public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6572e52f73c0eabb700109a0" - ); - public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6572e5221b5bc1185508c24f" - ); - public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6572e53c73c0eabb700109a4" - ); - public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6572e54873c0eabb700109a8"); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6575d56b16c2762fba005818" - ); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "6575d598b15fef3dd4051678" - ); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6575d561b15fef3dd4051670" - ); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_GROIN_FRONT = - new MongoId("6575d5a616c2762fba005820"); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_LEFT_ARM = - new MongoId("6575d5b316c2762fba005824"); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_LEFT_SIDE = - new MongoId("6575d57a16c2762fba00581c"); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_RIGHT_ARM = - new MongoId("6575d5bd16c2762fba005828"); - public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = - new MongoId("6575d589b15fef3dd4051674"); - public static readonly MongoId BUILTININSERTS_TROOPER_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "6570e0610b57c03ec90b96ef" - ); - public static readonly MongoId BUILTININSERTS_TROOPER_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "6570e025615f54368b04fcb0" - ); - public static readonly MongoId BUILTININSERTS_TV110_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6570df9c615f54368b04fca9" - ); - public static readonly MongoId BUILTININSERTS_TV110_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6570df294cc0d2ab1e05ed74" - ); - public static readonly MongoId BUILTININSERTS_TV115_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6570658a89fd4926380b7346" - ); - public static readonly MongoId BUILTININSERTS_TV115_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6570653e89fd4926380b733e" - ); - public static readonly MongoId BUILTININSERTS_ULACH_LEVEL4_HELMET_ARMOR_EARS = new MongoId( - "657112ce22996eaf110881fb" - ); - public static readonly MongoId BUILTININSERTS_ULACH_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "657112a4818110db4600aa66" - ); - public static readonly MongoId BUILTININSERTS_ULACH_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "657112234269e9a568089eac" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_HELMET_ARMOR_EARS = new MongoId( - "654a9189bcc67a392b056c79" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_HELMET_ARMOR_NAPE = new MongoId( - "654a91068e1ce698150fd1e2" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_HELMET_ARMOR_TOP = new MongoId( - "654a90aff4f81a421b0a7c86" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "657045741bd9beedc40b7299" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "657044e971369562b300ce9b" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "657045b97e80617cee095bda" - ); - public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "6570460471369562b300ce9f" - ); - public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_BACK = new MongoId( - "6571dbda88ead79fcf091d75" - ); - public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId( - "6571dbef88ead79fcf091d79" - ); - public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_FRONT = new MongoId( - "6571dbd388ead79fcf091d71" - ); - public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6571dbe07c02ae206002502e" - ); - public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "6571dbeaee8ec43d520cf89e" - ); - public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_BACK = new MongoId( - "657642b0e6d5dd75f40688a5" - ); - public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId( - "657643a220cc24d17102b14c" - ); - public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_FRONT = new MongoId( - "65764275d8537eb26a0355e9" - ); - public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId( - "6576434820cc24d17102b148" - ); - public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId( - "657643732bc38ef78e076477" - ); - public static readonly MongoId BUILTININSERTS_ZSH_1_2M_LEVEL4_HELMET_ARMOR_EARS = new MongoId( - "657f92e7f4c82973640b2354" - ); - public static readonly MongoId BUILTININSERTS_ZSH_1_2M_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( - "657f92acada5fadd1f07a57e" - ); - public static readonly MongoId BUILTININSERTS_ZSH_1_2M_LEVEL4_HELMET_ARMOR_TOP = new MongoId( - "657f925dada5fadd1f07a57a" - ); - public static readonly MongoId CHARGE_AI_AXMC_338_LM_BOLT_ASSEMBLY = new MongoId( - "62811cd7308cb521f87a8f99" - ); - public static readonly MongoId CHARGE_AK_CSS_KNURLED_CHARGING_HANDLE = new MongoId( - "6130ca3fd92c473c77020dbd" - ); - public static readonly MongoId CHARGE_AK_ZENIT_RP1_CHARGING_HANDLE = new MongoId( - "5648ac824bdc2ded0b8b457d" - ); - public static readonly MongoId CHARGE_AR10_KAC_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId( - "5df8e085bb49d91fb446d6a8" - ); - public static readonly MongoId CHARGE_AR10_KAC_CHARGING_HANDLE = new MongoId( - "5df8e053bb49d91fb446d6a6" - ); - public static readonly MongoId CHARGE_AR15_ADAR_215_CHARGING_HANDLE = new MongoId( - "5c0faf68d174af02a96260b8" - ); - public static readonly MongoId CHARGE_AR15_BADGER_ORDNANCE_TACTICAL_CHARGING_HANDLE_LATCH = - new MongoId("56ea7165d2720b6e518b4583"); - public static readonly MongoId CHARGE_AR15_COLT_CHARGING_HANDLE = new MongoId( - "55d44fd14bdc2d962f8b456e" - ); - public static readonly MongoId CHARGE_AR15_DANIEL_DEFENSE_GRIPNRIP_CHARGING_HANDLE = - new MongoId("651bf5617b3b552ef6712cb7"); - public static readonly MongoId CHARGE_AR15_GEISSELE_ACH_CHARGING_HANDLE_DDC = new MongoId( - "5ea16d4d5aad6446a939753d" - ); - public static readonly MongoId CHARGE_AR15_HK_EXTENDED_LATCH_CHARGING_HANDLE = new MongoId( - "5bb20dbcd4351e44f824c04e" - ); - public static readonly MongoId CHARGE_AR15_MAGPUL_BAD_LEVER_BOLT_RELEASE = new MongoId( - "675307301f7c19a9780f2668" - ); - public static readonly MongoId CHARGE_AR15_MASP_INDUSTRIES_AMBIDEXTROUS_BATTLE_CHARGING_HANDLE = - new MongoId("6033749e88382f4fab3fd2c5"); - public static readonly MongoId CHARGE_AR15_RADIAN_WEAPONS_RAPTOR_CHARGING_HANDLE_FDE = - new MongoId("5b2240bf5acfc40dc528af69"); - public static readonly MongoId CHARGE_AR15_RADIAN_WEAPONS_RAPTOR_CHARGING_HANDLE_TUNGSTEN_GREY = - new MongoId("5d44334ba4b9362b346d1948"); - public static readonly MongoId CHARGE_AR15_RAINIER_ARMS_AVALANCHE_MOD2_CHARGING_HANDLE = - new MongoId("5f633ff5c444ce7e3c30a006"); - public static readonly MongoId CHARGE_BENELLI_M3_SUPER_90_CHARGING_HANDLE = new MongoId( - "625ec45bb14d7326ac20f572" - ); - public static readonly MongoId CHARGE_DO_NOT_USEAI_AXMC_762X51MM_BOLT_ASSEMBLY = new MongoId( - "62811d61578c54356d6d67ea" - ); - public static readonly MongoId CHARGE_FN_P90_CHARGING_HANDLE = new MongoId( - "5cc6ea78e4a949000e1ea3c1" - ); - public static readonly MongoId CHARGE_FN_P90_KM_THE_HANDLER_CHARGING_HANDLE = new MongoId( - "5cc6ea85e4a949000e1ea3c3" - ); - public static readonly MongoId CHARGE_FN_SCAR_CHARGING_HANDLE = new MongoId( - "6181688c6c780c1e710c9b04" - ); - public static readonly MongoId CHARGE_HK_MP5_COCKING_HANDLE = new MongoId( - "5926c32286f774616e42de99" - ); - public static readonly MongoId CHARGE_HK_MP5K_COCKING_HANDLE = new MongoId( - "5d2f2d5748f03572ec0c0139" - ); - public static readonly MongoId CHARGE_HK417_E1_EXTENDED_CHARGING_HANDLE = new MongoId( - "61702d8a67085e45ef140b24" - ); - public static readonly MongoId CHARGE_MCX_CHARGING_HANDLE = new MongoId( - "5fbcc640016cce60e8341acc" - ); - public static readonly MongoId CHARGE_MCXSPEAR_CHARGING_HANDLE = new MongoId( - "6529109524cbe3c74a05e5b7" - ); - public static readonly MongoId CHARGE_MK47_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId( - "606587bd6d0bd7580617bacc" - ); - public static readonly MongoId CHARGE_MP9_CHARGING_HANDLE = new MongoId( - "5de922d4b11454561e39239f" - ); - public static readonly MongoId CHARGE_MPX_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId( - "58949edd86f77409483e16a9" - ); - public static readonly MongoId CHARGE_MPX_GEISSELE_SCH_CHARGING_HANDLE = new MongoId( - "5c5db6b32e221600102611a0" - ); - public static readonly MongoId CHARGE_MPX_GEN_2_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId( - "6761492dc53ebe8c0f0a5efe" - ); - public static readonly MongoId CHARGE_MPX_SINGLE_LATCH_CHARGING_HANDLE = new MongoId( - "58949fac86f77409483e16aa" - ); - public static readonly MongoId CHARGE_SAKO_TRG_M10_338_LM_BOLT_ASSEMBLY = new MongoId( - "673cb4054ff4aa8f86076f4a" - ); - public static readonly MongoId CHARGE_STEYR_AUG_A1_CHARGING_HANDLE = new MongoId( - "62e7c880f68e7a0676050c7c" - ); - public static readonly MongoId CHARGE_STEYR_AUG_A3_CHARGING_HANDLE = new MongoId( - "62ebbc53e3c1e1ec7c02c44f" - ); - public static readonly MongoId COLLIMATOR_AIMPOINT_COMPM4_REFLEX_SIGHT = new MongoId( - "5c7d55de2e221644f31bff68" - ); - public static readonly MongoId COLLIMATOR_AIMPOINT_PRO_REFLEX_SIGHT = new MongoId( - "61659f79d92c473c770213ee" - ); - public static readonly MongoId COLLIMATOR_AXION_KOBRA_EKP1S03_REFLEX_SIGHT_DOVETAIL = - new MongoId("6544d4187c5457729210d277"); - public static readonly MongoId COLLIMATOR_AXION_KOBRA_EKP802_REFLEX_SIGHT_DOVETAIL = - new MongoId("5947db3f86f77447880cf76f"); - public static readonly MongoId COLLIMATOR_AXION_KOBRA_EKP818_REFLEX_SIGHT = new MongoId( - "591c4efa86f7741030027726" - ); - public static readonly MongoId COLLIMATOR_BELOMO_PKAA_DOVETAIL_REFLEX_SIGHT = new MongoId( - "6113d6c3290d254f5e6b27db" - ); - public static readonly MongoId COLLIMATOR_ELCAN_SPECTER_HCO_HOLOGRAPHIC_SIGHT = new MongoId( - "64785e7c19d732620e045e15" - ); - public static readonly MongoId COLLIMATOR_EOTECH_553_HOLOGRAPHIC_SIGHT = new MongoId( - "570fd6c2d2720bc6458b457f" - ); - public static readonly MongoId COLLIMATOR_EOTECH_EXPS30_HOLOGRAPHIC_SIGHT_TAN = new MongoId( - "558022b54bdc2dac148b458d" - ); - public static readonly MongoId COLLIMATOR_EOTECH_HHS1_HYBRID_SIGHT = new MongoId( - "5c07dd120db834001c39092d" - ); - public static readonly MongoId COLLIMATOR_EOTECH_HHS1_HYBRID_SIGHT_TAN = new MongoId( - "5c0a2cec0db834001b7ce47d" - ); - public static readonly MongoId COLLIMATOR_EOTECH_XPS30_HOLOGRAPHIC_SIGHT = new MongoId( - "58491f3324597764bc48fa02" - ); - public static readonly MongoId COLLIMATOR_EOTECH_XPS32_HOLOGRAPHIC_SIGHT = new MongoId( - "584924ec24597768f12ae244" - ); - public static readonly MongoId COLLIMATOR_FN_P90_RING_SIGHT_REFLEX_SIGHT = new MongoId( - "5cebec38d7f00c00110a652a" - ); - public static readonly MongoId COLLIMATOR_HENSOLDT_RV_RED_DOT_SIGHT = new MongoId( - "622efbcb99f4ea1a4d6c9a15" - ); - public static readonly MongoId COLLIMATOR_HOLOSUN_HS401G5_REFLEX_SIGHT = new MongoId( - "5b30b0dc5acfc400153b7124" - ); - public static readonly MongoId COLLIMATOR_KOMZ_RUSAK_REFLEX_SIGHT = new MongoId( - "65f05b9d39dab9e9ec049cfd" - ); - public static readonly MongoId COLLIMATOR_LEAPERS_UTG_REFLEX_SIGHT = new MongoId( - "6165ac8c290d254f5e6b2f6c" - ); - public static readonly MongoId COLLIMATOR_MILKOR_M2A1_GRENADE_LAUNCHER_REFLEX_SIGHT = - new MongoId("6284bd5f95250a29bc628a30"); - public static readonly MongoId COLLIMATOR_NPZ_PK1_OBZOR_DOVETAIL_REFLEX_SIGHT = new MongoId( - "618a5d5852ecee1505530b2a" - ); - public static readonly MongoId COLLIMATOR_OKP7_REFLEX_SIGHT = new MongoId( - "570fd79bd2720bc7458b4583" - ); - public static readonly MongoId COLLIMATOR_OKP7_REFLEX_SIGHT_DOVETAIL = new MongoId( - "57486e672459770abd687134" - ); - public static readonly MongoId COLLIMATOR_SIG_SAUER_ROMEO7_1X30_REFLEX_SIGHT_PROTOTYPE = - new MongoId("6477772ea8a38bb2050ed4db"); - public static readonly MongoId COLLIMATOR_SIG_SAUER_ROMEO8T_REFLEX_SIGHT = new MongoId( - "60a23797a37c940de7062d02" - ); - public static readonly MongoId COLLIMATOR_SR2M_KPSR2_REFLEX_SIGHT = new MongoId( - "62ff9920fe938a24c90c10d2" - ); - public static readonly MongoId COLLIMATOR_TRIJICON_SRS02_REFLEX_SIGHT = new MongoId( - "5d2da1e948f035477b1ce2ba" - ); - public static readonly MongoId COLLIMATOR_VALDAY_KRECHET_REFLEX_SIGHT = new MongoId( - "609a63b6e2ff132951242d09" - ); - public static readonly MongoId COLLIMATOR_VALDAY_PK120_1P87_REFLEX_SIGHT = new MongoId( - "5c0505e00db834001b735073" - ); - public static readonly MongoId COLLIMATOR_VOMZ_PILAD_P1X42_WEAVER_REFLEX_SIGHT = new MongoId( - "584984812459776a704a82a6" - ); - public static readonly MongoId COLLIMATOR_VOMZ_PILAD_TARGETRING_REFLEX_SIGHT = new MongoId( - "609b9e31506cf869cf3eaf41" - ); - public static readonly MongoId COLLIMATOR_VORTEX_RAZOR_AMG_UH1_HOLOGRAPHIC_SIGHT = new MongoId( - "59f9d81586f7744c7506ee62" - ); - public static readonly MongoId COLLIMATOR_WALTHER_MRS_REFLEX_SIGHT = new MongoId( - "570fd721d2720bc5458b4596" - ); - public static readonly MongoId COLLIMATOR_WILCOX_BOSS_XE_REFLEX_SIGHT = new MongoId( - "655f13e0a246670fb0373245" - ); - public static readonly MongoId COMPACTCOLLIMATOR_AIMPOINT_ACRO_P1_REFLEX_SIGHT = new MongoId( - "616442e4faa1272e43152193" - ); - public static readonly MongoId COMPACTCOLLIMATOR_AIMPOINT_MICRO_H2_REFLEX_SIGHT = new MongoId( - "61657230d92c473c770213d7" - ); - public static readonly MongoId COMPACTCOLLIMATOR_AIMPOINT_MICRO_T1_REFLEX_SIGHT = new MongoId( - "58d399e486f77442e0016fe7" - ); - public static readonly MongoId COMPACTCOLLIMATOR_BELOMO_PK06_REFLEX_SIGHT = new MongoId( - "57ae0171245977343c27bfcf" - ); - public static readonly MongoId COMPACTCOLLIMATOR_BURRIS_FASTFIRE_3_REFLEX_SIGHT = new MongoId( - "577d141e24597739c5255e01" - ); - public static readonly MongoId COMPACTCOLLIMATOR_LEUPOLD_DELTAPOINT_REFLEX_SIGHT = new MongoId( - "58d268fc86f774111273f8c2" - ); - public static readonly MongoId COMPACTCOLLIMATOR_SIG_SAUER_ROMEO4_REFLEX_SIGHT = new MongoId( - "5b3116595acfc40019476364" - ); - public static readonly MongoId COMPACTCOLLIMATOR_TRIJICON_RMR_REFLEX_SIGHT = new MongoId( - "5a32aa8bc4a2826c6e06d737" - ); - public static readonly MongoId COMPASS_EYE_MK2_PROFESSIONAL_HANDHELD = new MongoId( - "5f4f9eb969cdc30ff33f09db" - ); - public static readonly MongoId CONTAINER_AMMUNITION_CASE = new MongoId( - "5aafbde786f774389d0cbc0f" - ); - public static readonly MongoId CONTAINER_BALLISTIC_PLATE_CASE = new MongoId( - "67600929bd0a0549d70993f6" - ); - public static readonly MongoId CONTAINER_DOCUMENTS_CASE = new MongoId( - "590c60fc86f77412b13fddcf" - ); + public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575ea4cf6a13a7b7100adc4"); + public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575ea719c7cad336508e418"); + public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575ea3060703324250610da"); + public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575ea7c60703324250610e2"); + public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575ea5cf6a13a7b7100adc8"); + public static readonly MongoId BUILTININSERTS_6B13_KILLA_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575ea6760703324250610de"); + public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_BACK = new MongoId("654a8976f414fcea4004d78b"); + public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("654a8ae00337d53f9102c2aa"); + public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("654a8b0b0337d53f9102c2ae"); + public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_GROIN = new MongoId("654a8bc5f414fcea4004d79b"); + public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("654a8b3df414fcea4004d78f"); + public static readonly MongoId BUILTININSERTS_6B13_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("654a8b80f414fcea4004d797"); + public static readonly MongoId BUILTININSERTS_6B2_LEVEL2_SOFT_ARMOR_BACK = new MongoId("656fd89bf5a9631d4e042575"); + public static readonly MongoId BUILTININSERTS_6B2_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("656fd7c32668ef0402028fb9"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6571baa74cb80d995d0a1490"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("6571babb4076795e5e07383f"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6571b27a6d84a2b8b6007f92"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId("6571babf4cb80d995d0a1494"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId("6571bac34076795e5e073843"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("6571baac6d84a2b8b6007fa3"); + public static readonly MongoId BUILTININSERTS_6B231_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6571bab0f41985531a038091"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6570800612755ae0d907acf8"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("657080ca12755ae0d907ad5e"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("65707fc348c7a887f2010432"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId("65708165696fe382cf073255"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId("65708122f65e2491bf009755"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_LEFT = new MongoId("65708070f65e2491bf00972c"); + public static readonly MongoId BUILTININSERTS_6B232_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId("657080a212755ae0d907ad04"); + public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65764fae2bc38ef78e07648d"); + public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId("6576500f526e320fbe03577f"); + public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL4_SOFT_ARMOR_FRONT = new MongoId("65764e1e2bc38ef78e076489"); + public static readonly MongoId BUILTININSERTS_6B3TM_LEVEL4_SOFT_ARMOR_GROIN_FRONT = new MongoId("6576504b526e320fbe035783"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575ce45dc9932aed601c616"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575ce6f16c2762fba005806"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575ce3716c2762fba0057fd"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575ce8bdc9932aed601c61e"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("6575ce9db15fef3dd4051628"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575ce5016c2762fba005802"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("6575cea8b15fef3dd405162c"); + public static readonly MongoId BUILTININSERTS_6B43_6A_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575ce5befc786cd9101a671"); + public static readonly MongoId BUILTININSERTS_6B515_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("65708afe4a747dbb63005eee"); + public static readonly MongoId BUILTININSERTS_6B515_LEVEL4_SOFT_ARMOR_BACK = new MongoId("6570880f4a747dbb63005ee5"); + public static readonly MongoId BUILTININSERTS_6B515_LEVEL4_SOFT_ARMOR_FRONT = new MongoId("657087577f6d4590ac0d2109"); + public static readonly MongoId BUILTININSERTS_6B515_LEVEL4_SOFT_ARMOR_GROIN = new MongoId("65708b4c4a747dbb63005ef3"); + public static readonly MongoId BUILTININSERTS_6B516_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65764bc22bc38ef78e076485"); + public static readonly MongoId BUILTININSERTS_6B516_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("65764c39526e320fbe035777"); + public static readonly MongoId BUILTININSERTS_6B516_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("65764a4cd8537eb26a0355ee"); + public static readonly MongoId BUILTININSERTS_6B516_LEVEL3_SOFT_ARMOR_GROIN = new MongoId("65764c6b526e320fbe03577b"); + public static readonly MongoId BUILTININSERTS_ADEPT_NEOSTEEL_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f9ef6c6679fefb3051e1f"); + public static readonly MongoId BUILTININSERTS_ADEPT_NEOSTEEL_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f9eb7e9433140ad0baf86"); + public static readonly MongoId BUILTININSERTS_ALTIN_LEVEL5_HELMET_ARMOR_EARS = new MongoId("657bc107aab96fccee08be9f"); + public static readonly MongoId BUILTININSERTS_ALTIN_LEVEL5_HELMET_ARMOR_NAPE = new MongoId("657bc0d8a1c61ee0c303632f"); + public static readonly MongoId BUILTININSERTS_ALTIN_LEVEL5_HELMET_ARMOR_TOP = new MongoId("657bc06daab96fccee08be9b"); + public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65730c2213a2f660f60bea96"); + public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("65730c0e292ecadbfa09ad49"); + public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("65730c2b292ecadbfa09ad50"); + public static readonly MongoId BUILTININSERTS_ANA_M1_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("65730c35292ecadbfa09ad54"); + public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6570f71dd67d0309980a7af8"); + public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6570f6e774d84423df065f21"); + public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_LEFT = new MongoId("6570f74774d84423df065f25"); + public static readonly MongoId BUILTININSERTS_ANA_TACT_M2_LEVEL3_SOFT_ARMOR_RIGHT = new MongoId("6570f79c4c65ab77a6015121"); + public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575ef6bf6a13a7b7100b093"); + public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575ef599c7cad336508e453"); + public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575ef78da698a4e980677eb"); + public static readonly MongoId BUILTININSERTS_ARS_CPC_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575ef7f9c7cad336508e457"); + public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6570e479a6560e4ee50c2b02"); + public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6570e5100b57c03ec90b970a"); + public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_LEFT = new MongoId("6570e5674cc0d2ab1e05edbb"); + public static readonly MongoId BUILTININSERTS_ARSARMA_A18_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId("6570e59b0b57c03ec90b970e"); + public static readonly MongoId BUILTININSERTS_AVS_MBAV_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575f5e1da698a4e98067869"); + public static readonly MongoId BUILTININSERTS_AVS_MBAV_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575f5cbf6a13a7b7100b0bf"); + public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_BACK = new MongoId("657322a4cea9255e21023651"); + public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("657322988c1cc6dcd9098b2d"); + public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("657322acd9d89ff7ac0d961b"); + public static readonly MongoId BUILTININSERTS_BAGARII_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("657322b7d9d89ff7ac0d961f"); + public static readonly MongoId BUILTININSERTS_BALLISTICARMORCO_BASTION_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( + "66b61ce0c5d72b027748867e" + ); + public static readonly MongoId BUILTININSERTS_BALLISTICARMORCO_BASTION_LEVEL4_HELMET_ARMOR_TOP = new MongoId( + "66b61cfae98be930d701c029" + ); + public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6573102b292ecadbfa09b38d"); + public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6573101e292ecadbfa09b389"); + public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("65731038292ecadbfa09b391"); + public static readonly MongoId BUILTININSERTS_BANSHEE_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("65731045f31d5be00e08a75a"); + public static readonly MongoId BUILTININSERTS_BNTI_LSHZ_2DTM_LEVEL4_HELMET_ARMOR_EARS = new MongoId("657fa07387e11c61f70bface"); + public static readonly MongoId BUILTININSERTS_BNTI_LSHZ_2DTM_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657fa04ac6679fefb3051e24"); + public static readonly MongoId BUILTININSERTS_BNTI_LSHZ_2DTM_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657fa009d4caf976440afe3a"); + public static readonly MongoId BUILTININSERTS_CLASS_TOR2_LEVEL3_HELMET_ARMOR_EARS = new MongoId("657fa186d4caf976440afe42"); + public static readonly MongoId BUILTININSERTS_CLASS_TOR2_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657fa168e9433140ad0baf8e"); + public static readonly MongoId BUILTININSERTS_CLASS_TOR2_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657fa0fcd4caf976440afe3e"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6570fa1f4c65ab77a601512f"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("6570fb8f4c65ab77a601514d"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6570fae34c65ab77a6015146"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_LEFT = new MongoId("6570fb22584a51c23e03251f"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_LEFT_ARM = new MongoId("6570fbdd74d84423df065f60"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId("6570fb6ad3eefd23430f8c7c"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_LEVEL2_SOFT_ARMOR_RIGHT_ARM = new MongoId("6570fc41d3eefd23430f8c83"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_BACK = new MongoId("657333232cc8dfad2c0a3d97"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6573334aca0ca984940a2d5b"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("65733312ca0ca984940a2d53"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("65733375b7a8d286530e3dd7"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("657333302cc8dfad2c0a3d9b"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("6573337f2cc8dfad2c0a3da7"); + public static readonly MongoId BUILTININSERTS_CQC_MK4A_P_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6573333eca0ca984940a2d57"); + public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6570e87c23c1f638ef0b0ee2"); + public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6570e83223c1f638ef0b0ede"); + public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_GROIN = new MongoId("6570e90b3a5689d85f08db97"); + public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_LEFT = new MongoId("6570e8a623c1f638ef0b0ee6"); + public static readonly MongoId BUILTININSERTS_CRYE_AVS_LEVEL3_SOFT_ARMOR_RIGHT = new MongoId("6570e8e7ab49e964120b4563"); + public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575f25ada698a4e98067836"); + public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575f24ff6a13a7b7100b09e"); + public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575f2649cfdfe416f0399b8"); + public static readonly MongoId BUILTININSERTS_CRYE_CPC_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575f26d9c7cad336508e480"); + public static readonly MongoId BUILTININSERTS_CRYE_PRECISION_AIRFRAME_LEVEL4_HELMET_ARMOR_NAPE = new MongoId( + "657f98fbada5fadd1f07a585" + ); + public static readonly MongoId BUILTININSERTS_CRYE_PRECISION_AIRFRAME_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f9897f4c82973640b235e"); + public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_BACK = new MongoId("65732df4d0acf75aea06c87b"); + public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("65732e215d3a3129fb05f3e1"); + public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("65732de75d3a3129fb05f3dd"); + public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("65732e30dd8739f6440ef383"); + public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("65732e05d0acf75aea06c87f"); + public static readonly MongoId BUILTININSERTS_DEFENDER2_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("65732e0f6784ca384b0167ad"); + public static readonly MongoId BUILTININSERTS_DIAMOND_AGE_BASTION_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f9a94ada5fadd1f07a589"); + public static readonly MongoId BUILTININSERTS_DIAMOND_AGE_BASTION_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f9a55c6679fefb3051e19"); + public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_EARS = new MongoId("657ba75e23918923cb0df573"); + public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_NAPE = new MongoId("657ba737b7e9ca9a02045bf6"); + public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_SHIELD = new MongoId("658188edf026a90c1708c827"); + public static readonly MongoId BUILTININSERTS_DJETA_PSH97_LEVEL2_HELMET_ARMOR_TOP = new MongoId("657ba6c3c6f689d3a205b857"); + public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6572e059371fccfbf909d5dc"); + public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6572e048371fccfbf909d5d8"); + public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6572e06219b4b511af012f89"); + public static readonly MongoId BUILTININSERTS_DRD_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6572e06819b4b511af012f8d"); + public static readonly MongoId BUILTININSERTS_EXFIL_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("655200ba0ef76cf7be09d528"); + public static readonly MongoId BUILTININSERTS_EXFIL_LEVEL4_HELMET_ARMOR_TOP = new MongoId("6551fec55d0cf82e51014288"); + public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_EARS = new MongoId("657ba8eab7e9ca9a02045bfd"); + public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_NAPE = new MongoId("657ba8bccfcf63c951052dab"); + public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_SHIELD = new MongoId("65818e4e566d2de69901b1b1"); + public static readonly MongoId BUILTININSERTS_FIREFIGHTER_SHPM_LEVEL2_HELMET_ARMOR_TOP = new MongoId("657ba85ecfcf63c951052da7"); + public static readonly MongoId BUILTININSERTS_FORT_KIVER_M_LEVEL3_HELMET_ARMOR_EARS = new MongoId("657baecbc6f689d3a205b863"); + public static readonly MongoId BUILTININSERTS_FORT_KIVER_M_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657baeaacfcf63c951052db3"); + public static readonly MongoId BUILTININSERTS_FORT_KIVER_M_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657bae18b7e9ca9a02045c0a"); + public static readonly MongoId BUILTININSERTS_GALVION_CAIMAN_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657bbb31b30eca9763051183"); + public static readonly MongoId BUILTININSERTS_GALVION_CAIMAN_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657bbad7a1c61ee0c3036323"); + public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_BACK = new MongoId("657326978c1cc6dcd9098b56"); + public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("657326bc5d3a3129fb05f36b"); + public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("65732688d9d89ff7ac0d9c4c"); + public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("657326a28c1cc6dcd9098b5a"); + public static readonly MongoId BUILTININSERTS_GJEL_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("657326b08c1cc6dcd9098b5e"); + public static readonly MongoId BUILTININSERTS_HIGHCOM_STRIKER_ACHHC_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f9605f4c82973640b2358"); + public static readonly MongoId BUILTININSERTS_HIGHCOM_STRIKER_ACHHC_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f95bff92cd718b701550c"); + public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6570f35cd67d0309980a7acb"); + public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6570f30b0921c914bf07964c"); + public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_LEFT = new MongoId("6570f3890b4ae5847f060dad"); + public static readonly MongoId BUILTININSERTS_INTERCEPTOR_LEVEL2_SOFT_ARMOR_RIGHT = new MongoId("6570f3bb0b4ae5847f060db2"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575c3beefc786cd9101a5ed"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575c3ec52b7f8c76a05ee39"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575c3b3dc9932aed601c5f4"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("6575c3fd52b7f8c76a05ee3d"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575c3cdc6700bd6b40e8a90"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("6575c40c52b7f8c76a05ee41"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_A_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575c3dfdc9932aed601c5f8"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575c2be52b7f8c76a05ee25"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575c2e4efc786cd9101a5dd"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575c2adefc786cd9101a5d9"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_GROIN_BACK = new MongoId("6575c326c6700bd6b40e8a80"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575c31b52b7f8c76a05ee35"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("6575c2f7efc786cd9101a5e1"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575c2cd52b7f8c76a05ee29"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("6575c30352b7f8c76a05ee31"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_F_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575c2d852b7f8c76a05ee2d"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575c34bc6700bd6b40e8a84"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575c373dc9932aed601c5ec"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575c342efc786cd9101a5e5"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_GROIN_BACK = new MongoId("6575c390efc786cd9101a5e9"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575c385dc9932aed601c5f0"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575c35bc6700bd6b40e8a88"); + public static readonly MongoId BUILTININSERTS_IOTV_GEN4_M_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575c366c6700bd6b40e8a8c"); + public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65705c3c14f2ed6d7d0b7738"); + public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("65705cea4916448ae1050897"); + public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("65704de13e7bba58ea0285c8"); + public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("65705c777260e1139e091408"); + public static readonly MongoId BUILTININSERTS_KIRASAN_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("65705cb314f2ed6d7d0b773c"); + public static readonly MongoId BUILTININSERTS_KOLPAK_1S_4ML_LEVEL2_HELMET_ARMOR_EARS = new MongoId("657ba57af58ba5a62501079e"); + public static readonly MongoId BUILTININSERTS_KOLPAK_1S_4ML_LEVEL2_HELMET_ARMOR_NAPE = new MongoId("657ba5439ba22f103e08139f"); + public static readonly MongoId BUILTININSERTS_KOLPAK_1S_4ML_LEVEL2_HELMET_ARMOR_TOP = new MongoId("657ba50c23918923cb0df56c"); + public static readonly MongoId BUILTININSERTS_KORA_KULON_LEVEL3_SOFT_ARMOR_BACK = new MongoId("657049d23425b19bbc0502f0"); + public static readonly MongoId BUILTININSERTS_KORA_KULON_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6570495b45d573133d0d6adb"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65731b4fcea9255e2102360e"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("65731b666e709cddd001ec43"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("65731b46cea9255e2102360a"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_GROIN_BACK = new MongoId("65731b6b6042b0f210020ef6"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId("65731b716e709cddd001ec47"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("65731b576e709cddd001ec3f"); + public static readonly MongoId BUILTININSERTS_KORUNDVM_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("65731b60ff6dc44a7d068c4a"); + public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_LEFT_ARM = new MongoId("654a8b60f414fcea4004d793"); + public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_PLATE_BACK = new MongoId("655751db58aa1b6dbd0cc295"); + public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_PLATE_FRONT = new MongoId("6557519ac9b1d9bdcb0777e1"); + public static readonly MongoId BUILTININSERTS_LEVEL2_SOFT_ARMOR_RIGHT_ARM = new MongoId("654a8ba90337d53f9102c2b2"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_BACK = new MongoId("64ad2d8d7e2fcecf0305533f"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("64ad2dd30b9840e4c80c2489"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("64ad2dac6f9247c2f4012439"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("64afee8e9f589807e30dc68a"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("64ad2dba0b9840e4c80c2485"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("64afeecb977493a0ee026213"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("64ad2dc66f9247c2f401243d"); + public static readonly MongoId BUILTININSERTS_LEVEL3_SOFT_ARMOR_STOMACH = new MongoId("64afef49977493a0ee026217"); + public static readonly MongoId BUILTININSERTS_LSHZ_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657bb99db30eca976305117f"); + public static readonly MongoId BUILTININSERTS_LSHZ_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657bb92fa1c61ee0c303631f"); + public static readonly MongoId BUILTININSERTS_LSHZ5_VULKAN5_LEVEL6_HELMET_ARMOR_EARS = new MongoId("657bbefeb30eca9763051189"); + public static readonly MongoId BUILTININSERTS_LSHZ5_VULKAN5_LEVEL6_HELMET_ARMOR_NAPE = new MongoId("657bbed0aab96fccee08be96"); + public static readonly MongoId BUILTININSERTS_LSHZ5_VULKAN5_LEVEL6_HELMET_ARMOR_TOP = new MongoId("657bbe73a1c61ee0c303632b"); + public static readonly MongoId BUILTININSERTS_MASKA1SHA_LEVEL4_HELMET_ARMOR_EARS = new MongoId("657112fa818110db4600aa6b"); + public static readonly MongoId BUILTININSERTS_MASKA1SHA_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("6571138e818110db4600aa71"); + public static readonly MongoId BUILTININSERTS_MASKA1SHA_LEVEL4_HELMET_ARMOR_TOP = new MongoId("6571133d22996eaf11088200"); + public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6572fc8c9a866b80ab07eb5d"); + public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6572fc809a866b80ab07eb59"); + public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("6572fc989a866b80ab07eb61"); + public static readonly MongoId BUILTININSERTS_MMAC_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6572fca39a866b80ab07eb65"); + public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65702fe593b7ea9c330f4ce8"); + public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("65702f87722744627e05cdb8"); + public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("6570305d93b7ea9c330f4ced"); + public static readonly MongoId BUILTININSERTS_MODULE3M_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("65703472c9030b928a0a8a78"); + public static readonly MongoId BUILTININSERTS_MSA_GALLET_TC800_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f9cb587e11c61f70bfaca"); + public static readonly MongoId BUILTININSERTS_MSA_GALLET_TC800_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f9c78ada5fadd1f07a58d"); + public static readonly MongoId BUILTININSERTS_MSA_TC2001_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f8b05f4c82973640b2348"); + public static readonly MongoId BUILTININSERTS_MSA_TC2001_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f8a8d7db258e5600fe33d"); + public static readonly MongoId BUILTININSERTS_MSA_TC2002_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f8b43f92cd718b70154fb"); + public static readonly MongoId BUILTININSERTS_MSA_TC2002_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f8b94f92cd718b70154ff"); + public static readonly MongoId BUILTININSERTS_MTEK_FLUX_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("676307b4d9ec0af3d9001fa8"); + public static readonly MongoId BUILTININSERTS_MTEK_FLUX_LEVEL4_HELMET_ARMOR_TOP = new MongoId("676307c004856a0b3c0dfffd"); + public static readonly MongoId BUILTININSERTS_MTEK_STRIKE_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("676307d3d9ec0af3d9001fac"); + public static readonly MongoId BUILTININSERTS_MTEK_STRIKE_LEVEL4_HELMET_ARMOR_TOP = new MongoId("676307ded8b241b4f703a3e8"); + public static readonly MongoId BUILTININSERTS_NFM_HJELM_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657bbcffbbd440df880b2dd5"); + public static readonly MongoId BUILTININSERTS_NFM_HJELM_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657bbcc9a1c61ee0c3036327"); + public static readonly MongoId BUILTININSERTS_OPS_CORE_FASTMT_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f8f10f4c82973640b2350"); + public static readonly MongoId BUILTININSERTS_OPS_CORE_FASTMT_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f8ec5f4c82973640b234c"); + public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_BACK = new MongoId("65703fa06584602f7d057a8e"); + public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("65703d866584602f7d057a8a"); + public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("65703fe46a912c8b5c03468b"); + public static readonly MongoId BUILTININSERTS_PACA_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("657040374e67e8ec7a0d261c"); + public static readonly MongoId BUILTININSERTS_RATNIK_6B47_LEVEL3_HELMET_ARMOR_EARS = new MongoId("657babc6f58ba5a6250107a2"); + public static readonly MongoId BUILTININSERTS_RATNIK_6B47_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657bab6ec6f689d3a205b85f"); + public static readonly MongoId BUILTININSERTS_RATNIK_6B47_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657baaf0b7e9ca9a02045c02"); + public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6572f1d60103b4a3270332db"); + public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6572f1ca4c8d903cc60c874e"); + public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId("6572f1f7ea457732140ce879"); + public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("6572f1e10103b4a3270332df"); + public static readonly MongoId BUILTININSERTS_RBAV_AF_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6572f1edea457732140ce875"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575dd519e27f4a85e081146"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575dd769d3a0ddf660b904b"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575dd3e9e27f4a85e081142"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_GROIN_BACK = new MongoId("6575dd94945bf78edd04c43c"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575dd800546f8b1de093df6"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575dd64945bf78edd04c438"); + public static readonly MongoId BUILTININSERTS_REDUT_M_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575dd6e9d3a0ddf660b9047"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575d9b8945bf78edd04c427"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575d9d8945bf78edd04c42b"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575d9a79e27f4a85e08112d"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_GROIN_BACK = new MongoId("6575d9f816c2762fba00588d"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575d9e7945bf78edd04c42f"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("6575da07945bf78edd04c433"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575d9c40546f8b1de093dee"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("6575da159e27f4a85e081131"); + public static readonly MongoId BUILTININSERTS_REDUT_T_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575d9cf0546f8b1de093df2"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_EARS = new MongoId("66bdc2c90b603c26902b2018"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_EYES = new MongoId("66bdc2d051aa8c345646d03f"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_JAW = new MongoId("66bdc2d9408f1e66eb4fd957"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("66bdc2e25f17154509115d1e"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL3_HELMET_ARMOR_TOP = new MongoId("66bdc2ea8cbd597c9c2f9360"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_EARS = new MongoId("65711b706d197c216005b31c"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_EYES = new MongoId("65711b9b65daf6aa960c9b1b"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_JAW = new MongoId("65711bc79eb8c145180dbba1"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("65711b489eb8c145180dbb9d"); + public static readonly MongoId BUILTININSERTS_RONIN_LEVEL4_HELMET_ARMOR_TOP = new MongoId("65711b07a330b8c9060f7b01"); + public static readonly MongoId BUILTININSERTS_RYS_T_LEVEL5_HELMET_ARMOR_EARS = new MongoId("657bc2e7b30eca976305118d"); + public static readonly MongoId BUILTININSERTS_RYS_T_LEVEL5_HELMET_ARMOR_NAPE = new MongoId("657bc2c5a1c61ee0c3036333"); + public static readonly MongoId BUILTININSERTS_RYS_T_LEVEL5_HELMET_ARMOR_TOP = new MongoId("657bc285aab96fccee08bea3"); + public static readonly MongoId BUILTININSERTS_SFERAS_SSSH94_LEVEL3_HELMET_ARMOR_EARS = new MongoId("657bb7d7b30eca9763051176"); + public static readonly MongoId BUILTININSERTS_SFERAS_SSSH94_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657bb79ba1c61ee0c303631a"); + public static readonly MongoId BUILTININSERTS_SFERAS_SSSH94_LEVEL3_HELMET_ARMOR_TOP = new MongoId("657bb70486c7f9ef7a009936"); + public static readonly MongoId BUILTININSERTS_SHLEMOFON_TSH_4ML_LEVEL1_HELMET_ARMOR_EARS = new MongoId("657ba18923918923cb0df568"); + public static readonly MongoId BUILTININSERTS_SHLEMOFON_TSH_4ML_LEVEL1_HELMET_ARMOR_NAPE = new MongoId("657ba145e57570b7f80a17ff"); + public static readonly MongoId BUILTININSERTS_SHLEMOFON_TSH_4ML_LEVEL1_HELMET_ARMOR_TOP = new MongoId("657ba096e57570b7f80a17fb"); + public static readonly MongoId BUILTININSERTS_SLICK_BLACK_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575e72660703324250610c7"); + public static readonly MongoId BUILTININSERTS_SLICK_BLACK_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575e71760703324250610c3"); + public static readonly MongoId BUILTININSERTS_SSH68_LEVEL3_HELMET_ARMOR_EARS = new MongoId("657119fea330b8c9060f7afc"); + public static readonly MongoId BUILTININSERTS_SSH68_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("657119d49eb8c145180dbb95"); + public static readonly MongoId BUILTININSERTS_SSH68_LEVEL3_HELMET_ARMOR_TOP = new MongoId("6571199565daf6aa960c9b10"); + public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_BACK = new MongoId("66b8b20c5891c84aab75cb96"); + public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("66b8b217c5d72b02774887b4"); + public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("66b8b223a7f72d197e70bed3"); + public static readonly MongoId BUILTININSERTS_STICH_DEFENSE_M2_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("66b8b22b78bbc0200425fb20"); + public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_BACK = new MongoId("66b884eaacff495a29492849"); + public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("66b884f4c5d72b02774886eb"); + public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId("66b884fd7994640992013b37"); + public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("66b8851678bbc0200425fa03"); + public static readonly MongoId BUILTININSERTS_STICHPROFI_PCV2_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("66b88521a7f72d197e70be3b"); + public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6572eb1b04ee6483ef039882"); + public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6572eb0e55beba16bc04079f"); + public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_GROIN_FRONT = new MongoId("6572eb865b5eac12f10a03ee"); + public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("6572eb3004ee6483ef039886"); + public static readonly MongoId BUILTININSERTS_STRANDHOGG_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6572eb3b04ee6483ef03988a"); + public static readonly MongoId BUILTININSERTS_TAC_KEK_FAST_MT_LEVEL1_HELMET_ARMOR_NAPE = new MongoId("657ba34b9ba22f103e08139b"); + public static readonly MongoId BUILTININSERTS_TAC_KEK_FAST_MT_LEVEL1_HELMET_ARMOR_TOP = new MongoId("657ba2eef58ba5a625010798"); + public static readonly MongoId BUILTININSERTS_TACTEC_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575bca0dc9932aed601c5d7"); + public static readonly MongoId BUILTININSERTS_TACTEC_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575bc88c6700bd6b40e8a57"); + public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6572e52f73c0eabb700109a0"); + public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6572e5221b5bc1185508c24f"); + public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6572e53c73c0eabb700109a4"); + public static readonly MongoId BUILTININSERTS_THORCRV_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6572e54873c0eabb700109a8"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6575d56b16c2762fba005818"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("6575d598b15fef3dd4051678"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6575d561b15fef3dd4051670"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_GROIN_FRONT = new MongoId("6575d5a616c2762fba005820"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_LEFT_ARM = new MongoId("6575d5b316c2762fba005824"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6575d57a16c2762fba00581c"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_RIGHT_ARM = new MongoId("6575d5bd16c2762fba005828"); + public static readonly MongoId BUILTININSERTS_THORINTCAR_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6575d589b15fef3dd4051674"); + public static readonly MongoId BUILTININSERTS_TROOPER_LEVEL3_SOFT_ARMOR_BACK = new MongoId("6570e0610b57c03ec90b96ef"); + public static readonly MongoId BUILTININSERTS_TROOPER_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("6570e025615f54368b04fcb0"); + public static readonly MongoId BUILTININSERTS_TV110_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6570df9c615f54368b04fca9"); + public static readonly MongoId BUILTININSERTS_TV110_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6570df294cc0d2ab1e05ed74"); + public static readonly MongoId BUILTININSERTS_TV115_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6570658a89fd4926380b7346"); + public static readonly MongoId BUILTININSERTS_TV115_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6570653e89fd4926380b733e"); + public static readonly MongoId BUILTININSERTS_ULACH_LEVEL4_HELMET_ARMOR_EARS = new MongoId("657112ce22996eaf110881fb"); + public static readonly MongoId BUILTININSERTS_ULACH_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657112a4818110db4600aa66"); + public static readonly MongoId BUILTININSERTS_ULACH_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657112234269e9a568089eac"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_HELMET_ARMOR_EARS = new MongoId("654a9189bcc67a392b056c79"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_HELMET_ARMOR_NAPE = new MongoId("654a91068e1ce698150fd1e2"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_HELMET_ARMOR_TOP = new MongoId("654a90aff4f81a421b0a7c86"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_BACK = new MongoId("657045741bd9beedc40b7299"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("657044e971369562b300ce9b"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("657045b97e80617cee095bda"); + public static readonly MongoId BUILTININSERTS_UNTAR_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6570460471369562b300ce9f"); + public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_BACK = new MongoId("6571dbda88ead79fcf091d75"); + public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_COLLAR = new MongoId("6571dbef88ead79fcf091d79"); + public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_FRONT = new MongoId("6571dbd388ead79fcf091d71"); + public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_LEFT_SIDE = new MongoId("6571dbe07c02ae206002502e"); + public static readonly MongoId BUILTININSERTS_ZHUK3_LEVEL2_SOFT_ARMOR_RIGHT_SIDE = new MongoId("6571dbeaee8ec43d520cf89e"); + public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_BACK = new MongoId("657642b0e6d5dd75f40688a5"); + public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_COLLAR = new MongoId("657643a220cc24d17102b14c"); + public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_FRONT = new MongoId("65764275d8537eb26a0355e9"); + public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_LEFT_SIDE = new MongoId("6576434820cc24d17102b148"); + public static readonly MongoId BUILTININSERTS_ZHUK6_LEVEL3_SOFT_ARMOR_RIGHT_SIDE = new MongoId("657643732bc38ef78e076477"); + public static readonly MongoId BUILTININSERTS_ZSH_1_2M_LEVEL4_HELMET_ARMOR_EARS = new MongoId("657f92e7f4c82973640b2354"); + public static readonly MongoId BUILTININSERTS_ZSH_1_2M_LEVEL4_HELMET_ARMOR_NAPE = new MongoId("657f92acada5fadd1f07a57e"); + public static readonly MongoId BUILTININSERTS_ZSH_1_2M_LEVEL4_HELMET_ARMOR_TOP = new MongoId("657f925dada5fadd1f07a57a"); + public static readonly MongoId CHARGE_AI_AXMC_338_LM_BOLT_ASSEMBLY = new MongoId("62811cd7308cb521f87a8f99"); + public static readonly MongoId CHARGE_AK_CSS_KNURLED_CHARGING_HANDLE = new MongoId("6130ca3fd92c473c77020dbd"); + public static readonly MongoId CHARGE_AK_ZENIT_RP1_CHARGING_HANDLE = new MongoId("5648ac824bdc2ded0b8b457d"); + public static readonly MongoId CHARGE_AR10_KAC_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId("5df8e085bb49d91fb446d6a8"); + public static readonly MongoId CHARGE_AR10_KAC_CHARGING_HANDLE = new MongoId("5df8e053bb49d91fb446d6a6"); + public static readonly MongoId CHARGE_AR15_ADAR_215_CHARGING_HANDLE = new MongoId("5c0faf68d174af02a96260b8"); + public static readonly MongoId CHARGE_AR15_BADGER_ORDNANCE_TACTICAL_CHARGING_HANDLE_LATCH = new MongoId("56ea7165d2720b6e518b4583"); + public static readonly MongoId CHARGE_AR15_COLT_CHARGING_HANDLE = new MongoId("55d44fd14bdc2d962f8b456e"); + public static readonly MongoId CHARGE_AR15_DANIEL_DEFENSE_GRIPNRIP_CHARGING_HANDLE = new MongoId("651bf5617b3b552ef6712cb7"); + public static readonly MongoId CHARGE_AR15_GEISSELE_ACH_CHARGING_HANDLE_DDC = new MongoId("5ea16d4d5aad6446a939753d"); + public static readonly MongoId CHARGE_AR15_HK_EXTENDED_LATCH_CHARGING_HANDLE = new MongoId("5bb20dbcd4351e44f824c04e"); + public static readonly MongoId CHARGE_AR15_MAGPUL_BAD_LEVER_BOLT_RELEASE = new MongoId("675307301f7c19a9780f2668"); + public static readonly MongoId CHARGE_AR15_MASP_INDUSTRIES_AMBIDEXTROUS_BATTLE_CHARGING_HANDLE = new MongoId( + "6033749e88382f4fab3fd2c5" + ); + public static readonly MongoId CHARGE_AR15_RADIAN_WEAPONS_RAPTOR_CHARGING_HANDLE_FDE = new MongoId("5b2240bf5acfc40dc528af69"); + public static readonly MongoId CHARGE_AR15_RADIAN_WEAPONS_RAPTOR_CHARGING_HANDLE_TUNGSTEN_GREY = new MongoId( + "5d44334ba4b9362b346d1948" + ); + public static readonly MongoId CHARGE_AR15_RAINIER_ARMS_AVALANCHE_MOD2_CHARGING_HANDLE = new MongoId("5f633ff5c444ce7e3c30a006"); + public static readonly MongoId CHARGE_BENELLI_M3_SUPER_90_CHARGING_HANDLE = new MongoId("625ec45bb14d7326ac20f572"); + public static readonly MongoId CHARGE_DO_NOT_USEAI_AXMC_762X51MM_BOLT_ASSEMBLY = new MongoId("62811d61578c54356d6d67ea"); + public static readonly MongoId CHARGE_FN_P90_CHARGING_HANDLE = new MongoId("5cc6ea78e4a949000e1ea3c1"); + public static readonly MongoId CHARGE_FN_P90_KM_THE_HANDLER_CHARGING_HANDLE = new MongoId("5cc6ea85e4a949000e1ea3c3"); + public static readonly MongoId CHARGE_FN_SCAR_CHARGING_HANDLE = new MongoId("6181688c6c780c1e710c9b04"); + public static readonly MongoId CHARGE_HK_MP5_COCKING_HANDLE = new MongoId("5926c32286f774616e42de99"); + public static readonly MongoId CHARGE_HK_MP5K_COCKING_HANDLE = new MongoId("5d2f2d5748f03572ec0c0139"); + public static readonly MongoId CHARGE_HK417_E1_EXTENDED_CHARGING_HANDLE = new MongoId("61702d8a67085e45ef140b24"); + public static readonly MongoId CHARGE_MCX_CHARGING_HANDLE = new MongoId("5fbcc640016cce60e8341acc"); + public static readonly MongoId CHARGE_MCXSPEAR_CHARGING_HANDLE = new MongoId("6529109524cbe3c74a05e5b7"); + public static readonly MongoId CHARGE_MK47_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId("606587bd6d0bd7580617bacc"); + public static readonly MongoId CHARGE_MP9_CHARGING_HANDLE = new MongoId("5de922d4b11454561e39239f"); + public static readonly MongoId CHARGE_MPX_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId("58949edd86f77409483e16a9"); + public static readonly MongoId CHARGE_MPX_GEISSELE_SCH_CHARGING_HANDLE = new MongoId("5c5db6b32e221600102611a0"); + public static readonly MongoId CHARGE_MPX_GEN_2_AMBIDEXTROUS_CHARGING_HANDLE = new MongoId("6761492dc53ebe8c0f0a5efe"); + public static readonly MongoId CHARGE_MPX_SINGLE_LATCH_CHARGING_HANDLE = new MongoId("58949fac86f77409483e16aa"); + public static readonly MongoId CHARGE_SAKO_TRG_M10_338_LM_BOLT_ASSEMBLY = new MongoId("673cb4054ff4aa8f86076f4a"); + public static readonly MongoId CHARGE_STEYR_AUG_A1_CHARGING_HANDLE = new MongoId("62e7c880f68e7a0676050c7c"); + public static readonly MongoId CHARGE_STEYR_AUG_A3_CHARGING_HANDLE = new MongoId("62ebbc53e3c1e1ec7c02c44f"); + public static readonly MongoId COLLIMATOR_AIMPOINT_COMPM4_REFLEX_SIGHT = new MongoId("5c7d55de2e221644f31bff68"); + public static readonly MongoId COLLIMATOR_AIMPOINT_PRO_REFLEX_SIGHT = new MongoId("61659f79d92c473c770213ee"); + public static readonly MongoId COLLIMATOR_AXION_KOBRA_EKP1S03_REFLEX_SIGHT_DOVETAIL = new MongoId("6544d4187c5457729210d277"); + public static readonly MongoId COLLIMATOR_AXION_KOBRA_EKP802_REFLEX_SIGHT_DOVETAIL = new MongoId("5947db3f86f77447880cf76f"); + public static readonly MongoId COLLIMATOR_AXION_KOBRA_EKP818_REFLEX_SIGHT = new MongoId("591c4efa86f7741030027726"); + public static readonly MongoId COLLIMATOR_BELOMO_PKAA_DOVETAIL_REFLEX_SIGHT = new MongoId("6113d6c3290d254f5e6b27db"); + public static readonly MongoId COLLIMATOR_ELCAN_SPECTER_HCO_HOLOGRAPHIC_SIGHT = new MongoId("64785e7c19d732620e045e15"); + public static readonly MongoId COLLIMATOR_EOTECH_553_HOLOGRAPHIC_SIGHT = new MongoId("570fd6c2d2720bc6458b457f"); + public static readonly MongoId COLLIMATOR_EOTECH_EXPS30_HOLOGRAPHIC_SIGHT_TAN = new MongoId("558022b54bdc2dac148b458d"); + public static readonly MongoId COLLIMATOR_EOTECH_HHS1_HYBRID_SIGHT = new MongoId("5c07dd120db834001c39092d"); + public static readonly MongoId COLLIMATOR_EOTECH_HHS1_HYBRID_SIGHT_TAN = new MongoId("5c0a2cec0db834001b7ce47d"); + public static readonly MongoId COLLIMATOR_EOTECH_XPS30_HOLOGRAPHIC_SIGHT = new MongoId("58491f3324597764bc48fa02"); + public static readonly MongoId COLLIMATOR_EOTECH_XPS32_HOLOGRAPHIC_SIGHT = new MongoId("584924ec24597768f12ae244"); + public static readonly MongoId COLLIMATOR_FN_P90_RING_SIGHT_REFLEX_SIGHT = new MongoId("5cebec38d7f00c00110a652a"); + public static readonly MongoId COLLIMATOR_HENSOLDT_RV_RED_DOT_SIGHT = new MongoId("622efbcb99f4ea1a4d6c9a15"); + public static readonly MongoId COLLIMATOR_HOLOSUN_HS401G5_REFLEX_SIGHT = new MongoId("5b30b0dc5acfc400153b7124"); + public static readonly MongoId COLLIMATOR_KOMZ_RUSAK_REFLEX_SIGHT = new MongoId("65f05b9d39dab9e9ec049cfd"); + public static readonly MongoId COLLIMATOR_LEAPERS_UTG_REFLEX_SIGHT = new MongoId("6165ac8c290d254f5e6b2f6c"); + public static readonly MongoId COLLIMATOR_MILKOR_M2A1_GRENADE_LAUNCHER_REFLEX_SIGHT = new MongoId("6284bd5f95250a29bc628a30"); + public static readonly MongoId COLLIMATOR_NPZ_PK1_OBZOR_DOVETAIL_REFLEX_SIGHT = new MongoId("618a5d5852ecee1505530b2a"); + public static readonly MongoId COLLIMATOR_OKP7_REFLEX_SIGHT = new MongoId("570fd79bd2720bc7458b4583"); + public static readonly MongoId COLLIMATOR_OKP7_REFLEX_SIGHT_DOVETAIL = new MongoId("57486e672459770abd687134"); + public static readonly MongoId COLLIMATOR_SIG_SAUER_ROMEO7_1X30_REFLEX_SIGHT_PROTOTYPE = new MongoId("6477772ea8a38bb2050ed4db"); + public static readonly MongoId COLLIMATOR_SIG_SAUER_ROMEO8T_REFLEX_SIGHT = new MongoId("60a23797a37c940de7062d02"); + public static readonly MongoId COLLIMATOR_SR2M_KPSR2_REFLEX_SIGHT = new MongoId("62ff9920fe938a24c90c10d2"); + public static readonly MongoId COLLIMATOR_TRIJICON_SRS02_REFLEX_SIGHT = new MongoId("5d2da1e948f035477b1ce2ba"); + public static readonly MongoId COLLIMATOR_VALDAY_KRECHET_REFLEX_SIGHT = new MongoId("609a63b6e2ff132951242d09"); + public static readonly MongoId COLLIMATOR_VALDAY_PK120_1P87_REFLEX_SIGHT = new MongoId("5c0505e00db834001b735073"); + public static readonly MongoId COLLIMATOR_VOMZ_PILAD_P1X42_WEAVER_REFLEX_SIGHT = new MongoId("584984812459776a704a82a6"); + public static readonly MongoId COLLIMATOR_VOMZ_PILAD_TARGETRING_REFLEX_SIGHT = new MongoId("609b9e31506cf869cf3eaf41"); + public static readonly MongoId COLLIMATOR_VORTEX_RAZOR_AMG_UH1_HOLOGRAPHIC_SIGHT = new MongoId("59f9d81586f7744c7506ee62"); + public static readonly MongoId COLLIMATOR_WALTHER_MRS_REFLEX_SIGHT = new MongoId("570fd721d2720bc5458b4596"); + public static readonly MongoId COLLIMATOR_WILCOX_BOSS_XE_REFLEX_SIGHT = new MongoId("655f13e0a246670fb0373245"); + public static readonly MongoId COMPACTCOLLIMATOR_AIMPOINT_ACRO_P1_REFLEX_SIGHT = new MongoId("616442e4faa1272e43152193"); + public static readonly MongoId COMPACTCOLLIMATOR_AIMPOINT_MICRO_H2_REFLEX_SIGHT = new MongoId("61657230d92c473c770213d7"); + public static readonly MongoId COMPACTCOLLIMATOR_AIMPOINT_MICRO_T1_REFLEX_SIGHT = new MongoId("58d399e486f77442e0016fe7"); + public static readonly MongoId COMPACTCOLLIMATOR_BELOMO_PK06_REFLEX_SIGHT = new MongoId("57ae0171245977343c27bfcf"); + public static readonly MongoId COMPACTCOLLIMATOR_BURRIS_FASTFIRE_3_REFLEX_SIGHT = new MongoId("577d141e24597739c5255e01"); + public static readonly MongoId COMPACTCOLLIMATOR_LEUPOLD_DELTAPOINT_REFLEX_SIGHT = new MongoId("58d268fc86f774111273f8c2"); + public static readonly MongoId COMPACTCOLLIMATOR_SIG_SAUER_ROMEO4_REFLEX_SIGHT = new MongoId("5b3116595acfc40019476364"); + public static readonly MongoId COMPACTCOLLIMATOR_TRIJICON_RMR_REFLEX_SIGHT = new MongoId("5a32aa8bc4a2826c6e06d737"); + public static readonly MongoId COMPASS_EYE_MK2_PROFESSIONAL_HANDHELD = new MongoId("5f4f9eb969cdc30ff33f09db"); + public static readonly MongoId CONTAINER_AMMUNITION_CASE = new MongoId("5aafbde786f774389d0cbc0f"); + public static readonly MongoId CONTAINER_BALLISTIC_PLATE_CASE = new MongoId("67600929bd0a0549d70993f6"); + public static readonly MongoId CONTAINER_DOCUMENTS_CASE = new MongoId("590c60fc86f77412b13fddcf"); public static readonly MongoId CONTAINER_DOGTAG_CASE = new MongoId("5c093e3486f77430cb02e593"); - public static readonly MongoId CONTAINER_GINGY_KEYCHAIN = new MongoId( - "62a09d3bcf4a99369e262447" - ); + public static readonly MongoId CONTAINER_GINGY_KEYCHAIN = new MongoId("62a09d3bcf4a99369e262447"); public static readonly MongoId CONTAINER_GRENADE_CASE = new MongoId("5e2af55f86f7746d4159f07c"); - public static readonly MongoId CONTAINER_INJECTOR_CASE = new MongoId( - "619cbf7d23893217ec30b689" - ); + public static readonly MongoId CONTAINER_INJECTOR_CASE = new MongoId("619cbf7d23893217ec30b689"); public static readonly MongoId CONTAINER_ITEM_CASE = new MongoId("59fb042886f7746c5005a7b2"); public static readonly MongoId CONTAINER_KEY_CASE = new MongoId("67d3ed3271c17ff82e0a5b0b"); public static readonly MongoId CONTAINER_KEY_TOOL = new MongoId("59fafd4b86f7745ca07e1232"); - public static readonly MongoId CONTAINER_KEYCARD_HOLDER_CASE = new MongoId( - "619cbf9e0a7c3a1a2731940a" - ); - public static readonly MongoId CONTAINER_LUCKY_DEVELOPER_JUNKBOX = new MongoId( - "5c0a5f6c86f774753654890e" - ); - public static readonly MongoId CONTAINER_LUCKY_SCAV_JUNK_BOX = new MongoId( - "5b7c710788a4506dec015957" - ); - public static readonly MongoId CONTAINER_MAGAZINE_CASE = new MongoId( - "5c127c4486f7745625356c13" - ); - public static readonly MongoId CONTAINER_MEDICINE_CASE = new MongoId( - "5aafbcd986f7745e590fff23" - ); + public static readonly MongoId CONTAINER_KEYCARD_HOLDER_CASE = new MongoId("619cbf9e0a7c3a1a2731940a"); + public static readonly MongoId CONTAINER_LUCKY_DEVELOPER_JUNKBOX = new MongoId("5c0a5f6c86f774753654890e"); + public static readonly MongoId CONTAINER_LUCKY_SCAV_JUNK_BOX = new MongoId("5b7c710788a4506dec015957"); + public static readonly MongoId CONTAINER_MAGAZINE_CASE = new MongoId("5c127c4486f7745625356c13"); + public static readonly MongoId CONTAINER_MEDICINE_CASE = new MongoId("5aafbcd986f7745e590fff23"); public static readonly MongoId CONTAINER_MONEY_CASE = new MongoId("59fb016586f7746d0d4b423a"); - public static readonly MongoId CONTAINER_MR_HOLODILNICK_THERMAL_BAG = new MongoId( - "5c093db286f7740a1b2617e3" - ); + public static readonly MongoId CONTAINER_MR_HOLODILNICK_THERMAL_BAG = new MongoId("5c093db286f7740a1b2617e3"); public static readonly MongoId CONTAINER_SICC = new MongoId("5d235bb686f77443f4331278"); - public static readonly MongoId CONTAINER_SIMPLE_WALLET = new MongoId( - "5783c43d2459774bbe137486" - ); - public static readonly MongoId CONTAINER_STREAMER_ITEM_CASE = new MongoId( - "66bc98a01a47be227a5e956e" - ); - public static readonly MongoId CONTAINER_THICC_ITEM_CASE = new MongoId( - "5c0a840b86f7742ffa4f2482" - ); - public static readonly MongoId CONTAINER_THICC_WEAPON_CASE = new MongoId( - "5b6d9ce188a4501afc1b2b25" - ); + public static readonly MongoId CONTAINER_SIMPLE_WALLET = new MongoId("5783c43d2459774bbe137486"); + public static readonly MongoId CONTAINER_STREAMER_ITEM_CASE = new MongoId("66bc98a01a47be227a5e956e"); + public static readonly MongoId CONTAINER_THICC_ITEM_CASE = new MongoId("5c0a840b86f7742ffa4f2482"); + public static readonly MongoId CONTAINER_THICC_WEAPON_CASE = new MongoId("5b6d9ce188a4501afc1b2b25"); public static readonly MongoId CONTAINER_WEAPON_CASE = new MongoId("59fb023c86f7746d0d4b423c"); public static readonly MongoId CONTAINER_WZ_WALLET = new MongoId("60b0f6c058e0b0481a09ad11"); - public static readonly MongoId CULTISTAMULET_SACRED_AMULET = new MongoId( - "64d0b40fbe2eed70e254e2d4" - ); - public static readonly MongoId DRINK_AQUAMARI_WATER_BOTTLE_WITH_FILTER = new MongoId( - "5c0fa877d174af02a012e1cf" - ); - public static readonly MongoId DRINK_BOTTLE_OF_DAN_JACKIEL_WHISKEY = new MongoId( - "5d403f9186f7743cac3f229b" - ); - public static readonly MongoId DRINK_BOTTLE_OF_FIERCE_HATCHLING_MOONSHINE = new MongoId( - "5d1b376e86f774252519444e" - ); - public static readonly MongoId DRINK_BOTTLE_OF_NORVINSKY_YADRENIY_PREMIUM_KVASS_06L = - new MongoId("5e8f3423fd7471236e6e3b64"); - public static readonly MongoId DRINK_BOTTLE_OF_PEVKO_LIGHT_BEER = new MongoId( - "62a09f32621468534a797acb" - ); - public static readonly MongoId DRINK_BOTTLE_OF_TARKOVSKAYA_VODKA = new MongoId( - "5d40407c86f774318526545a" - ); - public static readonly MongoId DRINK_BOTTLE_OF_TARKOVSKAYA_VODKA_BAD = new MongoId( - "614451b71e5874611e2c7ae5" - ); - public static readonly MongoId DRINK_BOTTLE_OF_WATER_06L = new MongoId( - "5448fee04bdc2dbc018b4567" - ); - public static readonly MongoId DRINK_CAN_OF_HOT_ROD_ENERGY = new MongoId( - "5751496424597720a27126da" - ); - public static readonly MongoId DRINK_CAN_OF_ICE_GREEN_TEA = new MongoId( - "575062b524597720a31c09a1" - ); - public static readonly MongoId DRINK_CAN_OF_MAX_ENERGY_ENERGY = new MongoId( - "5751435d24597720a27126d1" - ); - public static readonly MongoId DRINK_CAN_OF_RATCOLA_SODA = new MongoId( - "60b0f93284c20f0feb453da7" - ); - public static readonly MongoId DRINK_CAN_OF_TARCOLA_SODA = new MongoId( - "57514643245977207f2c2d09" - ); - public static readonly MongoId DRINK_CANISTER_WITH_PURIFIED_WATER = new MongoId( - "5d1b33a686f7742523398398" - ); - public static readonly MongoId DRINK_EMERGENCY_WATER_RATION = new MongoId( - "60098b1705871270cd5352a1" - ); - public static readonly MongoId DRINK_PACK_OF_APPLE_JUICE = new MongoId( - "57513f07245977207e26a311" - ); - public static readonly MongoId DRINK_PACK_OF_GRAND_JUICE = new MongoId( - "57513f9324597720a7128161" - ); + public static readonly MongoId CULTISTAMULET_SACRED_AMULET = new MongoId("64d0b40fbe2eed70e254e2d4"); + public static readonly MongoId DRINK_AQUAMARI_WATER_BOTTLE_WITH_FILTER = new MongoId("5c0fa877d174af02a012e1cf"); + public static readonly MongoId DRINK_BOTTLE_OF_DAN_JACKIEL_WHISKEY = new MongoId("5d403f9186f7743cac3f229b"); + public static readonly MongoId DRINK_BOTTLE_OF_FIERCE_HATCHLING_MOONSHINE = new MongoId("5d1b376e86f774252519444e"); + public static readonly MongoId DRINK_BOTTLE_OF_NORVINSKY_YADRENIY_PREMIUM_KVASS_06L = new MongoId("5e8f3423fd7471236e6e3b64"); + public static readonly MongoId DRINK_BOTTLE_OF_PEVKO_LIGHT_BEER = new MongoId("62a09f32621468534a797acb"); + public static readonly MongoId DRINK_BOTTLE_OF_TARKOVSKAYA_VODKA = new MongoId("5d40407c86f774318526545a"); + public static readonly MongoId DRINK_BOTTLE_OF_TARKOVSKAYA_VODKA_BAD = new MongoId("614451b71e5874611e2c7ae5"); + public static readonly MongoId DRINK_BOTTLE_OF_WATER_06L = new MongoId("5448fee04bdc2dbc018b4567"); + public static readonly MongoId DRINK_CAN_OF_HOT_ROD_ENERGY = new MongoId("5751496424597720a27126da"); + public static readonly MongoId DRINK_CAN_OF_ICE_GREEN_TEA = new MongoId("575062b524597720a31c09a1"); + public static readonly MongoId DRINK_CAN_OF_MAX_ENERGY_ENERGY = new MongoId("5751435d24597720a27126d1"); + public static readonly MongoId DRINK_CAN_OF_RATCOLA_SODA = new MongoId("60b0f93284c20f0feb453da7"); + public static readonly MongoId DRINK_CAN_OF_TARCOLA_SODA = new MongoId("57514643245977207f2c2d09"); + public static readonly MongoId DRINK_CANISTER_WITH_PURIFIED_WATER = new MongoId("5d1b33a686f7742523398398"); + public static readonly MongoId DRINK_EMERGENCY_WATER_RATION = new MongoId("60098b1705871270cd5352a1"); + public static readonly MongoId DRINK_PACK_OF_APPLE_JUICE = new MongoId("57513f07245977207e26a311"); + public static readonly MongoId DRINK_PACK_OF_GRAND_JUICE = new MongoId("57513f9324597720a7128161"); public static readonly MongoId DRINK_PACK_OF_MILK = new MongoId("575146b724597720a27126d5"); - public static readonly MongoId DRINK_PACK_OF_RUSSIAN_ARMY_PINEAPPLE_JUICE = new MongoId( - "544fb62a4bdc2dfb738b4568" - ); - public static readonly MongoId DRINK_PACK_OF_VITA_JUICE = new MongoId( - "57513fcc24597720a31c09a6" - ); - public static readonly MongoId DRUGS_ANALGIN_PAINKILLERS = new MongoId( - "544fb37f4bdc2dee738b4567" - ); - public static readonly MongoId DRUGS_AUGMENTIN_ANTIBIOTIC_PILLS = new MongoId( - "590c695186f7741e566b64a2" - ); + public static readonly MongoId DRINK_PACK_OF_RUSSIAN_ARMY_PINEAPPLE_JUICE = new MongoId("544fb62a4bdc2dfb738b4568"); + public static readonly MongoId DRINK_PACK_OF_VITA_JUICE = new MongoId("57513fcc24597720a31c09a6"); + public static readonly MongoId DRUGS_ANALGIN_PAINKILLERS = new MongoId("544fb37f4bdc2dee738b4567"); + public static readonly MongoId DRUGS_AUGMENTIN_ANTIBIOTIC_PILLS = new MongoId("590c695186f7741e566b64a2"); public static readonly MongoId DRUGS_GOLDEN_STAR_BALM = new MongoId("5751a89d24597722aa0e8db0"); - public static readonly MongoId DRUGS_IBUPROFEN_PAINKILLERS = new MongoId( - "5af0548586f7743a532b7e99" - ); - public static readonly MongoId DRUGS_MORPHINE_INJECTOR = new MongoId( - "544fb3f34bdc2d03748b456a" - ); + public static readonly MongoId DRUGS_IBUPROFEN_PAINKILLERS = new MongoId("5af0548586f7743a532b7e99"); + public static readonly MongoId DRUGS_MORPHINE_INJECTOR = new MongoId("544fb3f34bdc2d03748b456a"); public static readonly MongoId DRUGS_VASELINE_BALM = new MongoId("5755383e24597772cb798966"); - public static readonly MongoId FACECOVER_ARENA_CUP_SERIES_BALACLAVA = new MongoId( - "67f90180f07898267b0a4ed7" - ); - public static readonly MongoId FACECOVER_ASTRONOMER_MASK = new MongoId( - "67602a39c8e72a73250de739" - ); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_DEMON = new MongoId( - "67a5c61c7f52620c5b05b4d8" - ); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_EL_DA_DE_MUERTOS = - new MongoId("67a5c657782ce4655104db16"); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_SCARS = new MongoId( - "67a5c5df782ce4655104db14" - ); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_SKULL = new MongoId( - "67a5c6068fcd9fb73f0752cf" - ); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_SMILE = new MongoId( - "67a4b71ad3228756b6088ee2" - ); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_STOP_ME = - new MongoId("67a5c5b6dfdf568c9009af66"); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_TARGET = - new MongoId("67a5c5f37f52620c5b05b4d6"); - public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_UP_ARMORED_BALLISTIC_MASK_BLACK = - new MongoId("657089638db3adca1009f4ca"); + public static readonly MongoId FACECOVER_ARENA_CUP_SERIES_BALACLAVA = new MongoId("67f90180f07898267b0a4ed7"); + public static readonly MongoId FACECOVER_ASTRONOMER_MASK = new MongoId("67602a39c8e72a73250de739"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_DEMON = new MongoId("67a5c61c7f52620c5b05b4d8"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_EL_DA_DE_MUERTOS = new MongoId("67a5c657782ce4655104db16"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_SCARS = new MongoId("67a5c5df782ce4655104db14"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_SKULL = new MongoId("67a5c6068fcd9fb73f0752cf"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_SMILE = new MongoId("67a4b71ad3228756b6088ee2"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_STOP_ME = new MongoId("67a5c5b6dfdf568c9009af66"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_BALLISTIC_MASK_TARGET = new MongoId("67a5c5f37f52620c5b05b4d6"); + public static readonly MongoId FACECOVER_ATOMIC_DEFENSE_CQCM_UP_ARMORED_BALLISTIC_MASK_BLACK = new MongoId("657089638db3adca1009f4ca"); public static readonly MongoId FACECOVER_AYBOLIT_MASK = new MongoId("676029e22749de558a0b7e69"); - public static readonly MongoId FACECOVER_BADDIES_RED_BEARD = new MongoId( - "62a09dd4621468534a797ac7" - ); + public static readonly MongoId FACECOVER_BADDIES_RED_BEARD = new MongoId("62a09dd4621468534a797ac7"); public static readonly MongoId FACECOVER_BALACLAVA = new MongoId("572b7f1624597762ae139822"); - public static readonly MongoId FACECOVER_BALACLAVA_BORN_TO_DIE = new MongoId( - "67a9cd28cade15e0f00123b6" - ); - public static readonly MongoId FACECOVER_BALACLAVA_DEMON = new MongoId( - "67a9e9e0c185de5a4d0c2a13" - ); - public static readonly MongoId FACECOVER_BALACLAVA_DEV = new MongoId( - "58ac60eb86f77401897560ff" - ); - public static readonly MongoId FACECOVER_BALACLAVA_FEAR = new MongoId( - "67a9ea004fb4a4a8a00d2828" - ); - public static readonly MongoId FACECOVER_BALACLAVA_GREEN = new MongoId( - "67a9cc9cf05be177170bcd76" - ); - public static readonly MongoId FACECOVER_BALACLAVA_LUXURY = new MongoId( - "67a9cd6ecade15e0f00123b8" - ); - public static readonly MongoId FACECOVER_BALACLAVA_NOT_NICE = new MongoId( - "67a9cd381fb22063280728a6" - ); - public static readonly MongoId FACECOVER_BALACLAVA_RED_NOSE = new MongoId( - "67a9e9d04fb4a4a8a00d2826" - ); - public static readonly MongoId FACECOVER_BALACLAVA_RED_ONI = new MongoId( - "67a9ea39de7fb0f19e077da6" - ); - public static readonly MongoId FACECOVER_BALACLAVA_SCARS = new MongoId( - "67a9ccfff05be177170bcd78" - ); - public static readonly MongoId FACECOVER_BALACLAVA_SCRATCHES = new MongoId( - "67a9cd18f05be177170bcd7a" - ); - public static readonly MongoId FACECOVER_BALACLAVA_SKULL = new MongoId( - "67a9e9f09de6826a650ee074" - ); - public static readonly MongoId FACECOVER_BALACLAVA_SMILE = new MongoId( - "67a9ea98de7fb0f19e077da8" - ); - public static readonly MongoId FACECOVER_BALACLAVA_TEST = new MongoId( - "59e8936686f77467ce798647" - ); - public static readonly MongoId FACECOVER_BALACLAVA_WHITE = new MongoId( - "675ac888803644528007b3f6" - ); - public static readonly MongoId FACECOVER_BALACLAVA_WHITE_ONI = new MongoId( - "67a9ea7e4fb4a4a8a00d282a" - ); - public static readonly MongoId FACECOVER_BALACLAVA_YELLOW = new MongoId( - "67a9cd55c2a2d940930aec86" - ); - public static readonly MongoId FACECOVER_BALACLAVA_YELLOW_ONI = new MongoId( - "67a9ea10c185de5a4d0c2a15" - ); - public static readonly MongoId FACECOVER_BIG_PIPES_SMOKING_PIPE = new MongoId( - "62a61bbf8ec41a51b34758d2" - ); - public static readonly MongoId FACECOVER_CIPOLLINO_MASK = new MongoId( - "676029ca2749de558a0b7e67" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA = new MongoId( - "5ab8f39486f7745cd93a1cca" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_DPM_DESERT = new MongoId( - "67a9dccf9de6826a650ee06a" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_GREEN = new MongoId( - "67a9dc769de6826a650ee066" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_MULTICAM_TROPIC = - new MongoId("67a9dce47faa4210bb0807c8"); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_OAK = new MongoId( - "67a9dca99de6826a650ee068" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_SBEU = new MongoId( - "67a9dc997faa4210bb0807c6" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_SURPAT = new MongoId( - "67a9dcbac185de5a4d0c2a06" - ); - public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_TIGER_STRIPE = - new MongoId("67a9dd619de6826a650ee06c"); - public static readonly MongoId FACECOVER_DEADLY_SKULL_MASK = new MongoId( - "5b432b6c5acfc4001a599bf0" - ); - public static readonly MongoId FACECOVER_DEATH_KNIGHT_MASK = new MongoId( - "62963c18dbc8ab5f0d382d0b" - ); - public static readonly MongoId FACECOVER_DEATH_SHADOW_LIGHTWEIGHT_ARMORED_MASK = new MongoId( - "6570aead4d84f81fd002a033" - ); - public static readonly MongoId FACECOVER_FACELESS_MASK = new MongoId( - "6176a48d732a664031271438" - ); - public static readonly MongoId FACECOVER_FAKE_MUSTACHE = new MongoId( - "5bd073a586f7747e6f135799" - ); - public static readonly MongoId FACECOVER_FAKE_WHITE_BEARD = new MongoId( - "5c1a1e3f2e221602b66cc4c2" - ); + public static readonly MongoId FACECOVER_BALACLAVA_BORN_TO_DIE = new MongoId("67a9cd28cade15e0f00123b6"); + public static readonly MongoId FACECOVER_BALACLAVA_DEMON = new MongoId("67a9e9e0c185de5a4d0c2a13"); + public static readonly MongoId FACECOVER_BALACLAVA_DEV = new MongoId("58ac60eb86f77401897560ff"); + public static readonly MongoId FACECOVER_BALACLAVA_FEAR = new MongoId("67a9ea004fb4a4a8a00d2828"); + public static readonly MongoId FACECOVER_BALACLAVA_GREEN = new MongoId("67a9cc9cf05be177170bcd76"); + public static readonly MongoId FACECOVER_BALACLAVA_LUXURY = new MongoId("67a9cd6ecade15e0f00123b8"); + public static readonly MongoId FACECOVER_BALACLAVA_NOT_NICE = new MongoId("67a9cd381fb22063280728a6"); + public static readonly MongoId FACECOVER_BALACLAVA_RED_NOSE = new MongoId("67a9e9d04fb4a4a8a00d2826"); + public static readonly MongoId FACECOVER_BALACLAVA_RED_ONI = new MongoId("67a9ea39de7fb0f19e077da6"); + public static readonly MongoId FACECOVER_BALACLAVA_SCARS = new MongoId("67a9ccfff05be177170bcd78"); + public static readonly MongoId FACECOVER_BALACLAVA_SCRATCHES = new MongoId("67a9cd18f05be177170bcd7a"); + public static readonly MongoId FACECOVER_BALACLAVA_SKULL = new MongoId("67a9e9f09de6826a650ee074"); + public static readonly MongoId FACECOVER_BALACLAVA_SMILE = new MongoId("67a9ea98de7fb0f19e077da8"); + public static readonly MongoId FACECOVER_BALACLAVA_TEST = new MongoId("59e8936686f77467ce798647"); + public static readonly MongoId FACECOVER_BALACLAVA_WHITE = new MongoId("675ac888803644528007b3f6"); + public static readonly MongoId FACECOVER_BALACLAVA_WHITE_ONI = new MongoId("67a9ea7e4fb4a4a8a00d282a"); + public static readonly MongoId FACECOVER_BALACLAVA_YELLOW = new MongoId("67a9cd55c2a2d940930aec86"); + public static readonly MongoId FACECOVER_BALACLAVA_YELLOW_ONI = new MongoId("67a9ea10c185de5a4d0c2a15"); + public static readonly MongoId FACECOVER_BIG_PIPES_SMOKING_PIPE = new MongoId("62a61bbf8ec41a51b34758d2"); + public static readonly MongoId FACECOVER_CIPOLLINO_MASK = new MongoId("676029ca2749de558a0b7e67"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA = new MongoId("5ab8f39486f7745cd93a1cca"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_DPM_DESERT = new MongoId("67a9dccf9de6826a650ee06a"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_GREEN = new MongoId("67a9dc769de6826a650ee066"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_MULTICAM_TROPIC = new MongoId("67a9dce47faa4210bb0807c8"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_OAK = new MongoId("67a9dca99de6826a650ee068"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_SBEU = new MongoId("67a9dc997faa4210bb0807c6"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_SURPAT = new MongoId("67a9dcbac185de5a4d0c2a06"); + public static readonly MongoId FACECOVER_COLD_FEAR_INFRARED_BALACLAVA_TIGER_STRIPE = new MongoId("67a9dd619de6826a650ee06c"); + public static readonly MongoId FACECOVER_DEADLY_SKULL_MASK = new MongoId("5b432b6c5acfc4001a599bf0"); + public static readonly MongoId FACECOVER_DEATH_KNIGHT_MASK = new MongoId("62963c18dbc8ab5f0d382d0b"); + public static readonly MongoId FACECOVER_DEATH_SHADOW_LIGHTWEIGHT_ARMORED_MASK = new MongoId("6570aead4d84f81fd002a033"); + public static readonly MongoId FACECOVER_FACELESS_MASK = new MongoId("6176a48d732a664031271438"); + public static readonly MongoId FACECOVER_FAKE_MUSTACHE = new MongoId("5bd073a586f7747e6f135799"); + public static readonly MongoId FACECOVER_FAKE_WHITE_BEARD = new MongoId("5c1a1e3f2e221602b66cc4c2"); public static readonly MongoId FACECOVER_FOX_MASK = new MongoId("676029f997f19b78f00a0197"); - public static readonly MongoId FACECOVER_GHOST_BALACLAVA = new MongoId( - "5ab8f4ff86f77431c60d91ba" - ); - public static readonly MongoId FACECOVER_GHOST_HALFMASK = new MongoId( - "6571bde39837cc51b800c212" - ); + public static readonly MongoId FACECOVER_GHOST_BALACLAVA = new MongoId("5ab8f4ff86f77431c60d91ba"); + public static readonly MongoId FACECOVER_GHOST_HALFMASK = new MongoId("6571bde39837cc51b800c212"); public static readonly MongoId FACECOVER_GHOUL_MASK = new MongoId("62a5c2c98ec41a51b34739c0"); public static readonly MongoId FACECOVER_GHOUL_MASK_2 = new MongoId("6176a40f0b8c0312ac75a3d3"); - public static readonly MongoId FACECOVER_GLORIOUS_E_LIGHTWEIGHT_ARMORED_MASK = new MongoId( - "62a09e08de7ac81993580532" - ); + public static readonly MongoId FACECOVER_GLORIOUS_E_LIGHTWEIGHT_ARMORED_MASK = new MongoId("62a09e08de7ac81993580532"); public static readonly MongoId FACECOVER_GP5_GAS_MASK = new MongoId("5b432c305acfc40019478128"); public static readonly MongoId FACECOVER_GP7_GAS_MASK = new MongoId("60363c0c92ec1c31037959f5"); public static readonly MongoId FACECOVER_GRINCH_MASK = new MongoId("67602a0f97f19b78f00a0199"); public static readonly MongoId FACECOVER_HARE_MASK = new MongoId("67602a23c8e72a73250de737"); public static readonly MongoId FACECOVER_JASON_MASK = new MongoId("5bd071d786f7747e707b93a3"); - public static readonly MongoId FACECOVER_LOWER_HALFMASK = new MongoId( - "572b7fa524597762b747ce82" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_BALACLAVAS_GREEN = new MongoId( - "67a5f9c8fafb8efd440694b8" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_BALACLAVAS_RED = new MongoId( - "67a5f9e7f7041a25760dda38" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_BALACLAVAS_WHITE = new MongoId( - "67a5fa01fafb8efd440694ba" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_EL_DA_DE_MUERTOS = new MongoId( - "67a5f989f7041a25760dda36" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_MOSS = new MongoId( - "67a5f968fafb8efd440694b6" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_MULTICAM = new MongoId( - "67a5f917dfdf568c9009af6b" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_WRAITH = new MongoId( - "67a5f9a193f7b62b6b0f6576" - ); - public static readonly MongoId FACECOVER_LOWER_HALFMASK_ZOMBIE = new MongoId( - "67a5f94e802d287c670bb966" - ); - public static readonly MongoId FACECOVER_MISHA_MAYOROV_MASK = new MongoId( - "5bd0716d86f774171822ef4b" - ); - public static readonly MongoId FACECOVER_MOMEX_BALACLAVA = new MongoId( - "5b432f3d5acfc4704b4a1dfb" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK = new MongoId( - "5b4326435acfc433000ed01d" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK_LOUISE_PITTON = new MongoId( - "67aaf82d508ee9b6440e9c46" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK_LUCHA_LIBRE = new MongoId( - "67aaf84104dca1c82c071cf6" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK_M90_DESERT = new MongoId( - "67aaf808bf7609058606a926" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK_ONI = new MongoId( - "67aaf879508ee9b6440e9c48" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK_SAY_NOTHING = new MongoId( - "67aaf863de7fb0f19e077db9" - ); - public static readonly MongoId FACECOVER_NEOPRENE_MASK_ZOMBIE = new MongoId( - "67aaf851bf7609058606a928" - ); - public static readonly MongoId FACECOVER_PESTILY_PLAGUE_MASK = new MongoId( - "5e54f79686f7744022011103" - ); + public static readonly MongoId FACECOVER_LOWER_HALFMASK = new MongoId("572b7fa524597762b747ce82"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_BALACLAVAS_GREEN = new MongoId("67a5f9c8fafb8efd440694b8"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_BALACLAVAS_RED = new MongoId("67a5f9e7f7041a25760dda38"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_BALACLAVAS_WHITE = new MongoId("67a5fa01fafb8efd440694ba"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_EL_DA_DE_MUERTOS = new MongoId("67a5f989f7041a25760dda36"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_MOSS = new MongoId("67a5f968fafb8efd440694b6"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_MULTICAM = new MongoId("67a5f917dfdf568c9009af6b"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_WRAITH = new MongoId("67a5f9a193f7b62b6b0f6576"); + public static readonly MongoId FACECOVER_LOWER_HALFMASK_ZOMBIE = new MongoId("67a5f94e802d287c670bb966"); + public static readonly MongoId FACECOVER_MISHA_MAYOROV_MASK = new MongoId("5bd0716d86f774171822ef4b"); + public static readonly MongoId FACECOVER_MOMEX_BALACLAVA = new MongoId("5b432f3d5acfc4704b4a1dfb"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK = new MongoId("5b4326435acfc433000ed01d"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK_LOUISE_PITTON = new MongoId("67aaf82d508ee9b6440e9c46"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK_LUCHA_LIBRE = new MongoId("67aaf84104dca1c82c071cf6"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK_M90_DESERT = new MongoId("67aaf808bf7609058606a926"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK_ONI = new MongoId("67aaf879508ee9b6440e9c48"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK_SAY_NOTHING = new MongoId("67aaf863de7fb0f19e077db9"); + public static readonly MongoId FACECOVER_NEOPRENE_MASK_ZOMBIE = new MongoId("67aaf851bf7609058606a928"); + public static readonly MongoId FACECOVER_PESTILY_PLAGUE_MASK = new MongoId("5e54f79686f7744022011103"); public static readonly MongoId FACECOVER_RESPIRATOR = new MongoId("59e7715586f7742ee5789605"); public static readonly MongoId FACECOVER_ROOSTER_MASK = new MongoId("676029a6bdead929d40bc368"); - public static readonly MongoId FACECOVER_SHATTERED_LIGHTWEIGHT_ARMORED_MASK = new MongoId( - "5b432b2f5acfc4771e1c6622" - ); - public static readonly MongoId FACECOVER_SHEMAGH_GREEN = new MongoId( - "5ab8f85d86f7745cd93a1cf5" - ); + public static readonly MongoId FACECOVER_SHATTERED_LIGHTWEIGHT_ARMORED_MASK = new MongoId("5b432b2f5acfc4771e1c6622"); + public static readonly MongoId FACECOVER_SHEMAGH_GREEN = new MongoId("5ab8f85d86f7745cd93a1cf5"); public static readonly MongoId FACECOVER_SHEMAGH_TAN = new MongoId("5b4325355acfc40019478126"); - public static readonly MongoId FACECOVER_SHROUD_HALFMASK = new MongoId( - "5e54f76986f7740366043752" - ); + public static readonly MongoId FACECOVER_SHROUD_HALFMASK = new MongoId("5e54f76986f7740366043752"); public static readonly MongoId FACECOVER_SLENDER_MASK = new MongoId("62a5c41e8ec41a51b34739c3"); - public static readonly MongoId FACECOVER_SLENDER_MASK_2 = new MongoId( - "5bd06f5d86f77427101ad47c" - ); - public static readonly MongoId FACECOVER_SMOKE_BALACLAVA = new MongoId( - "5fd8d28367cb5e077335170f" - ); - public static readonly MongoId FACECOVER_SPOOKY_SKULL_MASK = new MongoId( - "62a5c333ec21e50cad3b5dc6" - ); - public static readonly MongoId FACECOVER_SPOOKY_SKULL_MASK_2 = new MongoId( - "635267ab3c89e2112001f826" - ); - public static readonly MongoId FACECOVER_TAGILLAS_WELDING_MASK_GORILLA = new MongoId( - "60a7ad3a0c5cb24b0134664a" - ); - public static readonly MongoId FACECOVER_TAGILLAS_WELDING_MASK_UBEY = new MongoId( - "60a7ad2a2198820d95707a2e" - ); - public static readonly MongoId FACECOVER_TAGILLAS_WELDING_MASK_ZABEY = new MongoId( - "678f84bb9e85556ca60f0362" - ); - public static readonly MongoId FACECOVER_TWITCH_RIVALS_2020_HALFMASK = new MongoId( - "5e71fad086f77422443d4604" - ); - public static readonly MongoId FACECOVER_TWITCH_RIVALS_2020_MASK = new MongoId( - "5e71f6be86f77429f2683c44" - ); - public static readonly MongoId FACECOVER_TWITCH_RIVALS_2021_BALACLAVA = new MongoId( - "607f201b3c672b3b3a24a800" - ); - public static readonly MongoId FACECOVER_VENGEFUL_ZRYACHIYS_BALACLAVA = new MongoId( - "6530e8587cbfc1e309011e37" - ); - public static readonly MongoId FACECOVER_ZRYACHIYS_BALACLAVA = new MongoId( - "63626d904aa74b8fe30ab426" - ); - public static readonly MongoId FLARE_ROP30_REACTIVE_FLARE_CARTRIDGE_WHITE = new MongoId( - "62178be9d0050232da3485d9" - ); - public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_BLUE = new MongoId( - "66d98233302686954b0c6f81" - ); - public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_FIREWORK = new MongoId( - "675ea3d6312c0a5c4e04e317" - ); - public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_GREEN = new MongoId( - "6217726288ed9f0845317459" - ); - public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_RED = new MongoId( - "62178c4d4ecf221597654e3d" - ); - public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_SPECIAL_YELLOW = - new MongoId("66d9f1abb16d9aacf5068468"); - public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_YELLOW = new MongoId( - "624c0b3340357b5f566e8766" - ); - public static readonly MongoId FLASHHIDER_AI_338_LM_TACTICAL_MUZZLE_BRAKE = new MongoId( - "62812081d23f207deb0ab216" - ); - public static readonly MongoId FLASHHIDER_AK_HEXAGON_REACTOR_545X39_MUZZLE_BRAKE = new MongoId( - "615d8f5dd92c473c770212ef" - ); - public static readonly MongoId FLASHHIDER_AK_LANTAC_DRAKON_762X39_MUZZLE_BRAKE = new MongoId( - "5c878ebb2e2216001219d48a" - ); - public static readonly MongoId FLASHHIDER_AK_SPIKES_TACTICAL_DYNACOMP_762X39_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5a9ea27ca2750c00137fa672"); - public static readonly MongoId FLASHHIDER_AK_SRVV_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5cc9ad73d7f00c000e2579d4" - ); - public static readonly MongoId FLASHHIDER_AK_VECTOR_VR05T_762X39_MUZZLE_BRAKE = new MongoId( - "64942bfc6ee699f6890dff95" - ); - public static readonly MongoId FLASHHIDER_AK_VENOM_TACTICAL_ANTIDOTE_762X39_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5c7951452e221644f31bfd5c"); - public static readonly MongoId FLASHHIDER_AK_ZENIT_DTK1_762X39545X39_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5649ab884bdc2ded0b8b457f"); - public static readonly MongoId FLASHHIDER_AK101_556X45_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5ac72e615acfc43f67248aa0" - ); - public static readonly MongoId FLASHHIDER_AK102_556X45_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5ac72e725acfc400180ae701" - ); - public static readonly MongoId FLASHHIDER_AK103_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5ac72e7d5acfc40016339a02" - ); - public static readonly MongoId FLASHHIDER_AK104_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5ac72e895acfc43b321d4bd5" - ); - public static readonly MongoId FLASHHIDER_AK105_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5ac72e945acfc43f3b691116" - ); - public static readonly MongoId FLASHHIDER_AK12_545X39_MUZZLE_BRAKE = new MongoId( - "649ec2af961514b22506b10f" - ); - public static readonly MongoId FLASHHIDER_AK50_50_BMG_MUZZLE_BRAKE = new MongoId( - "67d41883f378a36c4706eeb7" - ); - public static readonly MongoId FLASHHIDER_AK74_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5649aa744bdc2ded0b8b457e" - ); - public static readonly MongoId FLASHHIDER_AK74_PWS_CQB_74_545X39_MUZZLE_BRAKE = new MongoId( - "5943eeeb86f77412d6384f6b" - ); - public static readonly MongoId FLASHHIDER_AK74_SRVV_MBR_JET_545X39_MUZZLE_BRAKE = new MongoId( - "5cc9a96cd7f00c011c04e04a" - ); - public static readonly MongoId FLASHHIDER_AK74_THREAD_TYPE_JMAC_CUSTOMS_RRD4C_MULTICALIBER_MUZZLE_BRAKE = - new MongoId("5f633f791b231926f2329f13"); - public static readonly MongoId FLASHHIDER_AK74M_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5ac7655e5acfc40016339a19" - ); - public static readonly MongoId FLASHHIDER_AKM_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "59d64fc686f774171b243fe2" - ); - public static readonly MongoId FLASHHIDER_AKM_THREAD_TYPE_JMAC_CUSTOMS_RRD4C_762X39_MUZZLE_BRAKE = - new MongoId("5f633f68f5750b524b45f112"); - public static readonly MongoId FLASHHIDER_AKML_SYSTEM_762X39_FLASH_HIDER = new MongoId( - "5a0d716f1526d8000d26b1e2" - ); - public static readonly MongoId FLASHHIDER_AKS74U_545X39_MUZZLE_BRAKE = new MongoId( - "57dc324a24597759501edc20" - ); - public static readonly MongoId FLASHHIDER_AR10_2A_ARMANENT_X3_762X51_COMPENSATOR = new MongoId( - "5b7d693d5acfc43bca706a3d" - ); - public static readonly MongoId FLASHHIDER_AR10_AAC_BLACKOUT_51T_762X51_FLASH_HIDER = - new MongoId("5a34fd2bc4a282329a73b4c5"); - public static readonly MongoId FLASHHIDER_AR10_AAC_SCARSD_51T_762X51_FLASH_HIDER = new MongoId( - "618178aa1cb55961fa0fdc80" - ); - public static readonly MongoId FLASHHIDER_AR10_AWC_PSR_762X51_MUZZLE_BRAKE = new MongoId( - "612e0d3767085e45ef14057f" - ); - public static readonly MongoId FLASHHIDER_AR10_CMMG_SV_BRAKE_762X51_MUZZLE_BRAKE = new MongoId( - "6065c6e7132d4d12c81fd8e1" - ); - public static readonly MongoId FLASHHIDER_AR10_DANIEL_DEFENSE_WAVE_762X51_MUZZLE_BRAKE = - new MongoId("5d1f819086f7744b355c219b"); - public static readonly MongoId FLASHHIDER_AR10_DEAD_AIR_KEYMOUNT_762X51_MUZZLE_BRAKE = - new MongoId("628a66b41d5e41750e314f34"); - public static readonly MongoId FLASHHIDER_AR10_DELTATEK_DTKAR10_762X51_MUZZLE_BRAKE = - new MongoId("6642f63667f5cb56a00662eb"); - public static readonly MongoId FLASHHIDER_AR10_DESERT_TECH_762X51_FLASH_HIDER = new MongoId( - "5dcbe965e4ed22586443a79d" - ); - public static readonly MongoId FLASHHIDER_AR10_FORTIS_RED_BRAKE_762X51_MUZZLE_BRAKE = - new MongoId("5d026791d7ad1a04a067ea63"); - public static readonly MongoId FLASHHIDER_AR10_KAC_QDC_762X51_FLASH_SUPPRESSOR_KIT = - new MongoId("5dfa3cd1b33c0951220c079b"); - public static readonly MongoId FLASHHIDER_AR10_KAC_QDC_762X51_MUZZLE_BRAKE_KIT = new MongoId( - "6130c43c67085e45ef1405a1" - ); - public static readonly MongoId FLASHHIDER_AR10_KEENO_ARMS_SHREWD_762X51_MUZZLE_BRAKE = - new MongoId("5cdd7685d7f00c000f260ed2"); - public static readonly MongoId FLASHHIDER_AR10_LANTAC_DRAGON_762X51_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5c878e9d2e2216000f201903"); - public static readonly MongoId FLASHHIDER_AR10_NORDIC_COMPONENTS_CORVETTE_762X51_COMPENSATOR = - new MongoId("5d02677ad7ad1a04a15c0f95"); - public static readonly MongoId FLASHHIDER_AR10_ODIN_WORKS_ATLAS7_762X51_MUZZLE_BRAKE = - new MongoId("5bbdb8bdd4351e4502011460"); - public static readonly MongoId FLASHHIDER_AR10_PRECISION_ARMANENT_M11_SEVEREDUTY_762X51_MUZZLE_BRAKE = - new MongoId("5cdd7693d7f00c0010373aa5"); - public static readonly MongoId FLASHHIDER_AR10_SUREFIRE_PROCOMP_762X51_MUZZLE_BRAKE = - new MongoId("607ffb988900dc2d9a55b6e4"); - public static readonly MongoId FLASHHIDER_AR10_SUREFIRE_WARDEN_762X51_BLAST_REGULATOR = - new MongoId("615d8eb350224f204c1da1cf"); - public static readonly MongoId FLASHHIDER_AR10_TAA_ZK38_762X51_MUZZLE_BRAKE = new MongoId( - "612e0e3c290d254f5e6b291d" - ); - public static readonly MongoId FLASHHIDER_AR10_THUNDER_BEAST_ARMS_30CB_762X51_MUZZLE_BRAKE = - new MongoId("5d443f8fa4b93678dd4a01aa"); - public static readonly MongoId FLASHHIDER_AR15_AAC_BLACKOUT_51T_556X45_FLASH_HIDER = - new MongoId("5c7e5f112e221600106f4ede"); - public static readonly MongoId FLASHHIDER_AR15_ADAR_215_556X45_FLASH_HIDER = new MongoId( - "5c0fafb6d174af02a96260ba" - ); - public static readonly MongoId FLASHHIDER_AR15_AEROKNOX_BUTTERFLY_556X45_MUZZLE_BRAKE = - new MongoId("6405ff6bd4578826ec3e377a"); - public static readonly MongoId FLASHHIDER_AR15_ALIENTECH_556X45_MUZZLE_BRAKE = new MongoId( - "63ac5c9658d0485fc039f0b8" - ); - public static readonly MongoId FLASHHIDER_AR15_AWC_PSR_556X45_MUZZLE_BRAKE = new MongoId( - "612e0cfc8004cc50514c2d9e" - ); - public static readonly MongoId FLASHHIDER_AR15_BULLETEC_ST6012_556X45_MUZZLE_BRAKE = - new MongoId("5cf6937cd7f00c056c53fb39"); - public static readonly MongoId FLASHHIDER_AR15_COLT_USGI_A2_556X45_FLASH_HIDER = new MongoId( - "544a38634bdc2d58388b4568" - ); - public static readonly MongoId FLASHHIDER_AR15_DANIEL_DEFENSE_WAVE_556X45_MUZZLE_BRAKE = - new MongoId("5cff9e5ed7ad1a09407397d4"); - public static readonly MongoId FLASHHIDER_AR15_DELTATEK_DTKM16_556X45_MUZZLE_BRAKE = - new MongoId("664301213dd83ddae20dda18"); - public static readonly MongoId FLASHHIDER_AR15_DESERT_TECH_556X45_FLASH_HIDER = new MongoId( - "5c48a2a42e221602b66d1e07" - ); - public static readonly MongoId FLASHHIDER_AR15_DOUBLESTAR_CARLSON_TAC_COMP_556X45_COMPENSATOR = - new MongoId("6621455e3aceea9e2b0b01e7"); - public static readonly MongoId FLASHHIDER_AR15_FERFRANS_CQB_556X45_MUZZLE_BRAKE = new MongoId( - "5f6372e2865db925d54f3869" - ); - public static readonly MongoId FLASHHIDER_AR15_GRIFFIN_ARMAMENT_GATELOK_HAMMER_556X45_FLASH_HIDER = - new MongoId("6386120cd6baa055ad1e201c"); - public static readonly MongoId FLASHHIDER_AR15_HK_BLITZ_556X45_FLASH_HIDER = new MongoId( - "615d8e2f1cb55961fa0fd9a4" - ); - public static readonly MongoId FLASHHIDER_AR15_KAC_QDC_556X45_3PRONG_FLASH_ELIMINATOR = - new MongoId("626667e87379c44d557b7550"); - public static readonly MongoId FLASHHIDER_AR15_KAC_QDC_556X45_FLASH_SUPPRESSOR_KIT = - new MongoId("56ea8180d2720bf2698b456a"); - public static readonly MongoId FLASHHIDER_AR15_NORDIC_COMPONENTS_CORVETTE_556X45_COMPENSATOR = - new MongoId("5d02676dd7ad1a049e54f6dc"); - public static readonly MongoId FLASHHIDER_AR15_NOVESKE_KX3_556X45_FLASH_HIDER = new MongoId( - "56ea6fafd2720b844b8b4593" - ); - public static readonly MongoId FLASHHIDER_AR15_PWS_CQB_556X45_MUZZLE_BRAKE = new MongoId( - "5943ee5a86f77413872d25ec" - ); - public static readonly MongoId FLASHHIDER_AR15_SAI_JAILBRAKE_556X45_MUZZLE_DEVICE = new MongoId( - "5c78f2882e22165df16b832e" - ); - public static readonly MongoId FLASHHIDER_AR15_SILENCERCO_ASR_556X45_FLASH_HIDER = new MongoId( - "609269c3b0e443224b421cc1" - ); - public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_SF3P_556X45_FLASH_HIDER = new MongoId( - "5c7fb51d2e2216001219ce11" - ); - public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_SF4P_556X45_FLASH_HIDER = new MongoId( - "5ea172e498dacb342978818e" - ); - public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_WARCOMP_556X45_FLASH_HIDER = - new MongoId("5c6d710d2e22165df16b81e7"); - public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_WARDEN_556X45_BLAST_REGULATOR = - new MongoId("62669bccdb9ebb4daa44cd14"); - public static readonly MongoId FLASHHIDER_AR15_TAA_ZK23_556X45_MUZZLE_BRAKE = new MongoId( - "612e0e55a112697a4b3a66e7" - ); - public static readonly MongoId FLASHHIDER_AR15_THUNDER_BEAST_ARMS_223CB_556X45_MUZZLE_BRAKE = - new MongoId("5d440625a4b9361eec4ae6c5"); - public static readonly MongoId FLASHHIDER_AR15_TROY_CLAYMORE_556X45_MUZZLE_BRAKE = new MongoId( - "5cc9b815d7f00c000e2579d6" - ); - public static readonly MongoId FLASHHIDER_AR15_VENDETTA_PRECISION_VP09_INTERCEPTOR_556X45_MUZZLE_BRAKE = - new MongoId("5a7c147ce899ef00150bd8b8"); - public static readonly MongoId FLASHHIDER_AR15_WDR_NERO_556_556X45_MUZZLE_BRAKE = new MongoId( - "64943b74e9998d641b0412ed" - ); - public static readonly MongoId FLASHHIDER_AR15_YANKEE_HILL_PHANTOM_556X45_FLASH_HIDER = - new MongoId("626a74340be03179a165e30c"); - public static readonly MongoId FLASHHIDER_ASE_UTRA_BORELOCK_338_LM_MUZZLE_BRAKE = new MongoId( - "673f3ef1259f5945d70e43a8" - ); - public static readonly MongoId FLASHHIDER_ASH12_127X55_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5caf17c9ae92150b30006be1" - ); - public static readonly MongoId FLASHHIDER_AWC_PSR_338_LM_MUZZLE_BRAKE = new MongoId( - "612e0d81290d254f5e6b291a" - ); - public static readonly MongoId FLASHHIDER_DVL10_762X51_MUZZLE_DEVICE = new MongoId( - "58889c7324597754281f9439" - ); - public static readonly MongoId FLASHHIDER_DVL10_M2_762X51_MUZZLE_BRAKE = new MongoId( - "5888996c24597754281f9419" - ); - public static readonly MongoId FLASHHIDER_FERFRANS_CRD_556X45_CONCUSSION_REDUCTION_DEVICE = - new MongoId("5f6339d53ada5942720e2dc3"); - public static readonly MongoId FLASHHIDER_FN_P90_57X28_FLASH_HIDER = new MongoId( - "5cc82796e24e8d000f5859a8" - ); - public static readonly MongoId FLASHHIDER_FN_SCARL_556X45_FLASH_HIDER = new MongoId( - "618407a850224f204c1da549" - ); - public static readonly MongoId FLASHHIDER_GLOCK_9X19_CARVER_CUSTOM_4_PORT_COMPENSATOR = - new MongoId("5a7ad0c451dfba0013379712"); - public static readonly MongoId FLASHHIDER_GLOCK_9X19_CARVER_CUSTOM_DECELERATOR_3_PORT_COMPENSATOR = - new MongoId("5a7037338dc32e000d46d257"); - public static readonly MongoId FLASHHIDER_GLOCK_9X19_DOUBLE_DIAMOND_FLASH_HIDER = new MongoId( - "5a70366c8dc32e001207fb06" - ); - public static readonly MongoId FLASHHIDER_GLOCK_9X19_LONE_WOLF_ALPHAWOLF_BULLNOSE_COMPENSATOR = - new MongoId("5a705e128dc32e000d46d258"); - public static readonly MongoId FLASHHIDER_GLOCK_9X19_LONE_WOLF_LWDCOMP9_COMPENSATOR = - new MongoId("5a7ad1fb51dfba0013379715"); - public static readonly MongoId FLASHHIDER_GLOCK_9X19_STRIKE_INDUSTRIES_G4_SLIDECOMP_COMPENSATOR = - new MongoId("5a7b32a2e899ef00135e345a"); - public static readonly MongoId FLASHHIDER_HK_G36_556X45_4PRONG_FLASH_HIDER = new MongoId( - "622f128cec80d870d349b4e8" - ); - public static readonly MongoId FLASHHIDER_HK_G36_556X45_FLASH_HIDER = new MongoId( - "622f07cfae33bc505b2c4dd5" - ); - public static readonly MongoId FLASHHIDER_HK_G36C_556X45_4PRONG_FLASH_HIDER = new MongoId( - "622f0ee47762f55aaa68ac87" - ); - public static readonly MongoId FLASHHIDER_HK_MP5_BT_QD_9X19_MUZZLE_BRAKE = new MongoId( - "615d8df08004cc50514c3236" - ); - public static readonly MongoId FLASHHIDER_HK_MP5_NOVESKESTYLE_9X19_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5c07c5ed0db834001b73571c"); - public static readonly MongoId FLASHHIDER_HK_MP7A1_46X30_FLASH_HIDER = new MongoId( - "5ba26acdd4351e003562908e" - ); - public static readonly MongoId FLASHHIDER_HK_PROLONGED_762X51_FLASH_HIDER = new MongoId( - "61713308d92c473c770214a0" - ); - public static readonly MongoId FLASHHIDER_KRISS_VECTOR_45_ACP_FLASH_HIDER = new MongoId( - "5fb65424956329274326f316" - ); - public static readonly MongoId FLASHHIDER_KRISS_VECTOR_9X19_FLASH_HIDER = new MongoId( - "5fbbc3324e8a554c40648348" - ); - public static readonly MongoId FLASHHIDER_LANTAC_BMD_762X51_BLAST_MITIGATION_DEVICE = - new MongoId("5cf78720d7f00c06595bc93e"); - public static readonly MongoId FLASHHIDER_M14_JP_ENTERPRISES_762X51_TACTICAL_COMPENSATOR = - new MongoId("5addbb825acfc408fb139400"); - public static readonly MongoId FLASHHIDER_M14_SMITH_ENTERPRISE_GOOD_IRON_762X51_MUZZLE_BRAKE = - new MongoId("5addbb945acfc4001a5fc44e"); - public static readonly MongoId FLASHHIDER_M14_SMITH_ENTERPRISE_VORTEX_762X51_MUZZLE_BRAKE = - new MongoId("5addbba15acfc400185c2854"); - public static readonly MongoId FLASHHIDER_M14_YANKEE_HILL_PHANTOM_762X51_FLASH_HIDER = - new MongoId("5addbbb25acfc40015621bd9"); - public static readonly MongoId FLASHHIDER_M1911_ANARCHY_OUTDOORS_45_ACP_MUZZLE_BRAKE = - new MongoId("5ef61964ec7f42238c31e0c1"); - public static readonly MongoId FLASHHIDER_M1A_NATIONAL_MATCH_762X51_FLASH_SUPPRESSOR = - new MongoId("5addbb6e5acfc408fb1393fd"); - public static readonly MongoId FLASHHIDER_M1A_SMITH_ENTERPRISE_SOCOM_16_762X51_THREADED_MUZZLE_BRAKE_GAS_BLOCK = - new MongoId("5ab3afb2d8ce87001660304d"); - public static readonly MongoId FLASHHIDER_M1A_SOCOM_16_762X51_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5aafa1c2e5b5b00015042a56"); - public static readonly MongoId FLASHHIDER_M60E3_762X51_FLASH_HIDER = new MongoId( - "6601281fc752a02bbe05e696" - ); - public static readonly MongoId FLASHHIDER_M60E6_762X51_FLASH_HIDER = new MongoId( - "66012a1d3dff5074ed002e2a" - ); - public static readonly MongoId FLASHHIDER_MCXSPEAR_CLUTCHLOK_QD_68X51_SHOULDERED_FLASH_HIDER = - new MongoId("6529113b5ae2ae97b80fdf39"); - public static readonly MongoId FLASHHIDER_MOSIN_RIFLE_TACFIRE_TANKER_STYLE_762X54R_MUZZLE_BRAKE = - new MongoId("5bbdb83fd4351e44f824c44b"); - public static readonly MongoId FLASHHIDER_MOSIN_RIFLE_TEXAS_PRECISION_PRODUCTS_762X54R_MUZZLE_BRAKE = - new MongoId("5bc5a351d4351e003477a414"); - public static readonly MongoId FLASHHIDER_MOSIN_RIFLE_WITT_MACHINE_762X54R_MUZZLE_BRAKE = - new MongoId("5bc5a35cd4351e450201232f"); - public static readonly MongoId FLASHHIDER_MPX_A2_9X19_FLASH_HIDER = new MongoId( - "58949dea86f77409483e16a8" - ); - public static readonly MongoId FLASHHIDER_ORSIS_T5000M_762X51_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5df35e7f2a78646d96665dd4"); - public static readonly MongoId FLASHHIDER_P226_TJS_CUSTOM_9X19_COMPENSATOR = new MongoId( - "5c6beec32e221601da3578f2" - ); - public static readonly MongoId FLASHHIDER_PK_ZENIT_DTK1P_762X54R_MUZZLE_BRAKE = new MongoId( - "6492ef63cfcf7c89e701abf1" - ); - public static readonly MongoId FLASHHIDER_PKM_762X54R_MUZZLE_BRAKE = new MongoId( - "6492efe46cc7e29a6f03b2a0" - ); - public static readonly MongoId FLASHHIDER_PKM_762X54R_SLOTTED_FLASH_HIDER = new MongoId( - "6492efb8cfcf7c89e701abf3" - ); - public static readonly MongoId FLASHHIDER_PP1901_VITYAZ_9X19_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5998597786f77414ea6da093"); - public static readonly MongoId FLASHHIDER_RFB_762X51_FLASH_HIDER = new MongoId( - "5f2aa4559b44de6b1b4e68d1" - ); - public static readonly MongoId FLASHHIDER_RPK16_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5beec3420db834001b095429" - ); - public static readonly MongoId FLASHHIDER_SA58_3PRONG_TRIDENT_762X51_FLASH_HIDER = new MongoId( - "5b099b7d5acfc400186331e4" - ); - public static readonly MongoId FLASHHIDER_SA58_AUSTRIAN_STYLE_762X51_MUZZLE_BRAKE = new MongoId( - "5b7d68af5acfc400170e30c3" - ); - public static readonly MongoId FLASHHIDER_SAIGA9_9X19_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5998598e86f7740b3f498a86" - ); - public static readonly MongoId FLASHHIDER_SAKO_TRG_2242M10_338_LM_MUZZLE_BRAKE = new MongoId( - "673f4046259f5945d70e43ab" - ); - public static readonly MongoId FLASHHIDER_SAKO_TRG_CORETAC_COREBRAKE_338_LM_MUZZLE_BRAKE = - new MongoId("673f3f9840aeca974e0b5c68"); - public static readonly MongoId FLASHHIDER_SIG_SAUER_762X51_3PRONG_FLASH_HIDER = new MongoId( - "5fbcbcf593164a5b6278efb2" - ); - public static readonly MongoId FLASHHIDER_SIG_SAUER_MICRO_BRAKE_762X51_MUZZLE_BRAKE = - new MongoId("5fbcbd02900b1d5091531dd3"); - public static readonly MongoId FLASHHIDER_SIG_SAUER_TWO_PORT_BRAKE_762X51_MUZZLE_BRAKE = - new MongoId("5fbcbd10ab884124df0cd563"); - public static readonly MongoId FLASHHIDER_SILENCERCO_AC858_ASR_338_LM_MUZZLE_BRAKE = - new MongoId("5fc23636016cce60e8341b05"); - public static readonly MongoId FLASHHIDER_STEYR_AUG_A1_556X45_CLOSED_FLASH_HIDER = new MongoId( - "630f2872911356c17d06abc5" - ); - public static readonly MongoId FLASHHIDER_STEYR_AUG_A3_556X45_CLOSED_FLASH_HIDER = new MongoId( - "630f28f0cadb1fe05e06f004" - ); - public static readonly MongoId FLASHHIDER_STEYR_AUG_A3_556X45_MUZZLE_BRAKE = new MongoId( - "630f291b9f66a28b37094bb8" - ); - public static readonly MongoId FLASHHIDER_STM9_9X19_MUZZLE_BRAKE = new MongoId( - "60337f5dce399e10262255d1" - ); - public static readonly MongoId FLASHHIDER_SV98_762X54R_MUZZLE_DEVICE = new MongoId( - "560e620e4bdc2d724b8b456b" - ); - public static readonly MongoId FLASHHIDER_SV98_762X54R_THREAD_ADAPTER = new MongoId( - "5c4eec9b2e2216398b5aaba2" - ); - public static readonly MongoId FLASHHIDER_SV98_SRVV_MK20_762X54R_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5c4ee3d62e2216152006f302"); - public static readonly MongoId FLASHHIDER_SVDS_762X54R_MUZZLE_BRAKECOMPENSATOR = new MongoId( - "5c471bfc2e221602b21d4e17" - ); - public static readonly MongoId FLASHHIDER_SVT40_762X54R_MUZZLE_BRAKE = new MongoId( - "64119d1f2c6d6f921a0929f8" - ); - public static readonly MongoId FLASHHIDER_TACCOM_CARBINE_BRAKE_9X19_MUZZLE_BRAKE = new MongoId( - "5cf6935bd7f00c06585fb791" - ); - public static readonly MongoId FLASHHIDER_TT_PMLASER_DTKTT_MUZZLE_BRAKECOMPENSATOR = - new MongoId("5bffd7ed0db834001d23ebf9"); - public static readonly MongoId FLASHHIDER_UZI_VENTED_BARREL_SHROUD = new MongoId( - "6699370c57df3e2b4e0a0dab" - ); - public static readonly MongoId FLASHHIDER_VPO136_VEPRKM_762X39_MUZZLE_BRAKECOMPENSATOR = - new MongoId("59e61eb386f77440d64f5daf"); - public static readonly MongoId FLASHHIDER_VPO209_THREAD_PROTECTOR = new MongoId( - "59e8a00d86f7742ad93b569c" - ); - public static readonly MongoId FLASHHIDER_YANKEE_HILL_ANNIHILATOR_MULTICALIBER_FLASH_HIDER = - new MongoId("5b3a16655acfc40016387a2a"); - public static readonly MongoId FLASHLIGHT_ARMYTEK_PREDATOR_PRO_V3_XHP35_HI = new MongoId( - "59d790f486f77403cb06aec6" - ); - public static readonly MongoId FLASHLIGHT_ULTRAFIRE_WF501B = new MongoId( - "57d17c5e2459775a5c57d17d" - ); + public static readonly MongoId FACECOVER_SLENDER_MASK_2 = new MongoId("5bd06f5d86f77427101ad47c"); + public static readonly MongoId FACECOVER_SMOKE_BALACLAVA = new MongoId("5fd8d28367cb5e077335170f"); + public static readonly MongoId FACECOVER_SPOOKY_SKULL_MASK = new MongoId("62a5c333ec21e50cad3b5dc6"); + public static readonly MongoId FACECOVER_SPOOKY_SKULL_MASK_2 = new MongoId("635267ab3c89e2112001f826"); + public static readonly MongoId FACECOVER_TAGILLAS_WELDING_MASK_GORILLA = new MongoId("60a7ad3a0c5cb24b0134664a"); + public static readonly MongoId FACECOVER_TAGILLAS_WELDING_MASK_UBEY = new MongoId("60a7ad2a2198820d95707a2e"); + public static readonly MongoId FACECOVER_TAGILLAS_WELDING_MASK_ZABEY = new MongoId("678f84bb9e85556ca60f0362"); + public static readonly MongoId FACECOVER_TWITCH_RIVALS_2020_HALFMASK = new MongoId("5e71fad086f77422443d4604"); + public static readonly MongoId FACECOVER_TWITCH_RIVALS_2020_MASK = new MongoId("5e71f6be86f77429f2683c44"); + public static readonly MongoId FACECOVER_TWITCH_RIVALS_2021_BALACLAVA = new MongoId("607f201b3c672b3b3a24a800"); + public static readonly MongoId FACECOVER_VENGEFUL_ZRYACHIYS_BALACLAVA = new MongoId("6530e8587cbfc1e309011e37"); + public static readonly MongoId FACECOVER_ZRYACHIYS_BALACLAVA = new MongoId("63626d904aa74b8fe30ab426"); + public static readonly MongoId FLARE_ROP30_REACTIVE_FLARE_CARTRIDGE_WHITE = new MongoId("62178be9d0050232da3485d9"); + public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_BLUE = new MongoId("66d98233302686954b0c6f81"); + public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_FIREWORK = new MongoId("675ea3d6312c0a5c4e04e317"); + public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_GREEN = new MongoId("6217726288ed9f0845317459"); + public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_RED = new MongoId("62178c4d4ecf221597654e3d"); + public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_SPECIAL_YELLOW = new MongoId("66d9f1abb16d9aacf5068468"); + public static readonly MongoId FLARE_RSP30_REACTIVE_SIGNAL_CARTRIDGE_YELLOW = new MongoId("624c0b3340357b5f566e8766"); + public static readonly MongoId FLASHHIDER_AI_338_LM_TACTICAL_MUZZLE_BRAKE = new MongoId("62812081d23f207deb0ab216"); + public static readonly MongoId FLASHHIDER_AK_HEXAGON_REACTOR_545X39_MUZZLE_BRAKE = new MongoId("615d8f5dd92c473c770212ef"); + public static readonly MongoId FLASHHIDER_AK_LANTAC_DRAKON_762X39_MUZZLE_BRAKE = new MongoId("5c878ebb2e2216001219d48a"); + public static readonly MongoId FLASHHIDER_AK_SPIKES_TACTICAL_DYNACOMP_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( + "5a9ea27ca2750c00137fa672" + ); + public static readonly MongoId FLASHHIDER_AK_SRVV_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5cc9ad73d7f00c000e2579d4"); + public static readonly MongoId FLASHHIDER_AK_VECTOR_VR05T_762X39_MUZZLE_BRAKE = new MongoId("64942bfc6ee699f6890dff95"); + public static readonly MongoId FLASHHIDER_AK_VENOM_TACTICAL_ANTIDOTE_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId( + "5c7951452e221644f31bfd5c" + ); + public static readonly MongoId FLASHHIDER_AK_ZENIT_DTK1_762X39545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5649ab884bdc2ded0b8b457f"); + public static readonly MongoId FLASHHIDER_AK101_556X45_MUZZLE_BRAKECOMPENSATOR = new MongoId("5ac72e615acfc43f67248aa0"); + public static readonly MongoId FLASHHIDER_AK102_556X45_MUZZLE_BRAKECOMPENSATOR = new MongoId("5ac72e725acfc400180ae701"); + public static readonly MongoId FLASHHIDER_AK103_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5ac72e7d5acfc40016339a02"); + public static readonly MongoId FLASHHIDER_AK104_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5ac72e895acfc43b321d4bd5"); + public static readonly MongoId FLASHHIDER_AK105_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5ac72e945acfc43f3b691116"); + public static readonly MongoId FLASHHIDER_AK12_545X39_MUZZLE_BRAKE = new MongoId("649ec2af961514b22506b10f"); + public static readonly MongoId FLASHHIDER_AK50_50_BMG_MUZZLE_BRAKE = new MongoId("67d41883f378a36c4706eeb7"); + public static readonly MongoId FLASHHIDER_AK74_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5649aa744bdc2ded0b8b457e"); + public static readonly MongoId FLASHHIDER_AK74_PWS_CQB_74_545X39_MUZZLE_BRAKE = new MongoId("5943eeeb86f77412d6384f6b"); + public static readonly MongoId FLASHHIDER_AK74_SRVV_MBR_JET_545X39_MUZZLE_BRAKE = new MongoId("5cc9a96cd7f00c011c04e04a"); + public static readonly MongoId FLASHHIDER_AK74_THREAD_TYPE_JMAC_CUSTOMS_RRD4C_MULTICALIBER_MUZZLE_BRAKE = new MongoId( + "5f633f791b231926f2329f13" + ); + public static readonly MongoId FLASHHIDER_AK74M_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5ac7655e5acfc40016339a19"); + public static readonly MongoId FLASHHIDER_AKM_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("59d64fc686f774171b243fe2"); + public static readonly MongoId FLASHHIDER_AKM_THREAD_TYPE_JMAC_CUSTOMS_RRD4C_762X39_MUZZLE_BRAKE = new MongoId( + "5f633f68f5750b524b45f112" + ); + public static readonly MongoId FLASHHIDER_AKML_SYSTEM_762X39_FLASH_HIDER = new MongoId("5a0d716f1526d8000d26b1e2"); + public static readonly MongoId FLASHHIDER_AKS74U_545X39_MUZZLE_BRAKE = new MongoId("57dc324a24597759501edc20"); + public static readonly MongoId FLASHHIDER_AR10_2A_ARMANENT_X3_762X51_COMPENSATOR = new MongoId("5b7d693d5acfc43bca706a3d"); + public static readonly MongoId FLASHHIDER_AR10_AAC_BLACKOUT_51T_762X51_FLASH_HIDER = new MongoId("5a34fd2bc4a282329a73b4c5"); + public static readonly MongoId FLASHHIDER_AR10_AAC_SCARSD_51T_762X51_FLASH_HIDER = new MongoId("618178aa1cb55961fa0fdc80"); + public static readonly MongoId FLASHHIDER_AR10_AWC_PSR_762X51_MUZZLE_BRAKE = new MongoId("612e0d3767085e45ef14057f"); + public static readonly MongoId FLASHHIDER_AR10_CMMG_SV_BRAKE_762X51_MUZZLE_BRAKE = new MongoId("6065c6e7132d4d12c81fd8e1"); + public static readonly MongoId FLASHHIDER_AR10_DANIEL_DEFENSE_WAVE_762X51_MUZZLE_BRAKE = new MongoId("5d1f819086f7744b355c219b"); + public static readonly MongoId FLASHHIDER_AR10_DEAD_AIR_KEYMOUNT_762X51_MUZZLE_BRAKE = new MongoId("628a66b41d5e41750e314f34"); + public static readonly MongoId FLASHHIDER_AR10_DELTATEK_DTKAR10_762X51_MUZZLE_BRAKE = new MongoId("6642f63667f5cb56a00662eb"); + public static readonly MongoId FLASHHIDER_AR10_DESERT_TECH_762X51_FLASH_HIDER = new MongoId("5dcbe965e4ed22586443a79d"); + public static readonly MongoId FLASHHIDER_AR10_FORTIS_RED_BRAKE_762X51_MUZZLE_BRAKE = new MongoId("5d026791d7ad1a04a067ea63"); + public static readonly MongoId FLASHHIDER_AR10_KAC_QDC_762X51_FLASH_SUPPRESSOR_KIT = new MongoId("5dfa3cd1b33c0951220c079b"); + public static readonly MongoId FLASHHIDER_AR10_KAC_QDC_762X51_MUZZLE_BRAKE_KIT = new MongoId("6130c43c67085e45ef1405a1"); + public static readonly MongoId FLASHHIDER_AR10_KEENO_ARMS_SHREWD_762X51_MUZZLE_BRAKE = new MongoId("5cdd7685d7f00c000f260ed2"); + public static readonly MongoId FLASHHIDER_AR10_LANTAC_DRAGON_762X51_MUZZLE_BRAKECOMPENSATOR = new MongoId("5c878e9d2e2216000f201903"); + public static readonly MongoId FLASHHIDER_AR10_NORDIC_COMPONENTS_CORVETTE_762X51_COMPENSATOR = new MongoId("5d02677ad7ad1a04a15c0f95"); + public static readonly MongoId FLASHHIDER_AR10_ODIN_WORKS_ATLAS7_762X51_MUZZLE_BRAKE = new MongoId("5bbdb8bdd4351e4502011460"); + public static readonly MongoId FLASHHIDER_AR10_PRECISION_ARMANENT_M11_SEVEREDUTY_762X51_MUZZLE_BRAKE = new MongoId( + "5cdd7693d7f00c0010373aa5" + ); + public static readonly MongoId FLASHHIDER_AR10_SUREFIRE_PROCOMP_762X51_MUZZLE_BRAKE = new MongoId("607ffb988900dc2d9a55b6e4"); + public static readonly MongoId FLASHHIDER_AR10_SUREFIRE_WARDEN_762X51_BLAST_REGULATOR = new MongoId("615d8eb350224f204c1da1cf"); + public static readonly MongoId FLASHHIDER_AR10_TAA_ZK38_762X51_MUZZLE_BRAKE = new MongoId("612e0e3c290d254f5e6b291d"); + public static readonly MongoId FLASHHIDER_AR10_THUNDER_BEAST_ARMS_30CB_762X51_MUZZLE_BRAKE = new MongoId("5d443f8fa4b93678dd4a01aa"); + public static readonly MongoId FLASHHIDER_AR15_AAC_BLACKOUT_51T_556X45_FLASH_HIDER = new MongoId("5c7e5f112e221600106f4ede"); + public static readonly MongoId FLASHHIDER_AR15_ADAR_215_556X45_FLASH_HIDER = new MongoId("5c0fafb6d174af02a96260ba"); + public static readonly MongoId FLASHHIDER_AR15_AEROKNOX_BUTTERFLY_556X45_MUZZLE_BRAKE = new MongoId("6405ff6bd4578826ec3e377a"); + public static readonly MongoId FLASHHIDER_AR15_ALIENTECH_556X45_MUZZLE_BRAKE = new MongoId("63ac5c9658d0485fc039f0b8"); + public static readonly MongoId FLASHHIDER_AR15_AWC_PSR_556X45_MUZZLE_BRAKE = new MongoId("612e0cfc8004cc50514c2d9e"); + public static readonly MongoId FLASHHIDER_AR15_BULLETEC_ST6012_556X45_MUZZLE_BRAKE = new MongoId("5cf6937cd7f00c056c53fb39"); + public static readonly MongoId FLASHHIDER_AR15_COLT_USGI_A2_556X45_FLASH_HIDER = new MongoId("544a38634bdc2d58388b4568"); + public static readonly MongoId FLASHHIDER_AR15_DANIEL_DEFENSE_WAVE_556X45_MUZZLE_BRAKE = new MongoId("5cff9e5ed7ad1a09407397d4"); + public static readonly MongoId FLASHHIDER_AR15_DELTATEK_DTKM16_556X45_MUZZLE_BRAKE = new MongoId("664301213dd83ddae20dda18"); + public static readonly MongoId FLASHHIDER_AR15_DESERT_TECH_556X45_FLASH_HIDER = new MongoId("5c48a2a42e221602b66d1e07"); + public static readonly MongoId FLASHHIDER_AR15_DOUBLESTAR_CARLSON_TAC_COMP_556X45_COMPENSATOR = new MongoId("6621455e3aceea9e2b0b01e7"); + public static readonly MongoId FLASHHIDER_AR15_FERFRANS_CQB_556X45_MUZZLE_BRAKE = new MongoId("5f6372e2865db925d54f3869"); + public static readonly MongoId FLASHHIDER_AR15_GRIFFIN_ARMAMENT_GATELOK_HAMMER_556X45_FLASH_HIDER = new MongoId( + "6386120cd6baa055ad1e201c" + ); + public static readonly MongoId FLASHHIDER_AR15_HK_BLITZ_556X45_FLASH_HIDER = new MongoId("615d8e2f1cb55961fa0fd9a4"); + public static readonly MongoId FLASHHIDER_AR15_KAC_QDC_556X45_3PRONG_FLASH_ELIMINATOR = new MongoId("626667e87379c44d557b7550"); + public static readonly MongoId FLASHHIDER_AR15_KAC_QDC_556X45_FLASH_SUPPRESSOR_KIT = new MongoId("56ea8180d2720bf2698b456a"); + public static readonly MongoId FLASHHIDER_AR15_NORDIC_COMPONENTS_CORVETTE_556X45_COMPENSATOR = new MongoId("5d02676dd7ad1a049e54f6dc"); + public static readonly MongoId FLASHHIDER_AR15_NOVESKE_KX3_556X45_FLASH_HIDER = new MongoId("56ea6fafd2720b844b8b4593"); + public static readonly MongoId FLASHHIDER_AR15_PWS_CQB_556X45_MUZZLE_BRAKE = new MongoId("5943ee5a86f77413872d25ec"); + public static readonly MongoId FLASHHIDER_AR15_SAI_JAILBRAKE_556X45_MUZZLE_DEVICE = new MongoId("5c78f2882e22165df16b832e"); + public static readonly MongoId FLASHHIDER_AR15_SILENCERCO_ASR_556X45_FLASH_HIDER = new MongoId("609269c3b0e443224b421cc1"); + public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_SF3P_556X45_FLASH_HIDER = new MongoId("5c7fb51d2e2216001219ce11"); + public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_SF4P_556X45_FLASH_HIDER = new MongoId("5ea172e498dacb342978818e"); + public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_WARCOMP_556X45_FLASH_HIDER = new MongoId("5c6d710d2e22165df16b81e7"); + public static readonly MongoId FLASHHIDER_AR15_SUREFIRE_WARDEN_556X45_BLAST_REGULATOR = new MongoId("62669bccdb9ebb4daa44cd14"); + public static readonly MongoId FLASHHIDER_AR15_TAA_ZK23_556X45_MUZZLE_BRAKE = new MongoId("612e0e55a112697a4b3a66e7"); + public static readonly MongoId FLASHHIDER_AR15_THUNDER_BEAST_ARMS_223CB_556X45_MUZZLE_BRAKE = new MongoId("5d440625a4b9361eec4ae6c5"); + public static readonly MongoId FLASHHIDER_AR15_TROY_CLAYMORE_556X45_MUZZLE_BRAKE = new MongoId("5cc9b815d7f00c000e2579d6"); + public static readonly MongoId FLASHHIDER_AR15_VENDETTA_PRECISION_VP09_INTERCEPTOR_556X45_MUZZLE_BRAKE = new MongoId( + "5a7c147ce899ef00150bd8b8" + ); + public static readonly MongoId FLASHHIDER_AR15_WDR_NERO_556_556X45_MUZZLE_BRAKE = new MongoId("64943b74e9998d641b0412ed"); + public static readonly MongoId FLASHHIDER_AR15_YANKEE_HILL_PHANTOM_556X45_FLASH_HIDER = new MongoId("626a74340be03179a165e30c"); + public static readonly MongoId FLASHHIDER_ASE_UTRA_BORELOCK_338_LM_MUZZLE_BRAKE = new MongoId("673f3ef1259f5945d70e43a8"); + public static readonly MongoId FLASHHIDER_ASH12_127X55_MUZZLE_BRAKECOMPENSATOR = new MongoId("5caf17c9ae92150b30006be1"); + public static readonly MongoId FLASHHIDER_AWC_PSR_338_LM_MUZZLE_BRAKE = new MongoId("612e0d81290d254f5e6b291a"); + public static readonly MongoId FLASHHIDER_DVL10_762X51_MUZZLE_DEVICE = new MongoId("58889c7324597754281f9439"); + public static readonly MongoId FLASHHIDER_DVL10_M2_762X51_MUZZLE_BRAKE = new MongoId("5888996c24597754281f9419"); + public static readonly MongoId FLASHHIDER_FERFRANS_CRD_556X45_CONCUSSION_REDUCTION_DEVICE = new MongoId("5f6339d53ada5942720e2dc3"); + public static readonly MongoId FLASHHIDER_FN_P90_57X28_FLASH_HIDER = new MongoId("5cc82796e24e8d000f5859a8"); + public static readonly MongoId FLASHHIDER_FN_SCARL_556X45_FLASH_HIDER = new MongoId("618407a850224f204c1da549"); + public static readonly MongoId FLASHHIDER_GLOCK_9X19_CARVER_CUSTOM_4_PORT_COMPENSATOR = new MongoId("5a7ad0c451dfba0013379712"); + public static readonly MongoId FLASHHIDER_GLOCK_9X19_CARVER_CUSTOM_DECELERATOR_3_PORT_COMPENSATOR = new MongoId( + "5a7037338dc32e000d46d257" + ); + public static readonly MongoId FLASHHIDER_GLOCK_9X19_DOUBLE_DIAMOND_FLASH_HIDER = new MongoId("5a70366c8dc32e001207fb06"); + public static readonly MongoId FLASHHIDER_GLOCK_9X19_LONE_WOLF_ALPHAWOLF_BULLNOSE_COMPENSATOR = new MongoId("5a705e128dc32e000d46d258"); + public static readonly MongoId FLASHHIDER_GLOCK_9X19_LONE_WOLF_LWDCOMP9_COMPENSATOR = new MongoId("5a7ad1fb51dfba0013379715"); + public static readonly MongoId FLASHHIDER_GLOCK_9X19_STRIKE_INDUSTRIES_G4_SLIDECOMP_COMPENSATOR = new MongoId( + "5a7b32a2e899ef00135e345a" + ); + public static readonly MongoId FLASHHIDER_HK_G36_556X45_4PRONG_FLASH_HIDER = new MongoId("622f128cec80d870d349b4e8"); + public static readonly MongoId FLASHHIDER_HK_G36_556X45_FLASH_HIDER = new MongoId("622f07cfae33bc505b2c4dd5"); + public static readonly MongoId FLASHHIDER_HK_G36C_556X45_4PRONG_FLASH_HIDER = new MongoId("622f0ee47762f55aaa68ac87"); + public static readonly MongoId FLASHHIDER_HK_MP5_BT_QD_9X19_MUZZLE_BRAKE = new MongoId("615d8df08004cc50514c3236"); + public static readonly MongoId FLASHHIDER_HK_MP5_NOVESKESTYLE_9X19_MUZZLE_BRAKECOMPENSATOR = new MongoId("5c07c5ed0db834001b73571c"); + public static readonly MongoId FLASHHIDER_HK_MP7A1_46X30_FLASH_HIDER = new MongoId("5ba26acdd4351e003562908e"); + public static readonly MongoId FLASHHIDER_HK_PROLONGED_762X51_FLASH_HIDER = new MongoId("61713308d92c473c770214a0"); + public static readonly MongoId FLASHHIDER_KRISS_VECTOR_45_ACP_FLASH_HIDER = new MongoId("5fb65424956329274326f316"); + public static readonly MongoId FLASHHIDER_KRISS_VECTOR_9X19_FLASH_HIDER = new MongoId("5fbbc3324e8a554c40648348"); + public static readonly MongoId FLASHHIDER_LANTAC_BMD_762X51_BLAST_MITIGATION_DEVICE = new MongoId("5cf78720d7f00c06595bc93e"); + public static readonly MongoId FLASHHIDER_M14_JP_ENTERPRISES_762X51_TACTICAL_COMPENSATOR = new MongoId("5addbb825acfc408fb139400"); + public static readonly MongoId FLASHHIDER_M14_SMITH_ENTERPRISE_GOOD_IRON_762X51_MUZZLE_BRAKE = new MongoId("5addbb945acfc4001a5fc44e"); + public static readonly MongoId FLASHHIDER_M14_SMITH_ENTERPRISE_VORTEX_762X51_MUZZLE_BRAKE = new MongoId("5addbba15acfc400185c2854"); + public static readonly MongoId FLASHHIDER_M14_YANKEE_HILL_PHANTOM_762X51_FLASH_HIDER = new MongoId("5addbbb25acfc40015621bd9"); + public static readonly MongoId FLASHHIDER_M1911_ANARCHY_OUTDOORS_45_ACP_MUZZLE_BRAKE = new MongoId("5ef61964ec7f42238c31e0c1"); + public static readonly MongoId FLASHHIDER_M1A_NATIONAL_MATCH_762X51_FLASH_SUPPRESSOR = new MongoId("5addbb6e5acfc408fb1393fd"); + public static readonly MongoId FLASHHIDER_M1A_SMITH_ENTERPRISE_SOCOM_16_762X51_THREADED_MUZZLE_BRAKE_GAS_BLOCK = new MongoId( + "5ab3afb2d8ce87001660304d" + ); + public static readonly MongoId FLASHHIDER_M1A_SOCOM_16_762X51_MUZZLE_BRAKECOMPENSATOR = new MongoId("5aafa1c2e5b5b00015042a56"); + public static readonly MongoId FLASHHIDER_M60E3_762X51_FLASH_HIDER = new MongoId("6601281fc752a02bbe05e696"); + public static readonly MongoId FLASHHIDER_M60E6_762X51_FLASH_HIDER = new MongoId("66012a1d3dff5074ed002e2a"); + public static readonly MongoId FLASHHIDER_MCXSPEAR_CLUTCHLOK_QD_68X51_SHOULDERED_FLASH_HIDER = new MongoId("6529113b5ae2ae97b80fdf39"); + public static readonly MongoId FLASHHIDER_MOSIN_RIFLE_TACFIRE_TANKER_STYLE_762X54R_MUZZLE_BRAKE = new MongoId( + "5bbdb83fd4351e44f824c44b" + ); + public static readonly MongoId FLASHHIDER_MOSIN_RIFLE_TEXAS_PRECISION_PRODUCTS_762X54R_MUZZLE_BRAKE = new MongoId( + "5bc5a351d4351e003477a414" + ); + public static readonly MongoId FLASHHIDER_MOSIN_RIFLE_WITT_MACHINE_762X54R_MUZZLE_BRAKE = new MongoId("5bc5a35cd4351e450201232f"); + public static readonly MongoId FLASHHIDER_MPX_A2_9X19_FLASH_HIDER = new MongoId("58949dea86f77409483e16a8"); + public static readonly MongoId FLASHHIDER_ORSIS_T5000M_762X51_MUZZLE_BRAKECOMPENSATOR = new MongoId("5df35e7f2a78646d96665dd4"); + public static readonly MongoId FLASHHIDER_P226_TJS_CUSTOM_9X19_COMPENSATOR = new MongoId("5c6beec32e221601da3578f2"); + public static readonly MongoId FLASHHIDER_PK_ZENIT_DTK1P_762X54R_MUZZLE_BRAKE = new MongoId("6492ef63cfcf7c89e701abf1"); + public static readonly MongoId FLASHHIDER_PKM_762X54R_MUZZLE_BRAKE = new MongoId("6492efe46cc7e29a6f03b2a0"); + public static readonly MongoId FLASHHIDER_PKM_762X54R_SLOTTED_FLASH_HIDER = new MongoId("6492efb8cfcf7c89e701abf3"); + public static readonly MongoId FLASHHIDER_PP1901_VITYAZ_9X19_MUZZLE_BRAKECOMPENSATOR = new MongoId("5998597786f77414ea6da093"); + public static readonly MongoId FLASHHIDER_RFB_762X51_FLASH_HIDER = new MongoId("5f2aa4559b44de6b1b4e68d1"); + public static readonly MongoId FLASHHIDER_RPK16_545X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("5beec3420db834001b095429"); + public static readonly MongoId FLASHHIDER_SA58_3PRONG_TRIDENT_762X51_FLASH_HIDER = new MongoId("5b099b7d5acfc400186331e4"); + public static readonly MongoId FLASHHIDER_SA58_AUSTRIAN_STYLE_762X51_MUZZLE_BRAKE = new MongoId("5b7d68af5acfc400170e30c3"); + public static readonly MongoId FLASHHIDER_SAIGA9_9X19_MUZZLE_BRAKECOMPENSATOR = new MongoId("5998598e86f7740b3f498a86"); + public static readonly MongoId FLASHHIDER_SAKO_TRG_2242M10_338_LM_MUZZLE_BRAKE = new MongoId("673f4046259f5945d70e43ab"); + public static readonly MongoId FLASHHIDER_SAKO_TRG_CORETAC_COREBRAKE_338_LM_MUZZLE_BRAKE = new MongoId("673f3f9840aeca974e0b5c68"); + public static readonly MongoId FLASHHIDER_SIG_SAUER_762X51_3PRONG_FLASH_HIDER = new MongoId("5fbcbcf593164a5b6278efb2"); + public static readonly MongoId FLASHHIDER_SIG_SAUER_MICRO_BRAKE_762X51_MUZZLE_BRAKE = new MongoId("5fbcbd02900b1d5091531dd3"); + public static readonly MongoId FLASHHIDER_SIG_SAUER_TWO_PORT_BRAKE_762X51_MUZZLE_BRAKE = new MongoId("5fbcbd10ab884124df0cd563"); + public static readonly MongoId FLASHHIDER_SILENCERCO_AC858_ASR_338_LM_MUZZLE_BRAKE = new MongoId("5fc23636016cce60e8341b05"); + public static readonly MongoId FLASHHIDER_STEYR_AUG_A1_556X45_CLOSED_FLASH_HIDER = new MongoId("630f2872911356c17d06abc5"); + public static readonly MongoId FLASHHIDER_STEYR_AUG_A3_556X45_CLOSED_FLASH_HIDER = new MongoId("630f28f0cadb1fe05e06f004"); + public static readonly MongoId FLASHHIDER_STEYR_AUG_A3_556X45_MUZZLE_BRAKE = new MongoId("630f291b9f66a28b37094bb8"); + public static readonly MongoId FLASHHIDER_STM9_9X19_MUZZLE_BRAKE = new MongoId("60337f5dce399e10262255d1"); + public static readonly MongoId FLASHHIDER_SV98_762X54R_MUZZLE_DEVICE = new MongoId("560e620e4bdc2d724b8b456b"); + public static readonly MongoId FLASHHIDER_SV98_762X54R_THREAD_ADAPTER = new MongoId("5c4eec9b2e2216398b5aaba2"); + public static readonly MongoId FLASHHIDER_SV98_SRVV_MK20_762X54R_MUZZLE_BRAKECOMPENSATOR = new MongoId("5c4ee3d62e2216152006f302"); + public static readonly MongoId FLASHHIDER_SVDS_762X54R_MUZZLE_BRAKECOMPENSATOR = new MongoId("5c471bfc2e221602b21d4e17"); + public static readonly MongoId FLASHHIDER_SVT40_762X54R_MUZZLE_BRAKE = new MongoId("64119d1f2c6d6f921a0929f8"); + public static readonly MongoId FLASHHIDER_TACCOM_CARBINE_BRAKE_9X19_MUZZLE_BRAKE = new MongoId("5cf6935bd7f00c06585fb791"); + public static readonly MongoId FLASHHIDER_TT_PMLASER_DTKTT_MUZZLE_BRAKECOMPENSATOR = new MongoId("5bffd7ed0db834001d23ebf9"); + public static readonly MongoId FLASHHIDER_UZI_VENTED_BARREL_SHROUD = new MongoId("6699370c57df3e2b4e0a0dab"); + public static readonly MongoId FLASHHIDER_VPO136_VEPRKM_762X39_MUZZLE_BRAKECOMPENSATOR = new MongoId("59e61eb386f77440d64f5daf"); + public static readonly MongoId FLASHHIDER_VPO209_THREAD_PROTECTOR = new MongoId("59e8a00d86f7742ad93b569c"); + public static readonly MongoId FLASHHIDER_YANKEE_HILL_ANNIHILATOR_MULTICALIBER_FLASH_HIDER = new MongoId("5b3a16655acfc40016387a2a"); + public static readonly MongoId FLASHLIGHT_ARMYTEK_PREDATOR_PRO_V3_XHP35_HI = new MongoId("59d790f486f77403cb06aec6"); + public static readonly MongoId FLASHLIGHT_ULTRAFIRE_WF501B = new MongoId("57d17c5e2459775a5c57d17d"); public static readonly MongoId FLASHLIGHT_ZENIT_2D = new MongoId("646f62fee779812413011ab7"); - public static readonly MongoId FLYER_ALEX_GREEN_POSTER = new MongoId( - "675a06b84ff23436160d802f" - ); + public static readonly MongoId FLYER_ALEX_GREEN_POSTER = new MongoId("675a06b84ff23436160d802f"); public static readonly MongoId FLYER_ARENA_POSTER = new MongoId("675a0288c3102563bd01c9c3"); public static readonly MongoId FLYER_ARENA_POSTER_2 = new MongoId("675a046b8f547d6cae01922e"); public static readonly MongoId FLYER_ARENA_POSTER_3 = new MongoId("675a04c01474133a0d0bb212"); - public static readonly MongoId FLYER_DEN_OF_WOLVES_POSTER = new MongoId( - "675a0eacf905bde03d0f8253" - ); + public static readonly MongoId FLYER_DEN_OF_WOLVES_POSTER = new MongoId("675a0eacf905bde03d0f8253"); public static readonly MongoId FLYER_EXODUS_POSTER = new MongoId("675a0d2d57dd12f0260c4a31"); - public static readonly MongoId FLYER_FINAL_MOMENT_POSTER = new MongoId( - "679b946f90622daf9708da6d" - ); - public static readonly MongoId FLYER_GENEBURN_CONCERT_ADVERTISEMENT = new MongoId( - "675a0b8d4ff23436160d8031" - ); - public static readonly MongoId FLYER_GET_A_LIFE_POSTER = new MongoId( - "6841b179322db20d190b4b99" - ); + public static readonly MongoId FLYER_FINAL_MOMENT_POSTER = new MongoId("679b946f90622daf9708da6d"); + public static readonly MongoId FLYER_GENEBURN_CONCERT_ADVERTISEMENT = new MongoId("675a0b8d4ff23436160d8031"); + public static readonly MongoId FLYER_GET_A_LIFE_POSTER = new MongoId("6841b179322db20d190b4b99"); public static readonly MongoId FLYER_GET_A_PAW_POSTER = new MongoId("6841b1ff51bf8645f7067bca"); public static readonly MongoId FLYER_GIRL_POSTER_1 = new MongoId("6759e19a8367ee2b0c0f4b92"); public static readonly MongoId FLYER_GIRL_POSTER_2 = new MongoId("6759e61067c8eb5cd10352f1"); public static readonly MongoId FLYER_GIRL_POSTER_3 = new MongoId("6759e6c39422e1708e0e9b81"); public static readonly MongoId FLYER_GIRL_POSTER_4 = new MongoId("6759e7a44ff23436160d7ff5"); public static readonly MongoId FLYER_GIRL_POSTER_5 = new MongoId("6759e8b1c3102563bd01c985"); - public static readonly MongoId FLYER_GRENADE_GIRL_POSTER = new MongoId( - "67f924adb45d94a2600a8cc8" - ); + public static readonly MongoId FLYER_GRENADE_GIRL_POSTER = new MongoId("67f924adb45d94a2600a8cc8"); public static readonly MongoId FLYER_GUNFIGHT_POSTER = new MongoId("675a191f67c8eb5cd1035305"); - public static readonly MongoId FLYER_HELL_OR_HIGHWATER_POSTER = new MongoId( - "675a125caf26c56ee109072a" - ); + public static readonly MongoId FLYER_HELL_OR_HIGHWATER_POSTER = new MongoId("675a125caf26c56ee109072a"); public static readonly MongoId FLYER_HIGHWAY_POSTER = new MongoId("675a0fbbb98bf391510bafcd"); - public static readonly MongoId FLYER_I_BEAR_LOOT_POSTER = new MongoId( - "6759e07e4ff23436160d7fed" - ); - public static readonly MongoId FLYER_KILLA_AND_TAGILLA_POSTER = new MongoId( - "675a04fdb8913ff13e0496bb" - ); - public static readonly MongoId FLYER_KILLA_FANGIRL_POSTER = new MongoId( - "67f924a9154a04c33b0a3c57" - ); - public static readonly MongoId FLYER_LAST_BREATH_POSTER = new MongoId( - "679b944d597ba2ed120c3d3c" - ); - public static readonly MongoId FLYER_LAST_FLIGHT_POSTER = new MongoId( - "675a1a244ff23436160d8033" - ); + public static readonly MongoId FLYER_I_BEAR_LOOT_POSTER = new MongoId("6759e07e4ff23436160d7fed"); + public static readonly MongoId FLYER_KILLA_AND_TAGILLA_POSTER = new MongoId("675a04fdb8913ff13e0496bb"); + public static readonly MongoId FLYER_KILLA_FANGIRL_POSTER = new MongoId("67f924a9154a04c33b0a3c57"); + public static readonly MongoId FLYER_LAST_BREATH_POSTER = new MongoId("679b944d597ba2ed120c3d3c"); + public static readonly MongoId FLYER_LAST_FLIGHT_POSTER = new MongoId("675a1a244ff23436160d8033"); public static readonly MongoId FLYER_RUN_POSTER = new MongoId("675a1e502eac6c76e104ea1e"); - public static readonly MongoId FLYER_SHARPSHOOTER_POSTER = new MongoId( - "675a1f5c1474133a0d0bb218" - ); - public static readonly MongoId FLYER_SPECIAL_GIRL_POSTER = new MongoId( - "6759e91d8367ee2b0c0f4b94" - ); - public static readonly MongoId FLYER_SPOOKY_MOVIE_POSTER = new MongoId( - "675a1af21474133a0d0bb216" - ); - public static readonly MongoId FLYER_TARK_SOULS_POSTER = new MongoId( - "679b9477708cfcb2060b9ade" - ); + public static readonly MongoId FLYER_SHARPSHOOTER_POSTER = new MongoId("675a1f5c1474133a0d0bb218"); + public static readonly MongoId FLYER_SPECIAL_GIRL_POSTER = new MongoId("6759e91d8367ee2b0c0f4b94"); + public static readonly MongoId FLYER_SPOOKY_MOVIE_POSTER = new MongoId("675a1af21474133a0d0bb216"); + public static readonly MongoId FLYER_TARK_SOULS_POSTER = new MongoId("679b9477708cfcb2060b9ade"); public static readonly MongoId FLYER_TAURUS_POSTER = new MongoId("679b94734e9ca6b3d80586a7"); - public static readonly MongoId FLYER_TERRAGROUP_LABS_ADVERTISEMENT = new MongoId( - "675a0a91af26c56ee1090728" - ); - public static readonly MongoId FLYER_THE_AMBUSH_POSTER = new MongoId( - "675a202b6aaafea7210915fd" - ); - public static readonly MongoId FLYER_THE_HUNTED_POSTER = new MongoId( - "675a20c83fb2de89670113b4" - ); - public static readonly MongoId FLYER_THINGS_SURE_ARE_STRANGE_POSTER = new MongoId( - "675a081c1474133a0d0bb214" - ); - public static readonly MongoId FLYER_UNUSUAL_LEATHER_RIG_POSTER = new MongoId( - "67f924b1b07831a6ef0ce317" - ); + public static readonly MongoId FLYER_TERRAGROUP_LABS_ADVERTISEMENT = new MongoId("675a0a91af26c56ee1090728"); + public static readonly MongoId FLYER_THE_AMBUSH_POSTER = new MongoId("675a202b6aaafea7210915fd"); + public static readonly MongoId FLYER_THE_HUNTED_POSTER = new MongoId("675a20c83fb2de89670113b4"); + public static readonly MongoId FLYER_THINGS_SURE_ARE_STRANGE_POSTER = new MongoId("675a081c1474133a0d0bb214"); + public static readonly MongoId FLYER_UNUSUAL_LEATHER_RIG_POSTER = new MongoId("67f924b1b07831a6ef0ce317"); public static readonly MongoId FLYER_USEC_POSTER = new MongoId("675a213ff905bde03d0f8255"); public static readonly MongoId FLYER_VASILY_POSTER = new MongoId("675a1c129422e1708e0e9baa"); - public static readonly MongoId FLYER_WHAT_YOU_SEEK_POSTER = new MongoId( - "6759bb94b8913ff13e049669" - ); - public static readonly MongoId FOOD_ALYONKA_CHOCOLATE_BAR = new MongoId( - "57505f6224597709a92585a9" - ); + public static readonly MongoId FLYER_WHAT_YOU_SEEK_POSTER = new MongoId("6759bb94b8913ff13e049669"); + public static readonly MongoId FOOD_ALYONKA_CHOCOLATE_BAR = new MongoId("57505f6224597709a92585a9"); public static readonly MongoId FOOD_ARMY_CRACKERS = new MongoId("5448ff904bdc2d6f028b456e"); - public static readonly MongoId FOOD_CAN_OF_BEEF_STEW_LARGE = new MongoId( - "57347da92459774491567cf5" - ); - public static readonly MongoId FOOD_CAN_OF_BEEF_STEW_SMALL = new MongoId( - "57347d7224597744596b4e72" - ); - public static readonly MongoId FOOD_CAN_OF_CONDENSED_MILK = new MongoId( - "5734773724597737fd047c14" - ); + public static readonly MongoId FOOD_CAN_OF_BEEF_STEW_LARGE = new MongoId("57347da92459774491567cf5"); + public static readonly MongoId FOOD_CAN_OF_BEEF_STEW_SMALL = new MongoId("57347d7224597744596b4e72"); + public static readonly MongoId FOOD_CAN_OF_CONDENSED_MILK = new MongoId("5734773724597737fd047c14"); public static readonly MongoId FOOD_CAN_OF_GREEN_PEAS = new MongoId("57347d692459774491567cf1"); public static readonly MongoId FOOD_CAN_OF_HERRING = new MongoId("57347d9c245977448b40fa85"); - public static readonly MongoId FOOD_CAN_OF_HUMPBACK_SALMON = new MongoId( - "57347d5f245977448b40fa81" - ); - public static readonly MongoId FOOD_CAN_OF_PACIFIC_SAURY = new MongoId( - "5673de654bdc2d180f8b456d" - ); + public static readonly MongoId FOOD_CAN_OF_HUMPBACK_SALMON = new MongoId("57347d5f245977448b40fa81"); + public static readonly MongoId FOOD_CAN_OF_PACIFIC_SAURY = new MongoId("5673de654bdc2d180f8b456d"); public static readonly MongoId FOOD_CAN_OF_SPRATS = new MongoId("5bc9c29cd4351e003562b8a3"); - public static readonly MongoId FOOD_CAN_OF_SQUASH_SPREAD = new MongoId( - "57347d8724597744596b4e76" - ); - public static readonly MongoId FOOD_EMELYA_RYE_CROUTONS = new MongoId( - "5751487e245977207e26a315" - ); + public static readonly MongoId FOOD_CAN_OF_SQUASH_SPREAD = new MongoId("57347d8724597744596b4e76"); + public static readonly MongoId FOOD_EMELYA_RYE_CROUTONS = new MongoId("5751487e245977207e26a315"); public static readonly MongoId FOOD_ISKRA_RATION_PACK = new MongoId("590c5d4b86f774784e1b9c45"); - public static readonly MongoId FOOD_JAR_OF_DEVILDOG_MAYO = new MongoId( - "5bc9b156d4351e00367fbce9" - ); + public static readonly MongoId FOOD_JAR_OF_DEVILDOG_MAYO = new MongoId("5bc9b156d4351e00367fbce9"); public static readonly MongoId FOOD_MRE_RATION_PACK = new MongoId("590c5f0d86f77413997acfab"); - public static readonly MongoId FOOD_PACK_OF_INSTANT_NOODLES = new MongoId( - "656df4fec921ad01000481a2" - ); - public static readonly MongoId FOOD_PACK_OF_OAT_FLAKES = new MongoId( - "57347d90245977448f7b7f65" - ); + public static readonly MongoId FOOD_PACK_OF_INSTANT_NOODLES = new MongoId("656df4fec921ad01000481a2"); + public static readonly MongoId FOOD_PACK_OF_OAT_FLAKES = new MongoId("57347d90245977448f7b7f65"); public static readonly MongoId FOOD_PACK_OF_SUGAR = new MongoId("59e3577886f774176a362503"); - public static readonly MongoId FOOD_PACK_OF_TARKER_DRIED_MEAT = new MongoId( - "65815f0e647e3d7246384e14" - ); + public static readonly MongoId FOOD_PACK_OF_TARKER_DRIED_MEAT = new MongoId("65815f0e647e3d7246384e14"); public static readonly MongoId FOOD_RYE_CROUTONS = new MongoId("57347d3d245977448f7b7f61"); - public static readonly MongoId FOOD_SALTY_DOG_BEEF_SAUSAGE = new MongoId( - "635a758bfefc88a93f021b8a" - ); - public static readonly MongoId FOOD_SLICKERS_CHOCOLATE_BAR = new MongoId( - "544fb6cc4bdc2d34748b456e" - ); - public static readonly MongoId FOREGRIP_A3_TACTICAL_MVF001_KEYMOD_VERTICAL_FOREGRIP_BLACK = - new MongoId("5fc0f9b5d724d907e2077d82"); - public static readonly MongoId FOREGRIP_AI_AXMC_PADDED_HANDGUARD_GRIP = new MongoId( - "6281212a09427b40ab14e770" - ); - public static readonly MongoId FOREGRIP_ASH12_VERTICAL = new MongoId( - "5cda9bcfd7f00c0c0b53e900" - ); - public static readonly MongoId FOREGRIP_BCM_GUNFIGHTER_MOD_3_MLOK_FOREGRIP_BLACK = new MongoId( - "665d5d9e338229cfd6078da1" - ); - public static readonly MongoId FOREGRIP_BCM_GUNFIGHTER_MOD_3_MLOK_FOREGRIP_FDE = new MongoId( - "665edce564fb556f940ab32a" - ); - public static readonly MongoId FOREGRIP_BCM_GUNFIGHTER_MOD_3_VERTICAL = new MongoId( - "5c7fc87d2e221644f31c0298" - ); - public static readonly MongoId FOREGRIP_DANIEL_DEFENSE_ENHANCED_MLOK_VERTICAL_FOREGRIP_BLACK = - new MongoId("651a8bf3a8520e48047bf708"); - public static readonly MongoId FOREGRIP_DANIEL_DEFENSE_ENHANCED_MLOK_VERTICAL_FOREGRIP_COYOTE_BROWN = - new MongoId("651a8e529829226ceb67c319"); - public static readonly MongoId FOREGRIP_FORTIS_SHIFT_TACTICAL = new MongoId( - "59f8a37386f7747af3328f06" - ); - public static readonly MongoId FOREGRIP_HERA_ARMS_CQR_TACTICAL = new MongoId( - "5a7dbfc1159bd40016548fde" + public static readonly MongoId FOOD_SALTY_DOG_BEEF_SAUSAGE = new MongoId("635a758bfefc88a93f021b8a"); + public static readonly MongoId FOOD_SLICKERS_CHOCOLATE_BAR = new MongoId("544fb6cc4bdc2d34748b456e"); + public static readonly MongoId FOREGRIP_A3_TACTICAL_MVF001_KEYMOD_VERTICAL_FOREGRIP_BLACK = new MongoId("5fc0f9b5d724d907e2077d82"); + public static readonly MongoId FOREGRIP_AI_AXMC_PADDED_HANDGUARD_GRIP = new MongoId("6281212a09427b40ab14e770"); + public static readonly MongoId FOREGRIP_ASH12_VERTICAL = new MongoId("5cda9bcfd7f00c0c0b53e900"); + public static readonly MongoId FOREGRIP_BCM_GUNFIGHTER_MOD_3_MLOK_FOREGRIP_BLACK = new MongoId("665d5d9e338229cfd6078da1"); + public static readonly MongoId FOREGRIP_BCM_GUNFIGHTER_MOD_3_MLOK_FOREGRIP_FDE = new MongoId("665edce564fb556f940ab32a"); + public static readonly MongoId FOREGRIP_BCM_GUNFIGHTER_MOD_3_VERTICAL = new MongoId("5c7fc87d2e221644f31c0298"); + public static readonly MongoId FOREGRIP_DANIEL_DEFENSE_ENHANCED_MLOK_VERTICAL_FOREGRIP_BLACK = new MongoId("651a8bf3a8520e48047bf708"); + public static readonly MongoId FOREGRIP_DANIEL_DEFENSE_ENHANCED_MLOK_VERTICAL_FOREGRIP_COYOTE_BROWN = new MongoId( + "651a8e529829226ceb67c319" ); + public static readonly MongoId FOREGRIP_FORTIS_SHIFT_TACTICAL = new MongoId("59f8a37386f7747af3328f06"); + public static readonly MongoId FOREGRIP_HERA_ARMS_CQR_TACTICAL = new MongoId("5a7dbfc1159bd40016548fde"); public static readonly MongoId FOREGRIP_HK_STURMGRIFF = new MongoId("619386379fb0c665d5490dbe"); public static readonly MongoId FOREGRIP_KAC_VERTICAL = new MongoId("5c87ca002e221600114cb150"); - public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_BLACK = new MongoId( - "588226d124597767ad33f787" - ); - public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_FDE = new MongoId( - "588226dd24597767ad33f789" - ); - public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_FOREST_GREEN = new MongoId( - "588226e62459776e3e094af7" - ); - public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_OLIVE_DRAB = new MongoId( - "588226ef24597767af46e39c" - ); - public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_BLACK = new MongoId( - "57cffb66245977632f391a99" - ); - public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_FDE = new MongoId( - "57cffcd624597763133760c5" - ); - public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_OLIVE_DRAB = - new MongoId("57cffcdd24597763f5110006"); - public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_STEALTH_GREY = - new MongoId("57cffce524597763b31685d8"); - public static readonly MongoId FOREGRIP_MAGPUL_RVG_FOREGRIP_BLACK = new MongoId( - "59fc48e086f77463b1118392" - ); - public static readonly MongoId FOREGRIP_MAGPUL_RVG_FOREGRIP_FDE = new MongoId( - "5fce0cf655375d18a253eff0" - ); - public static readonly MongoId FOREGRIP_MONSTRUM_TACTICAL_VERTICAL_FORE_GRIP_KEYMOD = - new MongoId("615d8fd3290d254f5e6b2edc"); + public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_BLACK = new MongoId("588226d124597767ad33f787"); + public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_FDE = new MongoId("588226dd24597767ad33f789"); + public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_FOREST_GREEN = new MongoId("588226e62459776e3e094af7"); + public static readonly MongoId FOREGRIP_MAGPUL_AFG_TACTICAL_FOREGRIP_OLIVE_DRAB = new MongoId("588226ef24597767af46e39c"); + public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_BLACK = new MongoId("57cffb66245977632f391a99"); + public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_FDE = new MongoId("57cffcd624597763133760c5"); + public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_OLIVE_DRAB = new MongoId("57cffcdd24597763f5110006"); + public static readonly MongoId FOREGRIP_MAGPUL_MLOK_AFG_TACTICAL_FOREGRIP_STEALTH_GREY = new MongoId("57cffce524597763b31685d8"); + public static readonly MongoId FOREGRIP_MAGPUL_RVG_FOREGRIP_BLACK = new MongoId("59fc48e086f77463b1118392"); + public static readonly MongoId FOREGRIP_MAGPUL_RVG_FOREGRIP_FDE = new MongoId("5fce0cf655375d18a253eff0"); + public static readonly MongoId FOREGRIP_MONSTRUM_TACTICAL_VERTICAL_FORE_GRIP_KEYMOD = new MongoId("615d8fd3290d254f5e6b2edc"); public static readonly MongoId FOREGRIP_MP9N_VERTICAL = new MongoId("5de8fbad2fbe23140d3ee9c4"); - public static readonly MongoId FOREGRIP_ORSIS_T5000M_PADDED_HANDGUARD_GRIP = new MongoId( - "5df36948bb49d91fb446d5ad" + public static readonly MongoId FOREGRIP_ORSIS_T5000M_PADDED_HANDGUARD_GRIP = new MongoId("5df36948bb49d91fb446d5ad"); + public static readonly MongoId FOREGRIP_RTM_OSOVETS_P2_TACTICAL = new MongoId("64806bdd26c80811d408d37a"); + public static readonly MongoId FOREGRIP_RTM_OSOVETS_P2_TACTICAL_FOREGRIP_KHAKI = new MongoId("64807a29e5ffe165600abc97"); + public static readonly MongoId FOREGRIP_RTM_PILLAU_P2_TACTICAL_FOREGRIP_RED = new MongoId("65169d5b30425317755f8e25"); + public static readonly MongoId FOREGRIP_RTM_PILLAU_TACTICAL = new MongoId("5cf4fb76d7f00c065703d3ac"); + public static readonly MongoId FOREGRIP_RTM_PILLAU_TACTICAL_FOREGRIP_SAND = new MongoId("648067db042be0705c0b3009"); + public static readonly MongoId FOREGRIP_SAKO_TRG_M10_GRIP_PAD = new MongoId("673cb81f5b1511adb10cd326"); + public static readonly MongoId FOREGRIP_SIG_SAUER_VERTICAL_FOREGRIP_KEYMOD_BLACK = new MongoId("5fc0f9cbd6fa9c00c571bb90"); + public static readonly MongoId FOREGRIP_SR3M_POLYMER_FOREGRIP_BLACK = new MongoId("65329ebcc0d50d0c9204ace1"); + public static readonly MongoId FOREGRIP_SR3M_POLYMER_FOREGRIP_PLUM = new MongoId("6565c0c2ff7eb7070409084c"); + public static readonly MongoId FOREGRIP_STARK_SE5_EXPRESS_FORWARD = new MongoId("5b057b4f5acfc4771e1bd3e9"); + public static readonly MongoId FOREGRIP_STARK_SE5_EXPRESS_FORWARD_FOREGRIP_FDE = new MongoId("655df24fdf80b12750626d0a"); + public static readonly MongoId FOREGRIP_STEYR_AUG_VERTICAL = new MongoId("634e61b0767cb15c4601a877"); + public static readonly MongoId FOREGRIP_STEYR_AUG_VERTICAL_FOREGRIP_BLACK = new MongoId("671883292e2eeb98d406f3b8"); + public static readonly MongoId FOREGRIP_STRIKE_INDUSTRIES_COBRA_TACTICAL = new MongoId("5c791e872e2216001219c40a"); + public static readonly MongoId FOREGRIP_STRIKE_INDUSTRIES_COBRA_TACTICAL_FOREGRIP_FDE = new MongoId("655dccfdbdcc6b5df71382b6"); + public static readonly MongoId FOREGRIP_TACTICAL_DYNAMICS_SKELETONIZED = new MongoId("5f6340d3ca442212f4047eb2"); + public static readonly MongoId FOREGRIP_TANGODOWN_BGVQDITI_FOREGRIP_BLACK = new MongoId("661e52e29c8b4dadef008577"); + public static readonly MongoId FOREGRIP_TANGODOWN_BGVQDITI_FOREGRIP_FDE = new MongoId("661e53149c8b4dadef008579"); + public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVMK46K_FOREGRIP_BLACK = new MongoId("558032614bdc2de7118b4585"); + public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVMK46K_FOREGRIP_FDE = new MongoId("58c157be86f77403c74b2bb6"); + public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVMK46K_FOREGRIP_STEALTH_GREY = new MongoId("58c157c886f774032749fb06"); + public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVQDK_FOREGRIP_BLACK = new MongoId("661e52415be02310ed07a07a"); + public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVQDK_FOREGRIP_FDE = new MongoId("661e52b5b099f32c28003586"); + public static readonly MongoId FOREGRIP_VIKING_TACTICS_UVG_TACTICAL = new MongoId("591af28e86f77414a27a9e1d"); + public static readonly MongoId FOREGRIP_ZENIT_RK0_TACTICAL = new MongoId("5c1bc4812e22164bef5cfde7"); + public static readonly MongoId FOREGRIP_ZENIT_RK1_TACTICAL = new MongoId("5c1bc5612e221602b5429350"); + public static readonly MongoId FOREGRIP_ZENIT_RK1_TACTICAL_FOREGRIP_ON_B25U_MOUNT = new MongoId("5c1cd46f2e22164bef5cfedb"); + public static readonly MongoId FOREGRIP_ZENIT_RK2_TACTICAL = new MongoId("5c1bc5af2e221602b412949b"); + public static readonly MongoId FOREGRIP_ZENIT_RK4_TACTICAL = new MongoId("5c1bc5fb2e221602b1779b32"); + public static readonly MongoId FOREGRIP_ZENIT_RK5_TACTICAL = new MongoId("5c1bc7432e221602b412949d"); + public static readonly MongoId FOREGRIP_ZENIT_RK6_TACTICAL = new MongoId("5c1bc7752e221602b1779b34"); + public static readonly MongoId GASBLOCK_AK_KIBA_ARMS_VDM_CS_GAS_TUBE = new MongoId("5a01ad4786f77450561fda02"); + public static readonly MongoId GASBLOCK_AK_TROY_FULL_LENGTH_RAIL_HANDGUARD_WITH_GAS_TUBE = new MongoId("5b237e425acfc4771e1be0b6"); + public static readonly MongoId GASBLOCK_AK_ULTIMAK_M1B_HANDGUARD_WITH_GAS_TUBE = new MongoId("59ccfdba86f7747f2109a587"); + public static readonly MongoId GASBLOCK_AK_VEZHLIVYY_STRELOK_VS24_VS33C_HANDGUARD_WITH_GAS_TUBE = new MongoId( + "5cf656f2d7f00c06585fb6eb" ); - public static readonly MongoId FOREGRIP_RTM_OSOVETS_P2_TACTICAL = new MongoId( - "64806bdd26c80811d408d37a" + public static readonly MongoId GASBLOCK_AK_VEZHLIVYY_STRELOK_VS24_VS33C_HANDGUARD_WITH_GAS_TUBE_WHITE = new MongoId( + "5d4aab30a4b9365435358c55" ); - public static readonly MongoId FOREGRIP_RTM_OSOVETS_P2_TACTICAL_FOREGRIP_KHAKI = new MongoId( - "64807a29e5ffe165600abc97" - ); - public static readonly MongoId FOREGRIP_RTM_PILLAU_P2_TACTICAL_FOREGRIP_RED = new MongoId( - "65169d5b30425317755f8e25" - ); - public static readonly MongoId FOREGRIP_RTM_PILLAU_TACTICAL = new MongoId( - "5cf4fb76d7f00c065703d3ac" - ); - public static readonly MongoId FOREGRIP_RTM_PILLAU_TACTICAL_FOREGRIP_SAND = new MongoId( - "648067db042be0705c0b3009" - ); - public static readonly MongoId FOREGRIP_SAKO_TRG_M10_GRIP_PAD = new MongoId( - "673cb81f5b1511adb10cd326" - ); - public static readonly MongoId FOREGRIP_SIG_SAUER_VERTICAL_FOREGRIP_KEYMOD_BLACK = new MongoId( - "5fc0f9cbd6fa9c00c571bb90" - ); - public static readonly MongoId FOREGRIP_SR3M_POLYMER_FOREGRIP_BLACK = new MongoId( - "65329ebcc0d50d0c9204ace1" - ); - public static readonly MongoId FOREGRIP_SR3M_POLYMER_FOREGRIP_PLUM = new MongoId( - "6565c0c2ff7eb7070409084c" - ); - public static readonly MongoId FOREGRIP_STARK_SE5_EXPRESS_FORWARD = new MongoId( - "5b057b4f5acfc4771e1bd3e9" - ); - public static readonly MongoId FOREGRIP_STARK_SE5_EXPRESS_FORWARD_FOREGRIP_FDE = new MongoId( - "655df24fdf80b12750626d0a" - ); - public static readonly MongoId FOREGRIP_STEYR_AUG_VERTICAL = new MongoId( - "634e61b0767cb15c4601a877" - ); - public static readonly MongoId FOREGRIP_STEYR_AUG_VERTICAL_FOREGRIP_BLACK = new MongoId( - "671883292e2eeb98d406f3b8" - ); - public static readonly MongoId FOREGRIP_STRIKE_INDUSTRIES_COBRA_TACTICAL = new MongoId( - "5c791e872e2216001219c40a" - ); - public static readonly MongoId FOREGRIP_STRIKE_INDUSTRIES_COBRA_TACTICAL_FOREGRIP_FDE = - new MongoId("655dccfdbdcc6b5df71382b6"); - public static readonly MongoId FOREGRIP_TACTICAL_DYNAMICS_SKELETONIZED = new MongoId( - "5f6340d3ca442212f4047eb2" - ); - public static readonly MongoId FOREGRIP_TANGODOWN_BGVQDITI_FOREGRIP_BLACK = new MongoId( - "661e52e29c8b4dadef008577" - ); - public static readonly MongoId FOREGRIP_TANGODOWN_BGVQDITI_FOREGRIP_FDE = new MongoId( - "661e53149c8b4dadef008579" - ); - public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVMK46K_FOREGRIP_BLACK = new MongoId( - "558032614bdc2de7118b4585" - ); - public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVMK46K_FOREGRIP_FDE = new MongoId( - "58c157be86f77403c74b2bb6" - ); - public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVMK46K_FOREGRIP_STEALTH_GREY = - new MongoId("58c157c886f774032749fb06"); - public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVQDK_FOREGRIP_BLACK = new MongoId( - "661e52415be02310ed07a07a" - ); - public static readonly MongoId FOREGRIP_TANGODOWN_STUBBY_BGVQDK_FOREGRIP_FDE = new MongoId( - "661e52b5b099f32c28003586" - ); - public static readonly MongoId FOREGRIP_VIKING_TACTICS_UVG_TACTICAL = new MongoId( - "591af28e86f77414a27a9e1d" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK0_TACTICAL = new MongoId( - "5c1bc4812e22164bef5cfde7" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK1_TACTICAL = new MongoId( - "5c1bc5612e221602b5429350" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK1_TACTICAL_FOREGRIP_ON_B25U_MOUNT = new MongoId( - "5c1cd46f2e22164bef5cfedb" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK2_TACTICAL = new MongoId( - "5c1bc5af2e221602b412949b" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK4_TACTICAL = new MongoId( - "5c1bc5fb2e221602b1779b32" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK5_TACTICAL = new MongoId( - "5c1bc7432e221602b412949d" - ); - public static readonly MongoId FOREGRIP_ZENIT_RK6_TACTICAL = new MongoId( - "5c1bc7752e221602b1779b34" - ); - public static readonly MongoId GASBLOCK_AK_KIBA_ARMS_VDM_CS_GAS_TUBE = new MongoId( - "5a01ad4786f77450561fda02" - ); - public static readonly MongoId GASBLOCK_AK_TROY_FULL_LENGTH_RAIL_HANDGUARD_WITH_GAS_TUBE = - new MongoId("5b237e425acfc4771e1be0b6"); - public static readonly MongoId GASBLOCK_AK_ULTIMAK_M1B_HANDGUARD_WITH_GAS_TUBE = new MongoId( - "59ccfdba86f7747f2109a587" - ); - public static readonly MongoId GASBLOCK_AK_VEZHLIVYY_STRELOK_VS24_VS33C_HANDGUARD_WITH_GAS_TUBE = - new MongoId("5cf656f2d7f00c06585fb6eb"); - public static readonly MongoId GASBLOCK_AK_VEZHLIVYY_STRELOK_VS24_VS33C_HANDGUARD_WITH_GAS_TUBE_WHITE = - new MongoId("5d4aab30a4b9365435358c55"); public static readonly MongoId GASBLOCK_AK12_GAS_TUBE = new MongoId("649ec107961514b22506b10c"); - public static readonly MongoId GASBLOCK_AK50_MLOK_HANDGUARD_WITH_GAS_TUBE = new MongoId( - "67d417c023ec241bb70d4896" - ); - public static readonly MongoId GASBLOCK_AK545_MK_21_GAS_TUBE = new MongoId( - "628b8d83717774443b15e248" - ); + public static readonly MongoId GASBLOCK_AK50_MLOK_HANDGUARD_WITH_GAS_TUBE = new MongoId("67d417c023ec241bb70d4896"); + public static readonly MongoId GASBLOCK_AK545_MK_21_GAS_TUBE = new MongoId("628b8d83717774443b15e248"); public static readonly MongoId GASBLOCK_AK74_GAS_TUBE = new MongoId("59c6633186f7740cf0493bb9"); public static readonly MongoId GASBLOCK_AKM_GAS_TUBE = new MongoId("59d64ec286f774171d1e0a42"); - public static readonly MongoId GASBLOCK_AKS74U_GAS_TUBE = new MongoId( - "59d36a0086f7747e673f3946" - ); - public static readonly MongoId GASBLOCK_AR10_CMMG_LOW_PROFILE_GAS_BLOCK = new MongoId( - "6065dc8a132d4d12c81fd8e3" - ); - public static readonly MongoId GASBLOCK_AR10_JP_ENTERPRISES_GAS_SYSTEM6 = new MongoId( - "5a34fbadc4a28200741e230a" - ); - public static readonly MongoId GASBLOCK_AR10_KAC_LOW_PROFILE_GAS_BLOCK = new MongoId( - "5dfa3d45dfc58d14537c20b0" - ); - public static readonly MongoId GASBLOCK_AR15_BALLISTIC_ADVANTAGE_LOPRO_GAS_BLOCK = new MongoId( - "63d3ce281fe77d0f2801859e" - ); - public static readonly MongoId GASBLOCK_AR15_DANIEL_DEFENSE_MK12_LOW_PROFILE_GAS_BLOCK = - new MongoId("56eabcd4d2720b66698b4574"); - public static readonly MongoId GASBLOCK_AR15_JP_ENTERPRISES_GAS_SYSTEM5B = new MongoId( - "5d00ec68d7ad1a04a067e5be" - ); - public static readonly MongoId GASBLOCK_AR15_WINDHAM_WEAPONRY_RAIL_GAS_BLOCK = new MongoId( - "56ea8d2fd2720b7c698b4570" - ); - public static readonly MongoId GASBLOCK_HK_416A5_LOW_PROFILE_GAS_BLOCK = new MongoId( - "5bb20dcad4351e3bac1212da" - ); - public static readonly MongoId GASBLOCK_HK_G36_GAS_BLOCK = new MongoId( - "622b327b267a1b13a44abea3" - ); - public static readonly MongoId GASBLOCK_HK417_LOW_PROFILE_GAS_BLOCK = new MongoId( - "61702f1b67085e45ef140b26" - ); - public static readonly MongoId GASBLOCK_M4A1_FRONT_SIGHT_WITH_GAS_BLOCK = new MongoId( - "5ae30e795acfc408fb139a0b" - ); + public static readonly MongoId GASBLOCK_AKS74U_GAS_TUBE = new MongoId("59d36a0086f7747e673f3946"); + public static readonly MongoId GASBLOCK_AR10_CMMG_LOW_PROFILE_GAS_BLOCK = new MongoId("6065dc8a132d4d12c81fd8e3"); + public static readonly MongoId GASBLOCK_AR10_JP_ENTERPRISES_GAS_SYSTEM6 = new MongoId("5a34fbadc4a28200741e230a"); + public static readonly MongoId GASBLOCK_AR10_KAC_LOW_PROFILE_GAS_BLOCK = new MongoId("5dfa3d45dfc58d14537c20b0"); + public static readonly MongoId GASBLOCK_AR15_BALLISTIC_ADVANTAGE_LOPRO_GAS_BLOCK = new MongoId("63d3ce281fe77d0f2801859e"); + public static readonly MongoId GASBLOCK_AR15_DANIEL_DEFENSE_MK12_LOW_PROFILE_GAS_BLOCK = new MongoId("56eabcd4d2720b66698b4574"); + public static readonly MongoId GASBLOCK_AR15_JP_ENTERPRISES_GAS_SYSTEM5B = new MongoId("5d00ec68d7ad1a04a067e5be"); + public static readonly MongoId GASBLOCK_AR15_WINDHAM_WEAPONRY_RAIL_GAS_BLOCK = new MongoId("56ea8d2fd2720b7c698b4570"); + public static readonly MongoId GASBLOCK_HK_416A5_LOW_PROFILE_GAS_BLOCK = new MongoId("5bb20dcad4351e3bac1212da"); + public static readonly MongoId GASBLOCK_HK_G36_GAS_BLOCK = new MongoId("622b327b267a1b13a44abea3"); + public static readonly MongoId GASBLOCK_HK417_LOW_PROFILE_GAS_BLOCK = new MongoId("61702f1b67085e45ef140b26"); + public static readonly MongoId GASBLOCK_M4A1_FRONT_SIGHT_WITH_GAS_BLOCK = new MongoId("5ae30e795acfc408fb139a0b"); public static readonly MongoId GASBLOCK_MCX_GAS_BLOCK = new MongoId("5fbc210bf24b94483f726481"); - public static readonly MongoId GASBLOCK_MCXSPEAR_ADJUSTABLE_GAS_PISTON = new MongoId( - "652910bc24cbe3c74a05e5b9" + public static readonly MongoId GASBLOCK_MCXSPEAR_ADJUSTABLE_GAS_PISTON = new MongoId("652910bc24cbe3c74a05e5b9"); + public static readonly MongoId GASBLOCK_MK18_GAS_BLOCK = new MongoId("5fc2360f900b1d5091531e19"); + public static readonly MongoId GASBLOCK_MOLOT_ARMS_AKMTYPE_GAS_TUBE = new MongoId("59e649f986f77411d949b246"); + public static readonly MongoId GASBLOCK_OPSKS_GAS_TUBE = new MongoId("634f036a517ccc8a960fc746"); + public static readonly MongoId GASBLOCK_PP1901_VITYAZ_GAS_TUBE = new MongoId("59ccd11386f77428f24a488f"); + public static readonly MongoId GASBLOCK_PP1901_VITYAZ_SAG_MK1_MLOK_HANDGUARD_WITH_GAS_TUBE = new MongoId("676177df1f08ed5e8800b7ae"); + public static readonly MongoId GASBLOCK_PP1901_VITYAZ_VECTOR_VRLPS_LEFTSIDE_CHARGING_HANDLE = new MongoId("65ae4f57e343f0acc00824da"); + public static readonly MongoId GASBLOCK_RD704_SLR_ION_LITE_RAILED_GAS_TUBE_HANDGUARD_WITH_GAS_TUBE = new MongoId( + "628a83c29179c324ed269508" ); - public static readonly MongoId GASBLOCK_MK18_GAS_BLOCK = new MongoId( - "5fc2360f900b1d5091531e19" - ); - public static readonly MongoId GASBLOCK_MOLOT_ARMS_AKMTYPE_GAS_TUBE = new MongoId( - "59e649f986f77411d949b246" - ); - public static readonly MongoId GASBLOCK_OPSKS_GAS_TUBE = new MongoId( - "634f036a517ccc8a960fc746" - ); - public static readonly MongoId GASBLOCK_PP1901_VITYAZ_GAS_TUBE = new MongoId( - "59ccd11386f77428f24a488f" - ); - public static readonly MongoId GASBLOCK_PP1901_VITYAZ_SAG_MK1_MLOK_HANDGUARD_WITH_GAS_TUBE = - new MongoId("676177df1f08ed5e8800b7ae"); - public static readonly MongoId GASBLOCK_PP1901_VITYAZ_VECTOR_VRLPS_LEFTSIDE_CHARGING_HANDLE = - new MongoId("65ae4f57e343f0acc00824da"); - public static readonly MongoId GASBLOCK_RD704_SLR_ION_LITE_RAILED_GAS_TUBE_HANDGUARD_WITH_GAS_TUBE = - new MongoId("628a83c29179c324ed269508"); public static readonly MongoId GASBLOCK_SKS_GAS_TUBE = new MongoId("634f02d7517ccc8a960fc744"); public static readonly MongoId GASBLOCK_SVDS_GAS_TUBE = new MongoId("5c471c842e221615214259b5"); - public static readonly MongoId GASBLOCK_VPO101_GAS_TUBE = new MongoId( - "5c5039be2e221602b177c9ff" - ); + public static readonly MongoId GASBLOCK_VPO101_GAS_TUBE = new MongoId("5c5039be2e221602b177c9ff"); public static readonly MongoId GRENADE_F1_HAND = new MongoId("5710c24ad2720bc3458b45a3"); - public static readonly MongoId GRENADE_F1_HAND_GRENADE_REDUCED_DELAY = new MongoId( - "67b49e7335dec48e3e05e057" - ); - public static readonly MongoId GRENADE_M18_SMOKE_GRENADE_GREEN = new MongoId( - "617aa4dd8166f034d57de9c5" - ); + public static readonly MongoId GRENADE_F1_HAND_GRENADE_REDUCED_DELAY = new MongoId("67b49e7335dec48e3e05e057"); + public static readonly MongoId GRENADE_M18_SMOKE_GRENADE_GREEN = new MongoId("617aa4dd8166f034d57de9c5"); public static readonly MongoId GRENADE_M67_HAND = new MongoId("58d3db5386f77426186285a0"); - public static readonly MongoId GRENADE_MODEL_7290_FLASH_BANG = new MongoId( - "619256e5f8af2c1a4e1f5d92" - ); + public static readonly MongoId GRENADE_MODEL_7290_FLASH_BANG = new MongoId("619256e5f8af2c1a4e1f5d92"); public static readonly MongoId GRENADE_RDG2B_SMOKE = new MongoId("5a2a57cfc4a2826c6e06d44a"); public static readonly MongoId GRENADE_RGD5_HAND = new MongoId("5448be9a4bdc2dfd2f8b456a"); public static readonly MongoId GRENADE_RGN_HAND = new MongoId("617fd91e5539a84ec44ce155"); public static readonly MongoId GRENADE_RGO_HAND = new MongoId("618a431df1eb8e24b8741deb"); public static readonly MongoId GRENADE_V40_MINI = new MongoId("66dae7cbeb28f0f96809f325"); - public static readonly MongoId GRENADE_VOG17_KHATTABKA_IMPROVISED_HAND = new MongoId( - "5e32f56fcb6d5863cc5e5ee4" - ); - public static readonly MongoId GRENADE_VOG25_KHATTABKA_IMPROVISED_HAND = new MongoId( - "5e340dcdcb6d5863cc5e5efb" - ); + public static readonly MongoId GRENADE_VOG17_KHATTABKA_IMPROVISED_HAND = new MongoId("5e32f56fcb6d5863cc5e5ee4"); + public static readonly MongoId GRENADE_VOG25_KHATTABKA_IMPROVISED_HAND = new MongoId("5e340dcdcb6d5863cc5e5efb"); public static readonly MongoId GRENADE_ZARYA_STUN = new MongoId("5a0c27731526d80618476ac4"); - public static readonly MongoId GRENADELAUNCHER_FN40GL_01 = new MongoId( - "5e81ebcd8e146c7080625e15" - ); - public static readonly MongoId GRENADELAUNCHER_FN40GL_02 = new MongoId( - "639c3fbbd0446708ee622ee9" - ); - public static readonly MongoId GRENADELAUNCHER_FN40GL_03 = new MongoId( - "639af924d0446708ee62294e" - ); + public static readonly MongoId GRENADELAUNCHER_FN40GL_01 = new MongoId("5e81ebcd8e146c7080625e15"); + public static readonly MongoId GRENADELAUNCHER_FN40GL_02 = new MongoId("639c3fbbd0446708ee622ee9"); + public static readonly MongoId GRENADELAUNCHER_FN40GL_03 = new MongoId("639af924d0446708ee62294e"); public static readonly MongoId HANDGUARD_9A91 = new MongoId("644675573d52156624001fc9"); - public static readonly MongoId HANDGUARD_AI_AXMC_AX_KEYSLOT_16_INCH = new MongoId( - "6281209662cba23f6c4d7a19" - ); - public static readonly MongoId HANDGUARD_AK_100SERIES_POLYMER = new MongoId( - "5cbda392ae92155f3c17c39f" - ); - public static readonly MongoId HANDGUARD_AK_545_DESIGN_AGGRESSOR = new MongoId( - "5cf4e3f3d7f00c06595bc7f0" - ); - public static readonly MongoId HANDGUARD_AK_AKDEMIA_DOMINATOR = new MongoId( - "647dba3142c479dde701b654" - ); - public static readonly MongoId HANDGUARD_AK_ALFA_ARMS_ASPID = new MongoId( - "647dd2b8a12ebf96c3031655" - ); + public static readonly MongoId HANDGUARD_AI_AXMC_AX_KEYSLOT_16_INCH = new MongoId("6281209662cba23f6c4d7a19"); + public static readonly MongoId HANDGUARD_AK_100SERIES_POLYMER = new MongoId("5cbda392ae92155f3c17c39f"); + public static readonly MongoId HANDGUARD_AK_545_DESIGN_AGGRESSOR = new MongoId("5cf4e3f3d7f00c06595bc7f0"); + public static readonly MongoId HANDGUARD_AK_AKDEMIA_DOMINATOR = new MongoId("647dba3142c479dde701b654"); + public static readonly MongoId HANDGUARD_AK_ALFA_ARMS_ASPID = new MongoId("647dd2b8a12ebf96c3031655"); public static readonly MongoId HANDGUARD_AK_CAA_RS47 = new MongoId("5648ae314bdc2d3d1c8b457f"); - public static readonly MongoId HANDGUARD_AK_CNC_GUNS_OV_GP = new MongoId( - "6389f1dfc879ce63f72fc43e" - ); - public static readonly MongoId HANDGUARD_AK_HEXAGON_TUBULAR = new MongoId( - "5b800e9286f7747a8b04f3ff" - ); - public static readonly MongoId HANDGUARD_AK_HEXAGON_TUBULAR_HANDGUARD_ANODIZED_RED = - new MongoId("5b80242286f77429445e0b47"); - public static readonly MongoId HANDGUARD_AK_KREBS_CUSTOM_UFM_KEYMOD = new MongoId( - "59fb375986f7741b681b81a6" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_BLACK = new MongoId( - "57cff947245977638e6f2a19" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_FDE = new MongoId( - "57cffd8224597763b03fc609" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_OLIVE_DRAB = new MongoId( - "57cffddc24597763133760c6" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_PLUM = new MongoId( - "57cffe0024597763b03fc60b" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_STEALTH_GREY = new MongoId( - "57cffe20245977632f391a9d" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_ZHUKOVU_HANDGUARD_BLACK = new MongoId( - "5c9a07572e221644f31c4b32" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_ZHUKOVU_HANDGUARD_FDE = new MongoId( - "5c9a1c3a2e2216000e69fb6a" - ); - public static readonly MongoId HANDGUARD_AK_MAGPUL_ZHUKOVU_HANDGUARD_PLUM = new MongoId( - "5c9a1c422e221600106f69f0" - ); - public static readonly MongoId HANDGUARD_AK_STRIKE_INDUSTRIES_TRAX_1 = new MongoId( - "5a9d56c8a2750c0032157146" - ); - public static readonly MongoId HANDGUARD_AK_STRIKE_INDUSTRIES_TRAX_2_HANDGUARD_EXTENSION = - new MongoId("5a9d6d34a2750c00141e07da"); + public static readonly MongoId HANDGUARD_AK_CNC_GUNS_OV_GP = new MongoId("6389f1dfc879ce63f72fc43e"); + public static readonly MongoId HANDGUARD_AK_HEXAGON_TUBULAR = new MongoId("5b800e9286f7747a8b04f3ff"); + public static readonly MongoId HANDGUARD_AK_HEXAGON_TUBULAR_HANDGUARD_ANODIZED_RED = new MongoId("5b80242286f77429445e0b47"); + public static readonly MongoId HANDGUARD_AK_KREBS_CUSTOM_UFM_KEYMOD = new MongoId("59fb375986f7741b681b81a6"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_BLACK = new MongoId("57cff947245977638e6f2a19"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_FDE = new MongoId("57cffd8224597763b03fc609"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_OLIVE_DRAB = new MongoId("57cffddc24597763133760c6"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_PLUM = new MongoId("57cffe0024597763b03fc60b"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_MOE_AKM_HANDGUARD_STEALTH_GREY = new MongoId("57cffe20245977632f391a9d"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_ZHUKOVU_HANDGUARD_BLACK = new MongoId("5c9a07572e221644f31c4b32"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_ZHUKOVU_HANDGUARD_FDE = new MongoId("5c9a1c3a2e2216000e69fb6a"); + public static readonly MongoId HANDGUARD_AK_MAGPUL_ZHUKOVU_HANDGUARD_PLUM = new MongoId("5c9a1c422e221600106f69f0"); + public static readonly MongoId HANDGUARD_AK_STRIKE_INDUSTRIES_TRAX_1 = new MongoId("5a9d56c8a2750c0032157146"); + public static readonly MongoId HANDGUARD_AK_STRIKE_INDUSTRIES_TRAX_2_HANDGUARD_EXTENSION = new MongoId("5a9d6d34a2750c00141e07da"); public static readonly MongoId HANDGUARD_AK_TDI_AKML = new MongoId("5d1b198cd7ad1a604869ad72"); - public static readonly MongoId HANDGUARD_AK_TDI_AKML_HANDGUARD_ANODIZED_BRONZE = new MongoId( - "5d4aaa73a4b9365392071175" - ); - public static readonly MongoId HANDGUARD_AK_TDI_AKML_HANDGUARD_ANODIZED_RED = new MongoId( - "5d4aaa54a4b9365392071170" - ); - public static readonly MongoId HANDGUARD_AK_TDI_X47_TACTICAL_HANDGUARD_RAIL_SYSTEM = - new MongoId("5f6331e097199b7db2128dc2"); - public static readonly MongoId HANDGUARD_AK_VLTOR_CMRD_KEYMOD = new MongoId( - "5c17664f2e2216398b5a7e3c" - ); + public static readonly MongoId HANDGUARD_AK_TDI_AKML_HANDGUARD_ANODIZED_BRONZE = new MongoId("5d4aaa73a4b9365392071175"); + public static readonly MongoId HANDGUARD_AK_TDI_AKML_HANDGUARD_ANODIZED_RED = new MongoId("5d4aaa54a4b9365392071170"); + public static readonly MongoId HANDGUARD_AK_TDI_X47_TACTICAL_HANDGUARD_RAIL_SYSTEM = new MongoId("5f6331e097199b7db2128dc2"); + public static readonly MongoId HANDGUARD_AK_VLTOR_CMRD_KEYMOD = new MongoId("5c17664f2e2216398b5a7e3c"); public static readonly MongoId HANDGUARD_AK_ZENIT_B10 = new MongoId("5c617a5f2e2216000f1e81b3"); - public static readonly MongoId HANDGUARD_AK_ZENIT_B10M_HANDGUARD_WITH_B19_UPPER_MOUNT = - new MongoId("5648b4534bdc2d3d1c8b4580"); - public static readonly MongoId HANDGUARD_AK_ZENIT_B30_HANDGUARD_WITH_B31S_UPPER_HANDGUARD_RAIL = - new MongoId("5efaf417aeb21837e749c7f2"); + public static readonly MongoId HANDGUARD_AK_ZENIT_B10M_HANDGUARD_WITH_B19_UPPER_MOUNT = new MongoId("5648b4534bdc2d3d1c8b4580"); + public static readonly MongoId HANDGUARD_AK_ZENIT_B30_HANDGUARD_WITH_B31S_UPPER_HANDGUARD_RAIL = new MongoId( + "5efaf417aeb21837e749c7f2" + ); public static readonly MongoId HANDGUARD_AK12 = new MongoId("649ec127c93611967b034957"); public static readonly MongoId HANDGUARD_AK545_MK3 = new MongoId("628b916469015a4e1711ed8d"); - public static readonly MongoId HANDGUARD_AK74_POLYMER_HANDGUARD_PLUM = new MongoId( - "5cbda9f4ae9215000e5b9bfc" - ); + public static readonly MongoId HANDGUARD_AK74_POLYMER_HANDGUARD_PLUM = new MongoId("5cbda9f4ae9215000e5b9bfc"); public static readonly MongoId HANDGUARD_AK74_WOODEN = new MongoId("5648b0744bdc2d363b8b4578"); - public static readonly MongoId HANDGUARD_AK74M_POLYMER = new MongoId( - "5648b1504bdc2d9d488b4584" - ); + public static readonly MongoId HANDGUARD_AK74M_POLYMER = new MongoId("5648b1504bdc2d9d488b4584"); public static readonly MongoId HANDGUARD_AKM_WOODEN = new MongoId("59d64f2f86f77417193ef8b3"); - public static readonly MongoId HANDGUARD_AKS74U_ALFA_ARMS_GOLIAF = new MongoId( - "5d15ce51d7ad1a1eff619092" + public static readonly MongoId HANDGUARD_AKS74U_ALFA_ARMS_GOLIAF = new MongoId("5d15ce51d7ad1a1eff619092"); + public static readonly MongoId HANDGUARD_AKS74U_ALFA_ARMS_GOLIAF_MLOK = new MongoId("647db1eca8d3399c380d195c"); + public static readonly MongoId HANDGUARD_AKS74U_CAA_XRSU47SU_TACTICAL = new MongoId("5a957c3fa2750c00137fa5f7"); + public static readonly MongoId HANDGUARD_AKS74U_WOODEN = new MongoId("57dc32dc245977596d4ef3d3"); + public static readonly MongoId HANDGUARD_AKS74U_ZENIT_B11 = new MongoId("57ffa9f4245977728561e844"); + public static readonly MongoId HANDGUARD_AR10_CMMG_MK3_RML15_15_INCH_MLOK = new MongoId("6065881d1246154cad35d637"); + public static readonly MongoId HANDGUARD_AR10_CMMG_MK3_RML9_9_INCH_MLOK = new MongoId("6065880c132d4d12c81fd8da"); + public static readonly MongoId HANDGUARD_AR10_KAC_URX_4_145_INCH = new MongoId("5df916dfbb49d91fb446d6b9"); + public static readonly MongoId HANDGUARD_AR10_LANCER_LCH7_125_INCH_MLOK = new MongoId("5f6336bbda967c74a42e9932"); + public static readonly MongoId HANDGUARD_AR10_NOVESKE_SWS_N6_105_INCH = new MongoId("5d00ede1d7ad1a0940739a76"); + public static readonly MongoId HANDGUARD_AR10_NOVESKE_SWS_N6_SPLIT = new MongoId("5d00ef6dd7ad1a0940739b16"); + public static readonly MongoId HANDGUARD_AR15_AB_ARMS_MOD1 = new MongoId("647de824196bf69818044c93"); + public static readonly MongoId HANDGUARD_AR15_AB_ARMS_MOD1_LOWER = new MongoId("647def638295ebcb5b02f05b"); + public static readonly MongoId HANDGUARD_AR15_ADAR_215_WOODEN = new MongoId("5c0e2f5cd174af02a012cfc9"); + public static readonly MongoId HANDGUARD_AR15_AEROKNOX_AX15_105_INCH_MLOK = new MongoId("619b5db699fb192e7430664f"); + public static readonly MongoId HANDGUARD_AR15_AEROKNOX_AX15_158_INCH_MLOK = new MongoId("640b20359ab20e15ee445fa9"); + public static readonly MongoId HANDGUARD_AR15_AEROKNOX_AX15_4_INCH_MLOK = new MongoId("63f4ba71f31d4a33b87bd046"); + public static readonly MongoId HANDGUARD_AR15_ALEXANDER_ARMS_MK10_RIFLE_LENGTH = new MongoId("5b2cfa535acfc432ff4db7a0"); + public static readonly MongoId HANDGUARD_AR15_COLT_M4_CARBINE_LENGTH = new MongoId("5ae30db85acfc408fb139a05"); + public static readonly MongoId HANDGUARD_AR15_COLT_M4_CARBINE_LENGTH_LOWER = new MongoId("637f57a68d137b27f70c4968"); + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_1225_HANDGUARD_COYOTE_BROWN = new MongoId( + "5c9a25172e2216000f20314e" ); - public static readonly MongoId HANDGUARD_AKS74U_ALFA_ARMS_GOLIAF_MLOK = new MongoId( - "647db1eca8d3399c380d195c" + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_1225_LOWER_HANDGUARD_COYOTE_BROWN = new MongoId( + "638f2003bbd47aeb9e0ff637" ); - public static readonly MongoId HANDGUARD_AKS74U_CAA_XRSU47SU_TACTICAL = new MongoId( - "5a957c3fa2750c00137fa5f7" + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_HANDGUARD_BLACK = new MongoId("588b56d02459771481110ae2"); + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_HANDGUARD_COYOTE_BROWN = new MongoId("55f84c3c4bdc2d5f408b4576"); + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_LOWER_HANDGUARD_BLACK = new MongoId("6396aaa9a52ace83df0840ab"); + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_LOWER_HANDGUARD_COYOTE_BROWN = new MongoId( + "638f1ff84822287cad04be9d" ); - public static readonly MongoId HANDGUARD_AKS74U_WOODEN = new MongoId( - "57dc32dc245977596d4ef3d3" + public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_FSP_95_HANDGUARD_COYOTE_BROWN = new MongoId( + "5c9a26332e2216001219ea70" ); - public static readonly MongoId HANDGUARD_AKS74U_ZENIT_B11 = new MongoId( - "57ffa9f4245977728561e844" - ); - public static readonly MongoId HANDGUARD_AR10_CMMG_MK3_RML15_15_INCH_MLOK = new MongoId( - "6065881d1246154cad35d637" - ); - public static readonly MongoId HANDGUARD_AR10_CMMG_MK3_RML9_9_INCH_MLOK = new MongoId( - "6065880c132d4d12c81fd8da" - ); - public static readonly MongoId HANDGUARD_AR10_KAC_URX_4_145_INCH = new MongoId( - "5df916dfbb49d91fb446d6b9" - ); - public static readonly MongoId HANDGUARD_AR10_LANCER_LCH7_125_INCH_MLOK = new MongoId( - "5f6336bbda967c74a42e9932" - ); - public static readonly MongoId HANDGUARD_AR10_NOVESKE_SWS_N6_105_INCH = new MongoId( - "5d00ede1d7ad1a0940739a76" - ); - public static readonly MongoId HANDGUARD_AR10_NOVESKE_SWS_N6_SPLIT = new MongoId( - "5d00ef6dd7ad1a0940739b16" - ); - public static readonly MongoId HANDGUARD_AR15_AB_ARMS_MOD1 = new MongoId( - "647de824196bf69818044c93" - ); - public static readonly MongoId HANDGUARD_AR15_AB_ARMS_MOD1_LOWER = new MongoId( - "647def638295ebcb5b02f05b" - ); - public static readonly MongoId HANDGUARD_AR15_ADAR_215_WOODEN = new MongoId( - "5c0e2f5cd174af02a012cfc9" - ); - public static readonly MongoId HANDGUARD_AR15_AEROKNOX_AX15_105_INCH_MLOK = new MongoId( - "619b5db699fb192e7430664f" - ); - public static readonly MongoId HANDGUARD_AR15_AEROKNOX_AX15_158_INCH_MLOK = new MongoId( - "640b20359ab20e15ee445fa9" - ); - public static readonly MongoId HANDGUARD_AR15_AEROKNOX_AX15_4_INCH_MLOK = new MongoId( - "63f4ba71f31d4a33b87bd046" - ); - public static readonly MongoId HANDGUARD_AR15_ALEXANDER_ARMS_MK10_RIFLE_LENGTH = new MongoId( - "5b2cfa535acfc432ff4db7a0" - ); - public static readonly MongoId HANDGUARD_AR15_COLT_M4_CARBINE_LENGTH = new MongoId( - "5ae30db85acfc408fb139a05" - ); - public static readonly MongoId HANDGUARD_AR15_COLT_M4_CARBINE_LENGTH_LOWER = new MongoId( - "637f57a68d137b27f70c4968" - ); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_1225_HANDGUARD_COYOTE_BROWN = - new MongoId("5c9a25172e2216000f20314e"); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_1225_LOWER_HANDGUARD_COYOTE_BROWN = - new MongoId("638f2003bbd47aeb9e0ff637"); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_HANDGUARD_BLACK = - new MongoId("588b56d02459771481110ae2"); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_HANDGUARD_COYOTE_BROWN = - new MongoId("55f84c3c4bdc2d5f408b4576"); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_LOWER_HANDGUARD_BLACK = - new MongoId("6396aaa9a52ace83df0840ab"); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_95_LOWER_HANDGUARD_COYOTE_BROWN = - new MongoId("638f1ff84822287cad04be9d"); - public static readonly MongoId HANDGUARD_AR15_DANIEL_DEFENSE_RIS_II_FSP_95_HANDGUARD_COYOTE_BROWN = - new MongoId("5c9a26332e2216001219ea70"); - public static readonly MongoId HANDGUARD_AR15_GEISSELE_SMR_MK16_135_INCH_MLOK_HANDGUARD_DDC = - new MongoId("5ea16ada09aa976f2e7a51be"); - public static readonly MongoId HANDGUARD_AR15_GEISSELE_SMR_MK16_95_INCH_MLOK_HANDGUARD_DDC = - new MongoId("5ea16acdfadf1d18c87b0784"); + public static readonly MongoId HANDGUARD_AR15_GEISSELE_SMR_MK16_135_INCH_MLOK_HANDGUARD_DDC = new MongoId("5ea16ada09aa976f2e7a51be"); + public static readonly MongoId HANDGUARD_AR15_GEISSELE_SMR_MK16_95_INCH_MLOK_HANDGUARD_DDC = new MongoId("5ea16acdfadf1d18c87b0784"); public static readonly MongoId HANDGUARD_AR15_KAC_RIS = new MongoId("55d459824bdc2d892f8b4573"); - public static readonly MongoId HANDGUARD_AR15_KAC_RIS_LOWER = new MongoId( - "637f57b78d137b27f70c496a" + public static readonly MongoId HANDGUARD_AR15_KAC_RIS_LOWER = new MongoId("637f57b78d137b27f70c496a"); + public static readonly MongoId HANDGUARD_AR15_KAC_URX_3_8_INCH = new MongoId("5d123102d7ad1a004e475fe5"); + public static readonly MongoId HANDGUARD_AR15_KAC_URX_3_8_INCH_LOWER = new MongoId("637f57d2f5ef8c33840d36c4"); + public static readonly MongoId HANDGUARD_AR15_KAC_URX_31_1075_INCH = new MongoId("5d122e7bd7ad1a07102d6d7f"); + public static readonly MongoId HANDGUARD_AR15_KAC_URX_31_1075_INCH_LOWER = new MongoId("637f57c532b66e7e320a6676"); + public static readonly MongoId HANDGUARD_AR15_LONE_STAR_ION_LITE = new MongoId("5d4405f0a4b9361e6a4e6bd9"); + public static readonly MongoId HANDGUARD_AR15_MAGPUL_MOE_SL_CARBINE_LENGTH_MLOK = new MongoId("5c78f2792e221600106f4683"); + public static readonly MongoId HANDGUARD_AR15_MAGPUL_MOE_SL_MEDIUM_LENGTH_MLOK = new MongoId("5c78f26f2e221601da3581d1"); + public static readonly MongoId HANDGUARD_AR15_PRECISION_REFLEX_GEN_III_DELTA_CARBON = new MongoId("63888bbd28e5cc32cc09d2b6"); + public static readonly MongoId HANDGUARD_AR15_SAI_10_INCH_QD_RAIL = new MongoId("5c78f2612e221600114c9f0d"); + public static readonly MongoId HANDGUARD_AR15_SAI_145_INCH_QD_RAIL = new MongoId("5c78f2492e221600114c9f04"); + public static readonly MongoId HANDGUARD_AR15_SOYUZTM_12_INCH_MLOK = new MongoId("6034e3e20ddce744014cb878"); + public static readonly MongoId HANDGUARD_AR15_SOYUZTM_15_INCH_MLOK = new MongoId("6034e3d953a60014f970617b"); + public static readonly MongoId HANDGUARD_AR15_SOYUZTM_9_INCH_MLOK = new MongoId("6034e3cb0ddce744014cb870"); + public static readonly MongoId HANDGUARD_AR15_STNGR_VYPR_10_INCH_MLOK = new MongoId("5c6d5d8b2e221644fc630b39"); + public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK = new MongoId("5d00e0cbd7ad1a6c6566a42d"); + public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK_HANDGUARD_FDE = new MongoId( + "5d00f63bd7ad1a59283b1c1e" ); - public static readonly MongoId HANDGUARD_AR15_KAC_URX_3_8_INCH = new MongoId( - "5d123102d7ad1a004e475fe5" + public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK_LOWER = new MongoId( + "637f589af5ef8c33840d36d3" ); - public static readonly MongoId HANDGUARD_AR15_KAC_URX_3_8_INCH_LOWER = new MongoId( - "637f57d2f5ef8c33840d36c4" - ); - public static readonly MongoId HANDGUARD_AR15_KAC_URX_31_1075_INCH = new MongoId( - "5d122e7bd7ad1a07102d6d7f" - ); - public static readonly MongoId HANDGUARD_AR15_KAC_URX_31_1075_INCH_LOWER = new MongoId( - "637f57c532b66e7e320a6676" - ); - public static readonly MongoId HANDGUARD_AR15_LONE_STAR_ION_LITE = new MongoId( - "5d4405f0a4b9361e6a4e6bd9" - ); - public static readonly MongoId HANDGUARD_AR15_MAGPUL_MOE_SL_CARBINE_LENGTH_MLOK = new MongoId( - "5c78f2792e221600106f4683" - ); - public static readonly MongoId HANDGUARD_AR15_MAGPUL_MOE_SL_MEDIUM_LENGTH_MLOK = new MongoId( - "5c78f26f2e221601da3581d1" - ); - public static readonly MongoId HANDGUARD_AR15_PRECISION_REFLEX_GEN_III_DELTA_CARBON = - new MongoId("63888bbd28e5cc32cc09d2b6"); - public static readonly MongoId HANDGUARD_AR15_SAI_10_INCH_QD_RAIL = new MongoId( - "5c78f2612e221600114c9f0d" - ); - public static readonly MongoId HANDGUARD_AR15_SAI_145_INCH_QD_RAIL = new MongoId( - "5c78f2492e221600114c9f04" - ); - public static readonly MongoId HANDGUARD_AR15_SOYUZTM_12_INCH_MLOK = new MongoId( - "6034e3e20ddce744014cb878" - ); - public static readonly MongoId HANDGUARD_AR15_SOYUZTM_15_INCH_MLOK = new MongoId( - "6034e3d953a60014f970617b" - ); - public static readonly MongoId HANDGUARD_AR15_SOYUZTM_9_INCH_MLOK = new MongoId( - "6034e3cb0ddce744014cb870" - ); - public static readonly MongoId HANDGUARD_AR15_STNGR_VYPR_10_INCH_MLOK = new MongoId( - "5c6d5d8b2e221644fc630b39" - ); - public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK = - new MongoId("5d00e0cbd7ad1a6c6566a42d"); - public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK_HANDGUARD_FDE = - new MongoId("5d00f63bd7ad1a59283b1c1e"); - public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK_LOWER = - new MongoId("637f589af5ef8c33840d36d3"); - public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK_LOWER_HANDGUARD_FDE = - new MongoId("63969c9019971040b005049b"); - public static readonly MongoId HANDGUARD_AR15_UNIQUEARS_WING_SKULL_12_INCH = new MongoId( - "6087e0336d0bd7580617bb7a" - ); - public static readonly MongoId HANDGUARD_AR15_WAR_SPORT_LVOAC_HANDGUARD_BLACK = new MongoId( - "595cfa8b86f77427437e845b" - ); - public static readonly MongoId HANDGUARD_AR15_WAR_SPORT_LVOAS_HANDGUARD_BLACK = new MongoId( - "595cf16b86f77427440c32e2" - ); - public static readonly MongoId HANDGUARD_ASH12_POLYMER = new MongoId( - "5cdaa99dd7f00c002412d0b2" - ); - public static readonly MongoId HANDGUARD_BENELLI_M3_FOREND = new MongoId( - "6259c4347d6aab70bc23a190" + public static readonly MongoId HANDGUARD_AR15_STRIKE_INDUSTRIES_VIPER_CARBINE_LENGTH_MLOK_LOWER_HANDGUARD_FDE = new MongoId( + "63969c9019971040b005049b" ); + public static readonly MongoId HANDGUARD_AR15_UNIQUEARS_WING_SKULL_12_INCH = new MongoId("6087e0336d0bd7580617bb7a"); + public static readonly MongoId HANDGUARD_AR15_WAR_SPORT_LVOAC_HANDGUARD_BLACK = new MongoId("595cfa8b86f77427437e845b"); + public static readonly MongoId HANDGUARD_AR15_WAR_SPORT_LVOAS_HANDGUARD_BLACK = new MongoId("595cf16b86f77427440c32e2"); + public static readonly MongoId HANDGUARD_ASH12_POLYMER = new MongoId("5cdaa99dd7f00c002412d0b2"); + public static readonly MongoId HANDGUARD_BENELLI_M3_FOREND = new MongoId("6259c4347d6aab70bc23a190"); public static readonly MongoId HANDGUARD_DVL10_M2 = new MongoId("5888976c24597754281f93f5"); public static readonly MongoId HANDGUARD_FAL_ORIGINAL = new MongoId("5b7bed205acfc400161d08cc"); - public static readonly MongoId HANDGUARD_HK_416_MIDWEST_INDUSTRIES_135_INCH_MLOK = new MongoId( - "5c6d11072e2216000e69d2e4" - ); - public static readonly MongoId HANDGUARD_HK_416_MIDWEST_INDUSTRIES_9_INCH_MLOK = new MongoId( - "5c6d10fa2e221600106f3f23" - ); - public static readonly MongoId HANDGUARD_HK_416_MRS_KEYMOD_14_INCH = new MongoId( - "5c6d10e82e221601da357b07" - ); - public static readonly MongoId HANDGUARD_HK_416_QUAD_RAIL = new MongoId( - "5bb20de5d4351e0035629e59" - ); - public static readonly MongoId HANDGUARD_HK_416_QUAD_RAIL_EXTENDED = new MongoId( - "5bb20dfcd4351e00334c9e24" - ); - public static readonly MongoId HANDGUARD_HK_416_QUAD_RAIL_HANDGUARD_WITH_FLIPUP_FRONT_SIGHT = - new MongoId("5bb20df1d4351e00347787d5"); - public static readonly MongoId HANDGUARD_HK_416_STRIKE_INDUSTRIES_CRUX_15_INCH_MLOK = - new MongoId("5c6d11152e2216000f2003e7"); - public static readonly MongoId HANDGUARD_HK_416_TROY_MLOK_13_INCH = new MongoId( - "5c6c2c9c2e2216000f2002e4" - ); + public static readonly MongoId HANDGUARD_HK_416_MIDWEST_INDUSTRIES_135_INCH_MLOK = new MongoId("5c6d11072e2216000e69d2e4"); + public static readonly MongoId HANDGUARD_HK_416_MIDWEST_INDUSTRIES_9_INCH_MLOK = new MongoId("5c6d10fa2e221600106f3f23"); + public static readonly MongoId HANDGUARD_HK_416_MRS_KEYMOD_14_INCH = new MongoId("5c6d10e82e221601da357b07"); + public static readonly MongoId HANDGUARD_HK_416_QUAD_RAIL = new MongoId("5bb20de5d4351e0035629e59"); + public static readonly MongoId HANDGUARD_HK_416_QUAD_RAIL_EXTENDED = new MongoId("5bb20dfcd4351e00334c9e24"); + public static readonly MongoId HANDGUARD_HK_416_QUAD_RAIL_HANDGUARD_WITH_FLIPUP_FRONT_SIGHT = new MongoId("5bb20df1d4351e00347787d5"); + public static readonly MongoId HANDGUARD_HK_416_STRIKE_INDUSTRIES_CRUX_15_INCH_MLOK = new MongoId("5c6d11152e2216000f2003e7"); + public static readonly MongoId HANDGUARD_HK_416_TROY_MLOK_13_INCH = new MongoId("5c6c2c9c2e2216000f2002e4"); public static readonly MongoId HANDGUARD_HK_G36_2VENT = new MongoId("62386b2adf47d66e835094b2"); public static readonly MongoId HANDGUARD_HK_G36_4VENT = new MongoId("62386b7153757417e93a4e9f"); public static readonly MongoId HANDGUARD_HK_G36_6VENT = new MongoId("6231654c71b5bc3baa1078e5"); - public static readonly MongoId HANDGUARD_HK_G36_KAC_QUAD_RAIL = new MongoId( - "67069d66af4890b09f0006ec" - ); - public static readonly MongoId HANDGUARD_HK_G36_SLIM_LINE_HKEY = new MongoId( - "67069d8dad91f3a63c0bc2b4" - ); - public static readonly MongoId HANDGUARD_HK_MP5_BT_TL99_ALUMINUM = new MongoId( - "5a9548c9159bd400133e97b3" - ); - public static readonly MongoId HANDGUARD_HK_MP5_CAA_HX5 = new MongoId( - "5d010d1cd7ad1a59283b1ce7" - ); - public static readonly MongoId HANDGUARD_HK_MP5_PTR_TRIRAIL = new MongoId( - "5d19cd96d7ad1a4a992c9f52" - ); - public static readonly MongoId HANDGUARD_HK_MP5_WIDE_TROPICAL_POLYMER = new MongoId( - "5926c36d86f77467a92a8629" - ); - public static readonly MongoId HANDGUARD_HK_MP5K_POLYMER = new MongoId( - "5d2f259b48f0355a844acd74" - ); - public static readonly MongoId HANDGUARD_HK_MP5SD_POLYMER = new MongoId( - "5926f34786f77469195bfe92" - ); - public static readonly MongoId HANDGUARD_HK417_EXTENDED_FREE_FLOAT_HANDGUARD_WITH_FLIPUP_FRONT_SIGHT = - new MongoId("61703001d92c473c77021497"); - public static readonly MongoId HANDGUARD_HK417_PATROL_HANDGUARD_WITH_FLIPUP_FRONT_SIGHT = - new MongoId("61712eae6c780c1e710c9a1d"); - public static readonly MongoId HANDGUARD_KS23M_FORESTOCK = new MongoId( - "5e848d51e4dbc5266a4ec63b" + public static readonly MongoId HANDGUARD_HK_G36_KAC_QUAD_RAIL = new MongoId("67069d66af4890b09f0006ec"); + public static readonly MongoId HANDGUARD_HK_G36_SLIM_LINE_HKEY = new MongoId("67069d8dad91f3a63c0bc2b4"); + public static readonly MongoId HANDGUARD_HK_MP5_BT_TL99_ALUMINUM = new MongoId("5a9548c9159bd400133e97b3"); + public static readonly MongoId HANDGUARD_HK_MP5_CAA_HX5 = new MongoId("5d010d1cd7ad1a59283b1ce7"); + public static readonly MongoId HANDGUARD_HK_MP5_PTR_TRIRAIL = new MongoId("5d19cd96d7ad1a4a992c9f52"); + public static readonly MongoId HANDGUARD_HK_MP5_WIDE_TROPICAL_POLYMER = new MongoId("5926c36d86f77467a92a8629"); + public static readonly MongoId HANDGUARD_HK_MP5K_POLYMER = new MongoId("5d2f259b48f0355a844acd74"); + public static readonly MongoId HANDGUARD_HK_MP5SD_POLYMER = new MongoId("5926f34786f77469195bfe92"); + public static readonly MongoId HANDGUARD_HK417_EXTENDED_FREE_FLOAT_HANDGUARD_WITH_FLIPUP_FRONT_SIGHT = new MongoId( + "61703001d92c473c77021497" ); + public static readonly MongoId HANDGUARD_HK417_PATROL_HANDGUARD_WITH_FLIPUP_FRONT_SIGHT = new MongoId("61712eae6c780c1e710c9a1d"); + public static readonly MongoId HANDGUARD_KS23M_FORESTOCK = new MongoId("5e848d51e4dbc5266a4ec63b"); public static readonly MongoId HANDGUARD_M60E4_MOD_1 = new MongoId("66012d64c752a02bbe05e69b"); - public static readonly MongoId HANDGUARD_M60E4_MOD_1_HANDGUARD_FDE = new MongoId( - "661fbe066751ee51930b01f2" - ); + public static readonly MongoId HANDGUARD_M60E4_MOD_1_HANDGUARD_FDE = new MongoId("661fbe066751ee51930b01f2"); public static readonly MongoId HANDGUARD_M60E6 = new MongoId("66012d003dff5074ed002e2c"); - public static readonly MongoId HANDGUARD_M700_AB_ARMS_MODX_GEN_3_KEYMOD = new MongoId( - "5cde7afdd7f00c000d36b89d" - ); - public static readonly MongoId HANDGUARD_M870_FAB_DEFENSE_PR870_FORESTOCK = new MongoId( - "5a788031c585673f2b5c1c79" - ); - public static readonly MongoId HANDGUARD_M870_MAGPUL_MOE = new MongoId( - "5a788068c5856700137e4c8f" - ); - public static readonly MongoId HANDGUARD_M870_SPEEDFEED_SHORT = new MongoId( - "5a788089c5856700142fdd9c" - ); - public static readonly MongoId HANDGUARD_MCX_GEN1_KEYMOD_12_INCH = new MongoId( - "5fbc227aa56d053a3543f79e" - ); - public static readonly MongoId HANDGUARD_MCX_GEN1_KEYMOD_8_INCH = new MongoId( - "5fbc226eca32ed67276c155d" - ); - public static readonly MongoId HANDGUARD_MCXSPEAR_11_INCH_MLOK = new MongoId( - "652910ef50dc782999054b97" - ); - public static readonly MongoId HANDGUARD_MDR_HANDGUARD_BLACK = new MongoId( - "5dcbd6b46ec07c0c4347a564" - ); - public static readonly MongoId HANDGUARD_MDR_HANDGUARD_FDE = new MongoId( - "5c48a14f2e2216152006edd7" - ); + public static readonly MongoId HANDGUARD_M700_AB_ARMS_MODX_GEN_3_KEYMOD = new MongoId("5cde7afdd7f00c000d36b89d"); + public static readonly MongoId HANDGUARD_M870_FAB_DEFENSE_PR870_FORESTOCK = new MongoId("5a788031c585673f2b5c1c79"); + public static readonly MongoId HANDGUARD_M870_MAGPUL_MOE = new MongoId("5a788068c5856700137e4c8f"); + public static readonly MongoId HANDGUARD_M870_SPEEDFEED_SHORT = new MongoId("5a788089c5856700142fdd9c"); + public static readonly MongoId HANDGUARD_MCX_GEN1_KEYMOD_12_INCH = new MongoId("5fbc227aa56d053a3543f79e"); + public static readonly MongoId HANDGUARD_MCX_GEN1_KEYMOD_8_INCH = new MongoId("5fbc226eca32ed67276c155d"); + public static readonly MongoId HANDGUARD_MCXSPEAR_11_INCH_MLOK = new MongoId("652910ef50dc782999054b97"); + public static readonly MongoId HANDGUARD_MDR_HANDGUARD_BLACK = new MongoId("5dcbd6b46ec07c0c4347a564"); + public static readonly MongoId HANDGUARD_MDR_HANDGUARD_FDE = new MongoId("5c48a14f2e2216152006edd7"); public static readonly MongoId HANDGUARD_MK18_18_INCH = new MongoId("5fc235db2770a0045c59c683"); - public static readonly MongoId HANDGUARD_MOSSBERG_590A1_MAGPUL_MOE_FORESTOCK = new MongoId( - "5eea21647547d6330471b3c9" - ); - public static readonly MongoId HANDGUARD_MOSSBERG_590A1_SPEEDFEED_SHORT = new MongoId( - "5e87076ce2db31558c75a11d" - ); - public static readonly MongoId HANDGUARD_MP133_BEECHWOOD_FORESTOCK = new MongoId( - "55d45d3f4bdc2d972f8b456c" - ); - public static readonly MongoId HANDGUARD_MP133_CUSTOM_PLASTIC_FORESTOCK_WITH_RAILS = - new MongoId("55d45f484bdc2d972f8b456d"); - public static readonly MongoId HANDGUARD_MP153_POLYMER_FORESTOCK = new MongoId( - "56deed6ed2720b4c698b4583" - ); - public static readonly MongoId HANDGUARD_MP155_ULTIMA_POLYMER_FORESTOCK = new MongoId( - "606ee5c81246154cad35d65e" - ); - public static readonly MongoId HANDGUARD_MP155_WALNUT_FORESTOCK = new MongoId( - "607d5aa50494a626335e12ed" - ); + public static readonly MongoId HANDGUARD_MOSSBERG_590A1_MAGPUL_MOE_FORESTOCK = new MongoId("5eea21647547d6330471b3c9"); + public static readonly MongoId HANDGUARD_MOSSBERG_590A1_SPEEDFEED_SHORT = new MongoId("5e87076ce2db31558c75a11d"); + public static readonly MongoId HANDGUARD_MP133_BEECHWOOD_FORESTOCK = new MongoId("55d45d3f4bdc2d972f8b456c"); + public static readonly MongoId HANDGUARD_MP133_CUSTOM_PLASTIC_FORESTOCK_WITH_RAILS = new MongoId("55d45f484bdc2d972f8b456d"); + public static readonly MongoId HANDGUARD_MP153_POLYMER_FORESTOCK = new MongoId("56deed6ed2720b4c698b4583"); + public static readonly MongoId HANDGUARD_MP155_ULTIMA_POLYMER_FORESTOCK = new MongoId("606ee5c81246154cad35d65e"); + public static readonly MongoId HANDGUARD_MP155_WALNUT_FORESTOCK = new MongoId("607d5aa50494a626335e12ed"); public static readonly MongoId HANDGUARD_MP18_POLYMER = new MongoId("61f8024263dc1250e26eb029"); public static readonly MongoId HANDGUARD_MP18_WOODEN = new MongoId("61f7b85367ddd414173fdb36"); - public static readonly MongoId HANDGUARD_MPX_GEN1_4_INCH = new MongoId( - "676149fbe2cf1419500357ee" - ); - public static readonly MongoId HANDGUARD_MPX_GEN1_6_INCH = new MongoId( - "5894a42086f77426d2590762" - ); - public static readonly MongoId HANDGUARD_MPX_GEN1_8_INCH = new MongoId( - "67614a0be889e1972605d6c0" - ); - public static readonly MongoId HANDGUARD_MPX_GEN2_4_INCH_MLOK = new MongoId( - "67614a225152c0eaed08ec86" - ); - public static readonly MongoId HANDGUARD_MPX_GEN2_6_INCH_MLOK = new MongoId( - "67614a3ce2cf1419500357f4" - ); - public static readonly MongoId HANDGUARD_MPX_GEN2_8_INCH_MLOK = new MongoId( - "67614a31062e6212f5058c38" - ); - public static readonly MongoId HANDGUARD_MPX_LANCER_OEM_14_INCH_MLOK = new MongoId( - "5c59529a2e221602b177d160" - ); - public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_105_INCH_MLOK = new MongoId( - "5c5db6302e2216000e5e47f0" - ); - public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_14_INCH_MLOK = new MongoId( - "5c5db63a2e2216000f1b284a" - ); - public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_45_INCH_MLOK = new MongoId( - "5c5db5f22e2216000e5e47e8" - ); - public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_65_INCH_MLOK = new MongoId( - "5c5db5fc2e2216000f1b2842" - ); - public static readonly MongoId HANDGUARD_MTS25512_BEECHWOOD_FORESTOCK = new MongoId( - "6123649463849f3d843da7c4" - ); - public static readonly MongoId HANDGUARD_OPSKS_GAS_TUBE_COVER = new MongoId( - "634f03d40384a3ba4f06f874" - ); + public static readonly MongoId HANDGUARD_MPX_GEN1_4_INCH = new MongoId("676149fbe2cf1419500357ee"); + public static readonly MongoId HANDGUARD_MPX_GEN1_6_INCH = new MongoId("5894a42086f77426d2590762"); + public static readonly MongoId HANDGUARD_MPX_GEN1_8_INCH = new MongoId("67614a0be889e1972605d6c0"); + public static readonly MongoId HANDGUARD_MPX_GEN2_4_INCH_MLOK = new MongoId("67614a225152c0eaed08ec86"); + public static readonly MongoId HANDGUARD_MPX_GEN2_6_INCH_MLOK = new MongoId("67614a3ce2cf1419500357f4"); + public static readonly MongoId HANDGUARD_MPX_GEN2_8_INCH_MLOK = new MongoId("67614a31062e6212f5058c38"); + public static readonly MongoId HANDGUARD_MPX_LANCER_OEM_14_INCH_MLOK = new MongoId("5c59529a2e221602b177d160"); + public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_105_INCH_MLOK = new MongoId("5c5db6302e2216000e5e47f0"); + public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_14_INCH_MLOK = new MongoId("5c5db63a2e2216000f1b284a"); + public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_45_INCH_MLOK = new MongoId("5c5db5f22e2216000e5e47e8"); + public static readonly MongoId HANDGUARD_MPX_MIDWEST_INDUSTRIES_65_INCH_MLOK = new MongoId("5c5db5fc2e2216000f1b2842"); + public static readonly MongoId HANDGUARD_MTS25512_BEECHWOOD_FORESTOCK = new MongoId("6123649463849f3d843da7c4"); + public static readonly MongoId HANDGUARD_OPSKS_GAS_TUBE_COVER = new MongoId("634f03d40384a3ba4f06f874"); public static readonly MongoId HANDGUARD_ORSIS_T5000M = new MongoId("5df25d3bfd6b4e6e2276dc9a"); public static readonly MongoId HANDGUARD_PK_ZENIT_B50 = new MongoId("6491c6f6ef312a876705191b"); public static readonly MongoId HANDGUARD_R11_RSASS = new MongoId("5a329052c4a28200741e22d3"); public static readonly MongoId HANDGUARD_RFB = new MongoId("5f2aa47a200e2c0ee46efa71"); public static readonly MongoId HANDGUARD_RPD_WOODEN = new MongoId("6513f05a94c72326990a3866"); public static readonly MongoId HANDGUARD_RPK16 = new MongoId("5beec3e30db8340019619424"); - public static readonly MongoId HANDGUARD_SA58_QUAD_RAIL = new MongoId( - "5b099a9d5acfc47a8607efe7" - ); - public static readonly MongoId HANDGUARD_SA58_QUAD_RAIL_FULL_LENGTH = new MongoId( - "5b7be1ca5acfc400170e2d2f" - ); - public static readonly MongoId HANDGUARD_SA58FAL_AIM_SPORTS_UNIVERSAL_KEYMOD = new MongoId( - "5b7be2345acfc400196d524a" - ); - public static readonly MongoId HANDGUARD_SA58FAL_AIM_SPORTS_UNIVERSAL_MLOK = new MongoId( - "5b7bebc85acfc43bca706666" - ); - public static readonly MongoId HANDGUARD_SA58FAL_BELGIAN_STYLE = new MongoId( - "5b7d671b5acfc43d82528ddd" - ); - public static readonly MongoId HANDGUARD_SA58FAL_VLTOR_CASVFAL = new MongoId( - "5b7bedd75acfc43d825283f9" - ); - public static readonly MongoId HANDGUARD_SA58FAL_VLTOR_CASVFAS = new MongoId( - "5b7bee755acfc400196d5383" - ); - public static readonly MongoId HANDGUARD_SAIGA9_HARTMAN_GYURZA = new MongoId( - "651bfe4d1065f87f082e7209" - ); - public static readonly MongoId HANDGUARD_SAKO_TRG_M10_11_INCH_HANDGUARD_ASSEMBLY = new MongoId( - "67405ef125beb509e8070276" - ); - public static readonly MongoId HANDGUARD_SAKO_TRG_M10_15_INCH_HANDGUARD_ASSEMBLY = new MongoId( - "673cb5d1280680de5e02ff3b" - ); - public static readonly MongoId HANDGUARD_SAKO_TRG_M10_MLOK_15_INCH_HANDGUARD_ASSEMBLY = - new MongoId("67405fd0812f476fb2020066"); - public static readonly MongoId HANDGUARD_SKS_ATI_MONTE_CARLO_GAS_TUBE_COVER = new MongoId( - "653ecc425a1690d9d90491e4" - ); - public static readonly MongoId HANDGUARD_SKS_FAB_DEFENSE_UAS_GAS_TUBE_COVER = new MongoId( - "653ece125a1690d9d90491e8" - ); - public static readonly MongoId HANDGUARD_SKS_GAS_TUBE_COVER = new MongoId( - "634f08a21f9f536910079b5a" - ); - public static readonly MongoId HANDGUARD_SKS_TAPCO_RAILED_GAS_TUBE_COVER = new MongoId( - "653ecd065a1690d9d90491e6" - ); - public static readonly MongoId HANDGUARD_SOK12_BRAVO18_ALUMINIUM = new MongoId( - "5f63418ef5750b524b45f116" - ); - public static readonly MongoId HANDGUARD_SOK12_CHAOS_TITAN_QUAD_RAIL = new MongoId( - "674fe57721a9aa6be6045b96" - ); - public static readonly MongoId HANDGUARD_SOK12_CUSTOM_GUNS_TYPE340 = new MongoId( - "6086b5731246154cad35d6c7" - ); - public static readonly MongoId HANDGUARD_SOK12_LEAPERS_UTG_PRO_MTU002_LONG_TOP_ALUMINUM = - new MongoId("5827272a24597748c74bdeea"); - public static readonly MongoId HANDGUARD_SOK12_LEAPERS_UTG_PRO_MTU002_SHORT_TOP_ALUMINUM = - new MongoId("58272b392459774b4c7b3ccd"); - public static readonly MongoId HANDGUARD_SOK12_POLYMER = new MongoId( - "576169e62459773c69055191" - ); - public static readonly MongoId HANDGUARD_SR2M_POLYMER_HANDGUARD_BLACK = new MongoId( - "637ba19df7ca6372bf2613d7" - ); - public static readonly MongoId HANDGUARD_SR2M_POLYMER_HANDGUARD_PLUM = new MongoId( - "62e15547db1a5c41971c1b5e" - ); - public static readonly MongoId HANDGUARD_SR3M_POLYMER_HANDGUARD_BLACK = new MongoId( - "65144f546ddb773afa0e35e1" - ); - public static readonly MongoId HANDGUARD_SR3M_POLYMER_HANDGUARD_PLUM = new MongoId( - "6565c3ab977bcc2dbb01c2e7" - ); - public static readonly MongoId HANDGUARD_SR3M_RAILED_POLYMER_HANDGUARD_BLACK = new MongoId( - "6568a6bf2c5fb7afc70bc424" - ); - public static readonly MongoId HANDGUARD_SV98_CNC_GUNS_OVSV98_KEYMOD = new MongoId( - "623c3c1f37b4b31470357737" - ); - public static readonly MongoId HANDGUARD_SVD_CAA_XRSDRG = new MongoId( - "5e5699df2161e06ac158df6f" - ); - public static readonly MongoId HANDGUARD_SVD_MODERNIZATION_KIT = new MongoId( - "5e56991336989c75ab4f03f6" - ); - public static readonly MongoId HANDGUARD_SVD_SAG_MK1_CHASSIS = new MongoId( - "5dfcd0e547101c39625f66f9" - ); + public static readonly MongoId HANDGUARD_SA58_QUAD_RAIL = new MongoId("5b099a9d5acfc47a8607efe7"); + public static readonly MongoId HANDGUARD_SA58_QUAD_RAIL_FULL_LENGTH = new MongoId("5b7be1ca5acfc400170e2d2f"); + public static readonly MongoId HANDGUARD_SA58FAL_AIM_SPORTS_UNIVERSAL_KEYMOD = new MongoId("5b7be2345acfc400196d524a"); + public static readonly MongoId HANDGUARD_SA58FAL_AIM_SPORTS_UNIVERSAL_MLOK = new MongoId("5b7bebc85acfc43bca706666"); + public static readonly MongoId HANDGUARD_SA58FAL_BELGIAN_STYLE = new MongoId("5b7d671b5acfc43d82528ddd"); + public static readonly MongoId HANDGUARD_SA58FAL_VLTOR_CASVFAL = new MongoId("5b7bedd75acfc43d825283f9"); + public static readonly MongoId HANDGUARD_SA58FAL_VLTOR_CASVFAS = new MongoId("5b7bee755acfc400196d5383"); + public static readonly MongoId HANDGUARD_SAIGA9_HARTMAN_GYURZA = new MongoId("651bfe4d1065f87f082e7209"); + public static readonly MongoId HANDGUARD_SAKO_TRG_M10_11_INCH_HANDGUARD_ASSEMBLY = new MongoId("67405ef125beb509e8070276"); + public static readonly MongoId HANDGUARD_SAKO_TRG_M10_15_INCH_HANDGUARD_ASSEMBLY = new MongoId("673cb5d1280680de5e02ff3b"); + public static readonly MongoId HANDGUARD_SAKO_TRG_M10_MLOK_15_INCH_HANDGUARD_ASSEMBLY = new MongoId("67405fd0812f476fb2020066"); + public static readonly MongoId HANDGUARD_SKS_ATI_MONTE_CARLO_GAS_TUBE_COVER = new MongoId("653ecc425a1690d9d90491e4"); + public static readonly MongoId HANDGUARD_SKS_FAB_DEFENSE_UAS_GAS_TUBE_COVER = new MongoId("653ece125a1690d9d90491e8"); + public static readonly MongoId HANDGUARD_SKS_GAS_TUBE_COVER = new MongoId("634f08a21f9f536910079b5a"); + public static readonly MongoId HANDGUARD_SKS_TAPCO_RAILED_GAS_TUBE_COVER = new MongoId("653ecd065a1690d9d90491e6"); + public static readonly MongoId HANDGUARD_SOK12_BRAVO18_ALUMINIUM = new MongoId("5f63418ef5750b524b45f116"); + public static readonly MongoId HANDGUARD_SOK12_CHAOS_TITAN_QUAD_RAIL = new MongoId("674fe57721a9aa6be6045b96"); + public static readonly MongoId HANDGUARD_SOK12_CUSTOM_GUNS_TYPE340 = new MongoId("6086b5731246154cad35d6c7"); + public static readonly MongoId HANDGUARD_SOK12_LEAPERS_UTG_PRO_MTU002_LONG_TOP_ALUMINUM = new MongoId("5827272a24597748c74bdeea"); + public static readonly MongoId HANDGUARD_SOK12_LEAPERS_UTG_PRO_MTU002_SHORT_TOP_ALUMINUM = new MongoId("58272b392459774b4c7b3ccd"); + public static readonly MongoId HANDGUARD_SOK12_POLYMER = new MongoId("576169e62459773c69055191"); + public static readonly MongoId HANDGUARD_SR2M_POLYMER_HANDGUARD_BLACK = new MongoId("637ba19df7ca6372bf2613d7"); + public static readonly MongoId HANDGUARD_SR2M_POLYMER_HANDGUARD_PLUM = new MongoId("62e15547db1a5c41971c1b5e"); + public static readonly MongoId HANDGUARD_SR3M_POLYMER_HANDGUARD_BLACK = new MongoId("65144f546ddb773afa0e35e1"); + public static readonly MongoId HANDGUARD_SR3M_POLYMER_HANDGUARD_PLUM = new MongoId("6565c3ab977bcc2dbb01c2e7"); + public static readonly MongoId HANDGUARD_SR3M_RAILED_POLYMER_HANDGUARD_BLACK = new MongoId("6568a6bf2c5fb7afc70bc424"); + public static readonly MongoId HANDGUARD_SV98_CNC_GUNS_OVSV98_KEYMOD = new MongoId("623c3c1f37b4b31470357737"); + public static readonly MongoId HANDGUARD_SVD_CAA_XRSDRG = new MongoId("5e5699df2161e06ac158df6f"); + public static readonly MongoId HANDGUARD_SVD_MODERNIZATION_KIT = new MongoId("5e56991336989c75ab4f03f6"); + public static readonly MongoId HANDGUARD_SVD_SAG_MK1_CHASSIS = new MongoId("5dfcd0e547101c39625f66f9"); public static readonly MongoId HANDGUARD_SVDS_POLYMER = new MongoId("5c471c6c2e221602b66cd9ae"); - public static readonly MongoId HANDGUARD_UZI_HANDGUARD_WITH_FOREGRIP = new MongoId( - "66993149558c59581e03c028" - ); + public static readonly MongoId HANDGUARD_UZI_HANDGUARD_WITH_FOREGRIP = new MongoId("66993149558c59581e03c028"); public static readonly MongoId HANDGUARD_UZI_KGRIP = new MongoId("6699313af74fef4dfd0b04f6"); public static readonly MongoId HANDGUARD_UZI_POLYMER = new MongoId("6698c8c736ba38d29101770b"); - public static readonly MongoId HANDGUARD_UZI_PRO_A3_TACTICAL_MLOK = new MongoId( - "668031bde3e7eb26e8004cd7" - ); - public static readonly MongoId HANDGUARD_VELOCIRAPTOR_POLYMER = new MongoId( - "674d5e287075e056160e0176" - ); - public static readonly MongoId HANDGUARD_VPO136_VEPRKM_WOODEN = new MongoId( - "59e6284f86f77440d569536f" - ); - public static readonly MongoId HANDGUARD_VPO209_WOODEN = new MongoId( - "59e898ee86f77427614bd225" - ); + public static readonly MongoId HANDGUARD_UZI_PRO_A3_TACTICAL_MLOK = new MongoId("668031bde3e7eb26e8004cd7"); + public static readonly MongoId HANDGUARD_VELOCIRAPTOR_POLYMER = new MongoId("674d5e287075e056160e0176"); + public static readonly MongoId HANDGUARD_VPO136_VEPRKM_WOODEN = new MongoId("59e6284f86f77440d569536f"); + public static readonly MongoId HANDGUARD_VPO209_WOODEN = new MongoId("59e898ee86f77427614bd225"); public static readonly MongoId HANDGUARD_VSK94 = new MongoId("6448f2f6d4928d46d30be3f6"); - public static readonly MongoId HANDGUARD_VSSVAL_POLYMER_HANDGUARD_BLACK = new MongoId( - "6565bb7eb4b12a56eb04b084" - ); - public static readonly MongoId HANDGUARD_VSSVAL_POLYMER_HANDGUARD_PLUM = new MongoId( - "651178336cad06c37c049eb4" - ); - public static readonly MongoId HANDGUARD_WASR1063_CAF_WOODEN_FOREGRIP = new MongoId( - "5d2c829448f0353a5c7d6674" - ); - public static readonly MongoId HEADPHONES_GSSH01_ACTIVE_HEADSET = new MongoId( - "5b432b965acfc47a8774094e" - ); - public static readonly MongoId HEADPHONES_MSA_SORDIN_SUPREME_PROXL_HEADSET = new MongoId( - "5aa2ba71e5b5b000137b758f" - ); - public static readonly MongoId HEADPHONES_OPSCORE_FAST_RAC_HEADSET = new MongoId( - "5a16b9fffcdbcb0176308b34" - ); - public static readonly MongoId HEADPHONES_OPSMEN_EARMOR_M32_HEADSET = new MongoId( - "6033fa48ffd42c541047f728" - ); - public static readonly MongoId HEADPHONES_PELTOR_COMTAC_II_HEADSET_OD_GREEN = new MongoId( - "5645bcc04bdc2d363b8b4572" - ); - public static readonly MongoId HEADPHONES_PELTOR_COMTAC_IV_HYBRID_HEADSET_COYOTE_BROWN = - new MongoId("628e4e576d783146b124c64d"); - public static readonly MongoId HEADPHONES_PELTOR_COMTAC_V_HEADSET_OD_GREEN = new MongoId( - "66b5f693acff495a294927e3" - ); - public static readonly MongoId HEADPHONES_PELTOR_COMTAC_VI_HEADSET_COYOTE_BROWN = new MongoId( - "66b5f6985891c84aab75ca76" - ); - public static readonly MongoId HEADPHONES_PELTOR_TACTICAL_SPORT_HEADSET = new MongoId( - "5c165d832e2216398b5a7e36" - ); - public static readonly MongoId HEADPHONES_SAFARILAND_LIBERATOR_HP_20_HEARING_PROTECTION_HEADSET_FDE = - new MongoId("66b5f68de98be930d701c00e"); - public static readonly MongoId HEADPHONES_TW_EXFIL_PELTOR_COMTAC_V_HEADSET_OD_GREEN = - new MongoId("66b5f69ea7f72d197e70bcdb"); - public static readonly MongoId HEADPHONES_TW_EXFIL_PELTOR_COMTAC_VI_HEADSET_COYOTE_BROWN = - new MongoId("66b5f6a28ca68c6461709ed8"); - public static readonly MongoId HEADPHONES_WALKERS_RAZOR_DIGITAL_HEADSET = new MongoId( - "5e4d34ca86f774264f758330" - ); - public static readonly MongoId HEADPHONES_WALKERS_XCEL_500BT_DIGITAL_HEADSET = new MongoId( - "5f60cd6cf2bcbb675b00dac6" - ); - public static readonly MongoId HEADWEAR_6B47_RATNIKBSH_HELMET_EMR_ARCTIC_COVER = new MongoId( - "6745895717824b1ec20570a6" - ); - public static readonly MongoId HEADWEAR_6B47_RATNIKBSH_HELMET_EMR_COVER = new MongoId( - "5aa7cfc0e5b5b00015693143" - ); - public static readonly MongoId HEADWEAR_6B47_RATNIKBSH_HELMET_OLIVE_DRAB = new MongoId( - "5a7c4850e899ef00150be885" - ); - public static readonly MongoId HEADWEAR_ALTYN_BULLETPROOF_HELMET_OLIVE_DRAB = new MongoId( - "5aa7e276e5b5b000171d0647" - ); - public static readonly MongoId HEADWEAR_ARMASIGHT_NVG_HEAD_STRAP = new MongoId( - "5c066ef40db834001966a595" + public static readonly MongoId HANDGUARD_VSSVAL_POLYMER_HANDGUARD_BLACK = new MongoId("6565bb7eb4b12a56eb04b084"); + public static readonly MongoId HANDGUARD_VSSVAL_POLYMER_HANDGUARD_PLUM = new MongoId("651178336cad06c37c049eb4"); + public static readonly MongoId HANDGUARD_WASR1063_CAF_WOODEN_FOREGRIP = new MongoId("5d2c829448f0353a5c7d6674"); + public static readonly MongoId HEADPHONES_GSSH01_ACTIVE_HEADSET = new MongoId("5b432b965acfc47a8774094e"); + public static readonly MongoId HEADPHONES_MSA_SORDIN_SUPREME_PROXL_HEADSET = new MongoId("5aa2ba71e5b5b000137b758f"); + public static readonly MongoId HEADPHONES_OPSCORE_FAST_RAC_HEADSET = new MongoId("5a16b9fffcdbcb0176308b34"); + public static readonly MongoId HEADPHONES_OPSMEN_EARMOR_M32_HEADSET = new MongoId("6033fa48ffd42c541047f728"); + public static readonly MongoId HEADPHONES_PELTOR_COMTAC_II_HEADSET_OD_GREEN = new MongoId("5645bcc04bdc2d363b8b4572"); + public static readonly MongoId HEADPHONES_PELTOR_COMTAC_IV_HYBRID_HEADSET_COYOTE_BROWN = new MongoId("628e4e576d783146b124c64d"); + public static readonly MongoId HEADPHONES_PELTOR_COMTAC_V_HEADSET_OD_GREEN = new MongoId("66b5f693acff495a294927e3"); + public static readonly MongoId HEADPHONES_PELTOR_COMTAC_VI_HEADSET_COYOTE_BROWN = new MongoId("66b5f6985891c84aab75ca76"); + public static readonly MongoId HEADPHONES_PELTOR_TACTICAL_SPORT_HEADSET = new MongoId("5c165d832e2216398b5a7e36"); + public static readonly MongoId HEADPHONES_SAFARILAND_LIBERATOR_HP_20_HEARING_PROTECTION_HEADSET_FDE = new MongoId( + "66b5f68de98be930d701c00e" ); + public static readonly MongoId HEADPHONES_TW_EXFIL_PELTOR_COMTAC_V_HEADSET_OD_GREEN = new MongoId("66b5f69ea7f72d197e70bcdb"); + public static readonly MongoId HEADPHONES_TW_EXFIL_PELTOR_COMTAC_VI_HEADSET_COYOTE_BROWN = new MongoId("66b5f6a28ca68c6461709ed8"); + public static readonly MongoId HEADPHONES_WALKERS_RAZOR_DIGITAL_HEADSET = new MongoId("5e4d34ca86f774264f758330"); + public static readonly MongoId HEADPHONES_WALKERS_XCEL_500BT_DIGITAL_HEADSET = new MongoId("5f60cd6cf2bcbb675b00dac6"); + public static readonly MongoId HEADWEAR_6B47_RATNIKBSH_HELMET_EMR_ARCTIC_COVER = new MongoId("6745895717824b1ec20570a6"); + public static readonly MongoId HEADWEAR_6B47_RATNIKBSH_HELMET_EMR_COVER = new MongoId("5aa7cfc0e5b5b00015693143"); + public static readonly MongoId HEADWEAR_6B47_RATNIKBSH_HELMET_OLIVE_DRAB = new MongoId("5a7c4850e899ef00150be885"); + public static readonly MongoId HEADWEAR_ALTYN_BULLETPROOF_HELMET_OLIVE_DRAB = new MongoId("5aa7e276e5b5b000171d0647"); + public static readonly MongoId HEADWEAR_ARMASIGHT_NVG_HEAD_STRAP = new MongoId("5c066ef40db834001966a595"); public static readonly MongoId HEADWEAR_ARMY_CAP = new MongoId("59e770f986f7742cbe3164ef"); - public static readonly MongoId HEADWEAR_ARMY_CAP_BLACK = new MongoId( - "603618feffd42c541047f771" - ); - public static readonly MongoId HEADWEAR_ARMY_CAP_CADPAT = new MongoId( - "6040de02647ad86262233012" - ); - public static readonly MongoId HEADWEAR_ARMY_CAP_COYOTE_TAN = new MongoId( - "603619720ca681766b6a0fc4" - ); - public static readonly MongoId HEADWEAR_ARMY_CAP_DESERT = new MongoId( - "60361b0b5a45383c122086a1" - ); - public static readonly MongoId HEADWEAR_ARMY_CAP_FLORA = new MongoId( - "60361a7497633951dc245eb4" - ); + public static readonly MongoId HEADWEAR_ARMY_CAP_BLACK = new MongoId("603618feffd42c541047f771"); + public static readonly MongoId HEADWEAR_ARMY_CAP_CADPAT = new MongoId("6040de02647ad86262233012"); + public static readonly MongoId HEADWEAR_ARMY_CAP_COYOTE_TAN = new MongoId("603619720ca681766b6a0fc4"); + public static readonly MongoId HEADWEAR_ARMY_CAP_DESERT = new MongoId("60361b0b5a45383c122086a1"); + public static readonly MongoId HEADWEAR_ARMY_CAP_FLORA = new MongoId("60361a7497633951dc245eb4"); public static readonly MongoId HEADWEAR_ARMY_CAP_UCP = new MongoId("60361b5a9a15b10d96792291"); - public static readonly MongoId HEADWEAR_BALLISTIC_ARMOR_CO_BASTION_HELMET_ARMOR_BLACK = - new MongoId("66b5f65ca7f72d197e70bcd6"); - public static readonly MongoId HEADWEAR_BALLISTIC_ARMOR_CO_BASTION_HELMET_MULTICAM = - new MongoId("66b5f666cad6f002ab7214c2"); - public static readonly MongoId HEADWEAR_BALLISTIC_ARMOR_CO_BASTION_HELMET_OD_GREEN = - new MongoId("66b5f661af44ca0014063c05"); + public static readonly MongoId HEADWEAR_BALLISTIC_ARMOR_CO_BASTION_HELMET_ARMOR_BLACK = new MongoId("66b5f65ca7f72d197e70bcd6"); + public static readonly MongoId HEADWEAR_BALLISTIC_ARMOR_CO_BASTION_HELMET_MULTICAM = new MongoId("66b5f666cad6f002ab7214c2"); + public static readonly MongoId HEADWEAR_BALLISTIC_ARMOR_CO_BASTION_HELMET_OD_GREEN = new MongoId("66b5f661af44ca0014063c05"); public static readonly MongoId HEADWEAR_BANDANA = new MongoId("5b43271c5acfc432ff4dce65"); public static readonly MongoId HEADWEAR_BASEBALL_CAP = new MongoId("572b7d8524597762b472f9d1"); - public static readonly MongoId HEADWEAR_BASMACH_LEATHER_CAP = new MongoId( - "65749ccf33fdc9c0cf06d3ca" - ); + public static readonly MongoId HEADWEAR_BASMACH_LEATHER_CAP = new MongoId("65749ccf33fdc9c0cf06d3ca"); public static readonly MongoId HEADWEAR_BEANIE = new MongoId("572b7fa124597762b472f9d2"); - public static readonly MongoId HEADWEAR_BEAR_BASEBALL_CAP_BLACK = new MongoId( - "5b40e5e25acfc4001a599bea" - ); - public static readonly MongoId HEADWEAR_BEAR_BASEBALL_CAP_OLIVE_DRAB = new MongoId( - "5aa2b87de5b5b00016327c25" - ); + public static readonly MongoId HEADWEAR_BEAR_BASEBALL_CAP_BLACK = new MongoId("5b40e5e25acfc4001a599bea"); + public static readonly MongoId HEADWEAR_BEAR_BASEBALL_CAP_OLIVE_DRAB = new MongoId("5aa2b87de5b5b00016327c25"); public static readonly MongoId HEADWEAR_BERET_BLACK = new MongoId("5f60e6403b85f6263c14558c"); public static readonly MongoId HEADWEAR_BERET_BLUE = new MongoId("5f60e7788adaa7100c3adb49"); - public static readonly MongoId HEADWEAR_BERET_OLIVE_DRAB = new MongoId( - "5f60e784f2bcbb675b00dac7" - ); - public static readonly MongoId HEADWEAR_BIG_PIPES_BANDANA = new MongoId( - "628e4dd1f477aa12234918aa" - ); - public static readonly MongoId HEADWEAR_BNTI_LSHZ2DTM_HELMET_BLACK = new MongoId( - "5d6d3716a4b9361bc8618872" - ); + public static readonly MongoId HEADWEAR_BERET_OLIVE_DRAB = new MongoId("5f60e784f2bcbb675b00dac7"); + public static readonly MongoId HEADWEAR_BIG_PIPES_BANDANA = new MongoId("628e4dd1f477aa12234918aa"); + public static readonly MongoId HEADWEAR_BNTI_LSHZ2DTM_HELMET_BLACK = new MongoId("5d6d3716a4b9361bc8618872"); public static readonly MongoId HEADWEAR_BOMBER_BEANIE = new MongoId("60bf74184a63fc79b60c57f6"); public static readonly MongoId HEADWEAR_BOSS_CAP = new MongoId("60a7acf20c5cb24b01346648"); - public static readonly MongoId HEADWEAR_CRYE_PRECISION_AIRFRAME_HELMET_TAN = new MongoId( - "5c17a7ed2e2216152142459c" - ); + public static readonly MongoId HEADWEAR_CRYE_PRECISION_AIRFRAME_HELMET_TAN = new MongoId("5c17a7ed2e2216152142459c"); public static readonly MongoId HEADWEAR_DED_MOROZ_HAT = new MongoId("5a43943586f77416ad2f06e2"); - public static readonly MongoId HEADWEAR_DEVTAC_RONIN_BALLISTIC_HELMET = new MongoId( - "66bdc28a0b603c26902b2011" - ); - public static readonly MongoId HEADWEAR_DEVTAC_RONIN_RESPIRATOR = new MongoId( - "5b4329f05acfc47a86086aa1" - ); - public static readonly MongoId HEADWEAR_DIAMOND_AGE_BASTION_HELMET_BLACK = new MongoId( - "5ea17ca01412a1425304d1c0" - ); - public static readonly MongoId HEADWEAR_DIAMOND_AGE_NEOSTEEL_HIGH_CUT_HELMET_BLACK = - new MongoId("65709d2d21b9f815e208ff95"); - public static readonly MongoId HEADWEAR_DOOR_KICKER_BOONIE_HAT = new MongoId( - "5d96141523f0ea1b7f2aacab" - ); + public static readonly MongoId HEADWEAR_DEVTAC_RONIN_BALLISTIC_HELMET = new MongoId("66bdc28a0b603c26902b2011"); + public static readonly MongoId HEADWEAR_DEVTAC_RONIN_RESPIRATOR = new MongoId("5b4329f05acfc47a86086aa1"); + public static readonly MongoId HEADWEAR_DIAMOND_AGE_BASTION_HELMET_BLACK = new MongoId("5ea17ca01412a1425304d1c0"); + public static readonly MongoId HEADWEAR_DIAMOND_AGE_NEOSTEEL_HIGH_CUT_HELMET_BLACK = new MongoId("65709d2d21b9f815e208ff95"); + public static readonly MongoId HEADWEAR_DOOR_KICKER_BOONIE_HAT = new MongoId("5d96141523f0ea1b7f2aacab"); public static readonly MongoId HEADWEAR_ELF_HAT = new MongoId("675aadf3003bb2e826030996"); public static readonly MongoId HEADWEAR_EMERCOM_CAP = new MongoId("5aa2b89be5b5b0001569311f"); - public static readonly MongoId HEADWEAR_FORT_KIVERM_BULLETPROOF_HELMET = new MongoId( - "5645bc214bdc2d363b8b4571" - ); - public static readonly MongoId HEADWEAR_GALVION_CAIMAN_HYBRID_HELMET_GREY = new MongoId( - "5f60b34a41e30a4ab12a6947" - ); - public static readonly MongoId HEADWEAR_GUS_BASEBALL_CAP = new MongoId( - "65749cb8e0423b9ebe0c79c9" - ); - public static readonly MongoId HEADWEAR_HAT_WITH_HORNS = new MongoId( - "675aae1c26dc64e17800fee6" - ); - public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ACHHC_IIIA_HELMET_BLACK = new MongoId( - "5b40e3f35acfc40016388218" - ); - public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ACHHC_IIIA_HELMET_OLIVE_DRAB = - new MongoId("5b40e4035acfc47a87740943"); - public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ULACH_IIIA_HELMET_BLACK = new MongoId( - "5b40e1525acfc4771e1c6611" - ); - public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ULACH_IIIA_HELMET_DESERT_TAN = - new MongoId("5b40e2bc5acfc40016388216"); - public static readonly MongoId HEADWEAR_JACK_PYKE_HUNTING_LLCS_BOONIE_HAT = new MongoId( - "618aef6d0a5a59657e5f55ee" - ); - public static readonly MongoId HEADWEAR_JACKOLANTERN_TACTICAL_PUMPKIN_HELMET = new MongoId( - "59ef13ca86f77445fd0e2483" - ); - public static readonly MongoId HEADWEAR_KINDA_COWBOY_HAT = new MongoId( - "5aa2b9ede5b5b000137b758b" - ); - public static readonly MongoId HEADWEAR_KOLPAK1S_RIOT_HELMET = new MongoId( - "59e7711e86f7746cae05fbe1" - ); + public static readonly MongoId HEADWEAR_FORT_KIVERM_BULLETPROOF_HELMET = new MongoId("5645bc214bdc2d363b8b4571"); + public static readonly MongoId HEADWEAR_GALVION_CAIMAN_HYBRID_HELMET_GREY = new MongoId("5f60b34a41e30a4ab12a6947"); + public static readonly MongoId HEADWEAR_GUS_BASEBALL_CAP = new MongoId("65749cb8e0423b9ebe0c79c9"); + public static readonly MongoId HEADWEAR_HAT_WITH_HORNS = new MongoId("675aae1c26dc64e17800fee6"); + public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ACHHC_IIIA_HELMET_BLACK = new MongoId("5b40e3f35acfc40016388218"); + public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ACHHC_IIIA_HELMET_OLIVE_DRAB = new MongoId("5b40e4035acfc47a87740943"); + public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ULACH_IIIA_HELMET_BLACK = new MongoId("5b40e1525acfc4771e1c6611"); + public static readonly MongoId HEADWEAR_HIGHCOM_STRIKER_ULACH_IIIA_HELMET_DESERT_TAN = new MongoId("5b40e2bc5acfc40016388216"); + public static readonly MongoId HEADWEAR_JACK_PYKE_HUNTING_LLCS_BOONIE_HAT = new MongoId("618aef6d0a5a59657e5f55ee"); + public static readonly MongoId HEADWEAR_JACKOLANTERN_TACTICAL_PUMPKIN_HELMET = new MongoId("59ef13ca86f77445fd0e2483"); + public static readonly MongoId HEADWEAR_KINDA_COWBOY_HAT = new MongoId("5aa2b9ede5b5b000137b758b"); + public static readonly MongoId HEADWEAR_KOLPAK1S_RIOT_HELMET = new MongoId("59e7711e86f7746cae05fbe1"); public static readonly MongoId HEADWEAR_KOTTON_BEANIE = new MongoId("5bd073c986f7747f627e796c"); public static readonly MongoId HEADWEAR_LEATHER_CAP = new MongoId("61c18db6dfd64163ea78fbb4"); - public static readonly MongoId HEADWEAR_LSHZ_LIGHTWEIGHT_HELMET_OLIVE_DRAB = new MongoId( - "5b432d215acfc4771e1c6624" - ); - public static readonly MongoId HEADWEAR_MASKA1SCH_BULLETPROOF_HELMET_CHRISTMAS_EDITION = - new MongoId("6759af0f9c8a538dd70bfae6"); - public static readonly MongoId HEADWEAR_MASKA1SCH_BULLETPROOF_HELMET_KILLA_EDITION = - new MongoId("5c0e874186f7745dc7616606"); - public static readonly MongoId HEADWEAR_MASKA1SCH_BULLETPROOF_HELMET_OLIVE_DRAB = new MongoId( - "5c091a4e0db834001d5addc8" - ); - public static readonly MongoId HEADWEAR_MILTEC_BOONIE_HAT = new MongoId( - "5b4327aa5acfc400175496e0" - ); - public static readonly MongoId HEADWEAR_MSA_ACH_TC2001_MICH_SERIES_HELMET_OLIVE_DRAB = - new MongoId("5d5e7d28a4b936645d161203"); - public static readonly MongoId HEADWEAR_MSA_ACH_TC2002_MICH_SERIES_HELMET_OLIVE_DRAB = - new MongoId("5d5e9c74a4b9364855191c40"); - public static readonly MongoId HEADWEAR_MSA_GALLET_TC_800_HIGH_CUT_COMBAT_HELMET_BLACK = - new MongoId("5e4bfc1586f774264f7582d3"); - public static readonly MongoId HEADWEAR_MTEK_FLUX_BALLISTIC_HELMET_MULTICAM_ALPINE = - new MongoId("675956062f6ddfe8ff0e2806"); - public static readonly MongoId HEADWEAR_MTEK_FLUX_BALLISTIC_HELMET_OLIVE_DRAB = new MongoId( - "6759655674aa5e0825040d62" - ); - public static readonly MongoId HEADWEAR_MTEK_STRIKE_BALLISTIC_HELMET_COYOTE = new MongoId( - "67597ceea35600b4c10cea86" - ); - public static readonly MongoId HEADWEAR_MTEK_STRIKE_BALLISTIC_HELMET_COYOTEMULTICAM_ARID = - new MongoId("67597d241d5a44f2f605df06"); - public static readonly MongoId HEADWEAR_NFM_HJELM_HELMET_HELLHOUND_GREY = new MongoId( - "61bca7cda0eae612383adf57" - ); - public static readonly MongoId HEADWEAR_NPP_KLASS_TOR2_HELMET_OLIVE_DRAB = new MongoId( - "65719f0775149d62ce0a670b" - ); - public static readonly MongoId HEADWEAR_OPSCORE_FAST_MT_SUPER_HIGH_CUT_HELMET_BLACK = - new MongoId("5a154d5cfcdbcb001a3b00da"); - public static readonly MongoId HEADWEAR_OPSCORE_FAST_MT_SUPER_HIGH_CUT_HELMET_URBAN_TAN = - new MongoId("5ac8d6885acfc400180ae7b0"); + public static readonly MongoId HEADWEAR_LSHZ_LIGHTWEIGHT_HELMET_OLIVE_DRAB = new MongoId("5b432d215acfc4771e1c6624"); + public static readonly MongoId HEADWEAR_MASKA1SCH_BULLETPROOF_HELMET_CHRISTMAS_EDITION = new MongoId("6759af0f9c8a538dd70bfae6"); + public static readonly MongoId HEADWEAR_MASKA1SCH_BULLETPROOF_HELMET_KILLA_EDITION = new MongoId("5c0e874186f7745dc7616606"); + public static readonly MongoId HEADWEAR_MASKA1SCH_BULLETPROOF_HELMET_OLIVE_DRAB = new MongoId("5c091a4e0db834001d5addc8"); + public static readonly MongoId HEADWEAR_MILTEC_BOONIE_HAT = new MongoId("5b4327aa5acfc400175496e0"); + public static readonly MongoId HEADWEAR_MSA_ACH_TC2001_MICH_SERIES_HELMET_OLIVE_DRAB = new MongoId("5d5e7d28a4b936645d161203"); + public static readonly MongoId HEADWEAR_MSA_ACH_TC2002_MICH_SERIES_HELMET_OLIVE_DRAB = new MongoId("5d5e9c74a4b9364855191c40"); + public static readonly MongoId HEADWEAR_MSA_GALLET_TC_800_HIGH_CUT_COMBAT_HELMET_BLACK = new MongoId("5e4bfc1586f774264f7582d3"); + public static readonly MongoId HEADWEAR_MTEK_FLUX_BALLISTIC_HELMET_MULTICAM_ALPINE = new MongoId("675956062f6ddfe8ff0e2806"); + public static readonly MongoId HEADWEAR_MTEK_FLUX_BALLISTIC_HELMET_OLIVE_DRAB = new MongoId("6759655674aa5e0825040d62"); + public static readonly MongoId HEADWEAR_MTEK_STRIKE_BALLISTIC_HELMET_COYOTE = new MongoId("67597ceea35600b4c10cea86"); + public static readonly MongoId HEADWEAR_MTEK_STRIKE_BALLISTIC_HELMET_COYOTEMULTICAM_ARID = new MongoId("67597d241d5a44f2f605df06"); + public static readonly MongoId HEADWEAR_NFM_HJELM_HELMET_HELLHOUND_GREY = new MongoId("61bca7cda0eae612383adf57"); + public static readonly MongoId HEADWEAR_NPP_KLASS_TOR2_HELMET_OLIVE_DRAB = new MongoId("65719f0775149d62ce0a670b"); + public static readonly MongoId HEADWEAR_OPSCORE_FAST_MT_SUPER_HIGH_CUT_HELMET_BLACK = new MongoId("5a154d5cfcdbcb001a3b00da"); + public static readonly MongoId HEADWEAR_OPSCORE_FAST_MT_SUPER_HIGH_CUT_HELMET_URBAN_TAN = new MongoId("5ac8d6885acfc400180ae7b0"); public static readonly MongoId HEADWEAR_POLICE_CAP = new MongoId("5aa2b8d7e5b5b00014028f4a"); public static readonly MongoId HEADWEAR_POMPON_HAT = new MongoId("5b4329075acfc400153b78ff"); - public static readonly MongoId HEADWEAR_PSH97_DJETA_RIOT_HELMET = new MongoId( - "5c0d2727d174af02a012cf58" - ); - public static readonly MongoId HEADWEAR_RIVALS_2020_BEANIE = new MongoId( - "5f994730c91ed922dd355de3" - ); - public static readonly MongoId HEADWEAR_RIVALS_2020_CAP = new MongoId( - "5f99418230835532b445e954" - ); - public static readonly MongoId HEADWEAR_RYST_BULLETPROOF_HELMET_BLACK = new MongoId( - "5f60c74e3b85f6263c145586" - ); + public static readonly MongoId HEADWEAR_PSH97_DJETA_RIOT_HELMET = new MongoId("5c0d2727d174af02a012cf58"); + public static readonly MongoId HEADWEAR_RIVALS_2020_BEANIE = new MongoId("5f994730c91ed922dd355de3"); + public static readonly MongoId HEADWEAR_RIVALS_2020_CAP = new MongoId("5f99418230835532b445e954"); + public static readonly MongoId HEADWEAR_RYST_BULLETPROOF_HELMET_BLACK = new MongoId("5f60c74e3b85f6263c145586"); public static readonly MongoId HEADWEAR_SANTA_HAT = new MongoId("5a43957686f7742a2c2f11b0"); - public static readonly MongoId HEADWEAR_SHPM_FIREFIGHTER_HELMET = new MongoId( - "5c08f87c0db8340019124324" - ); - public static readonly MongoId HEADWEAR_SKI_HAT_WITH_HOLES_FOR_EYES = new MongoId( - "5ab8f20c86f7745cdb629fb2" - ); - public static readonly MongoId HEADWEAR_SSH68_STEEL_HELMET_OLIVE_DRAB = new MongoId( - "5c06c6a80db834001b735491" - ); - public static readonly MongoId HEADWEAR_SSSH94_SFERAS_HELMET = new MongoId( - "5aa7d193e5b5b000171d063f" - ); - public static readonly MongoId HEADWEAR_STICH_PROFI_CHIMERA_BOONIE_HAT = new MongoId( - "60b52e5bc7d8103275739d67" - ); - public static readonly MongoId HEADWEAR_TACKEK_FAST_MT_HELMET_REPLICA = new MongoId( - "5ea05cf85ad9772e6624305d" - ); - public static readonly MongoId HEADWEAR_TACTICAL_FLEECE_BEANIE_TAN = new MongoId( - "5aa2ba19e5b5b00014028f4e" - ); - public static readonly MongoId HEADWEAR_TEAM_WENDY_EXFIL_BALLISTIC_HELMET_BLACK = new MongoId( - "5e00c1ad86f774747333222c" - ); - public static readonly MongoId HEADWEAR_TEAM_WENDY_EXFIL_BALLISTIC_HELMET_COYOTE_BROWN = - new MongoId("5e01ef6886f77445f643baa4"); - public static readonly MongoId HEADWEAR_TSH4ML_SOFT_TANK_CREW_HELMET = new MongoId( - "5df8a58286f77412631087ed" - ); + public static readonly MongoId HEADWEAR_SHPM_FIREFIGHTER_HELMET = new MongoId("5c08f87c0db8340019124324"); + public static readonly MongoId HEADWEAR_SKI_HAT_WITH_HOLES_FOR_EYES = new MongoId("5ab8f20c86f7745cdb629fb2"); + public static readonly MongoId HEADWEAR_SSH68_STEEL_HELMET_OLIVE_DRAB = new MongoId("5c06c6a80db834001b735491"); + public static readonly MongoId HEADWEAR_SSSH94_SFERAS_HELMET = new MongoId("5aa7d193e5b5b000171d063f"); + public static readonly MongoId HEADWEAR_STICH_PROFI_CHIMERA_BOONIE_HAT = new MongoId("60b52e5bc7d8103275739d67"); + public static readonly MongoId HEADWEAR_TACKEK_FAST_MT_HELMET_REPLICA = new MongoId("5ea05cf85ad9772e6624305d"); + public static readonly MongoId HEADWEAR_TACTICAL_FLEECE_BEANIE_TAN = new MongoId("5aa2ba19e5b5b00014028f4e"); + public static readonly MongoId HEADWEAR_TEAM_WENDY_EXFIL_BALLISTIC_HELMET_BLACK = new MongoId("5e00c1ad86f774747333222c"); + public static readonly MongoId HEADWEAR_TEAM_WENDY_EXFIL_BALLISTIC_HELMET_COYOTE_BROWN = new MongoId("5e01ef6886f77445f643baa4"); + public static readonly MongoId HEADWEAR_TSH4ML_SOFT_TANK_CREW_HELMET = new MongoId("5df8a58286f77412631087ed"); public static readonly MongoId HEADWEAR_UNTAR_HELMET = new MongoId("5aa7d03ae5b5b00016327db5"); - public static readonly MongoId HEADWEAR_USEC_BASEBALL_CAP_BLACK = new MongoId( - "5b40e61f5acfc4001a599bec" - ); - public static readonly MongoId HEADWEAR_USEC_BASEBALL_CAP_COYOTE = new MongoId( - "5aa2a7e8e5b5b00016327c16" - ); - public static readonly MongoId HEADWEAR_USHANKA_EAR_FLAP_HAT = new MongoId( - "59e7708286f7742cbd762753" - ); + public static readonly MongoId HEADWEAR_USEC_BASEBALL_CAP_BLACK = new MongoId("5b40e61f5acfc4001a599bec"); + public static readonly MongoId HEADWEAR_USEC_BASEBALL_CAP_COYOTE = new MongoId("5aa2a7e8e5b5b00016327c16"); + public static readonly MongoId HEADWEAR_USHANKA_EAR_FLAP_HAT = new MongoId("59e7708286f7742cbd762753"); public static readonly MongoId HEADWEAR_UX_PRO_BEANIE = new MongoId("5aa2ba46e5b5b000137b758d"); - public static readonly MongoId HEADWEAR_VENGEFUL_ZRYACHIYS_BALACLAVA_FOLDED = new MongoId( - "6531119b9afebff7ff0a1769" - ); - public static readonly MongoId HEADWEAR_VULKAN5_LSHZ5_BULLETPROOF_HELMET_BLACK = new MongoId( - "5ca20ee186f774799474abc2" - ); - public static readonly MongoId HEADWEAR_WILCOX_SKULL_LOCK_HEAD_MOUNT = new MongoId( - "5a16bb52fcdbcb001a3b00dc" - ); - public static readonly MongoId HEADWEAR_ZRYACHIYS_BALACLAVA_FOLDED = new MongoId( - "636270263f2495c26f00b007" - ); - public static readonly MongoId HEADWEAR_ZSH12M_HELMET_BLACK_COVER = new MongoId( - "5aa7e4a4e5b5b000137b76f2" - ); - public static readonly MongoId HEADWEAR_ZSH12M_HELMET_OLIVE_DRAB = new MongoId( - "5aa7e454e5b5b0214e506fa2" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_CIRCLEOFCULTISTS_STASH_1 = new MongoId( - "66740c3739b9da6ce402ee65" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_CUSTOMIZATION = new MongoId( - "673c7b00cbf4b984b5099181" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_EQUIPMENTPRESETSTAND_STASH_1 = new MongoId( - "65e5957613227bb7690ce9f6" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_EQUIPMENTPRESETSTAND_STASH_2 = new MongoId( - "65e597266017f07a3204b775" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_EQUIPMENTPRESETSTAND_STASH_3 = new MongoId( - "65e5972a13227bb7690cea07" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_PLACEOFFAME_STASH_1 = new MongoId( - "63dbd45917fff4dee40fe16e" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_PLACEOFFAME_STASH_2 = new MongoId( - "65424185a57eea37ed6562e9" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_PLACEOFFAME_STASH_3 = new MongoId( - "6542435ea57eea37ed6562f0" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_WEAPONSTAND_STASH_1 = new MongoId( - "6401c7b213d9b818bf0e7dd7" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_WEAPONSTAND_STASH_2 = new MongoId( - "64381b582bb1c5dedd0fc925" - ); - public static readonly MongoId HIDEOUTAREACONTAINER_WEAPONSTAND_STASH_3 = new MongoId( - "64381b6e44b37a080d0245b9" - ); - public static readonly MongoId INFO_ADVANCED_ELECTRONIC_MATERIALS_TEXTBOOK = new MongoId( - "6389c92d52123d5dd17f8876" - ); + public static readonly MongoId HEADWEAR_VENGEFUL_ZRYACHIYS_BALACLAVA_FOLDED = new MongoId("6531119b9afebff7ff0a1769"); + public static readonly MongoId HEADWEAR_VULKAN5_LSHZ5_BULLETPROOF_HELMET_BLACK = new MongoId("5ca20ee186f774799474abc2"); + public static readonly MongoId HEADWEAR_WILCOX_SKULL_LOCK_HEAD_MOUNT = new MongoId("5a16bb52fcdbcb001a3b00dc"); + public static readonly MongoId HEADWEAR_ZRYACHIYS_BALACLAVA_FOLDED = new MongoId("636270263f2495c26f00b007"); + public static readonly MongoId HEADWEAR_ZSH12M_HELMET_BLACK_COVER = new MongoId("5aa7e4a4e5b5b000137b76f2"); + public static readonly MongoId HEADWEAR_ZSH12M_HELMET_OLIVE_DRAB = new MongoId("5aa7e454e5b5b0214e506fa2"); + public static readonly MongoId HIDEOUTAREACONTAINER_CIRCLEOFCULTISTS_STASH_1 = new MongoId("66740c3739b9da6ce402ee65"); + public static readonly MongoId HIDEOUTAREACONTAINER_CUSTOMIZATION = new MongoId("673c7b00cbf4b984b5099181"); + public static readonly MongoId HIDEOUTAREACONTAINER_EQUIPMENTPRESETSTAND_STASH_1 = new MongoId("65e5957613227bb7690ce9f6"); + public static readonly MongoId HIDEOUTAREACONTAINER_EQUIPMENTPRESETSTAND_STASH_2 = new MongoId("65e597266017f07a3204b775"); + public static readonly MongoId HIDEOUTAREACONTAINER_EQUIPMENTPRESETSTAND_STASH_3 = new MongoId("65e5972a13227bb7690cea07"); + public static readonly MongoId HIDEOUTAREACONTAINER_PLACEOFFAME_STASH_1 = new MongoId("63dbd45917fff4dee40fe16e"); + public static readonly MongoId HIDEOUTAREACONTAINER_PLACEOFFAME_STASH_2 = new MongoId("65424185a57eea37ed6562e9"); + public static readonly MongoId HIDEOUTAREACONTAINER_PLACEOFFAME_STASH_3 = new MongoId("6542435ea57eea37ed6562f0"); + public static readonly MongoId HIDEOUTAREACONTAINER_WEAPONSTAND_STASH_1 = new MongoId("6401c7b213d9b818bf0e7dd7"); + public static readonly MongoId HIDEOUTAREACONTAINER_WEAPONSTAND_STASH_2 = new MongoId("64381b582bb1c5dedd0fc925"); + public static readonly MongoId HIDEOUTAREACONTAINER_WEAPONSTAND_STASH_3 = new MongoId("64381b6e44b37a080d0245b9"); + public static readonly MongoId INFO_ADVANCED_ELECTRONIC_MATERIALS_TEXTBOOK = new MongoId("6389c92d52123d5dd17f8876"); public static readonly MongoId INFO_BAKEEZY_COOK_BOOK = new MongoId("62a09e73af34e73a266d932a"); - public static readonly MongoId INFO_DECRYPTED_FLASH_DRIVE = new MongoId( - "660bbc98c38b837877075e4a" - ); + public static readonly MongoId INFO_DECRYPTED_FLASH_DRIVE = new MongoId("660bbc98c38b837877075e4a"); public static readonly MongoId INFO_DIARY = new MongoId("590c645c86f77412b01304d9"); - public static readonly MongoId INFO_DOCUMENTS_WITH_DECRYPTED_DATA = new MongoId( - "660bc341c38b837877075e4c" - ); - public static readonly MongoId INFO_ENCRYPTED_FLASH_DRIVE = new MongoId( - "660bbc47c38b837877075e47" - ); - public static readonly MongoId INFO_FLASH_DRIVE_WITH_SPECIAL_SOFTWARE = new MongoId( - "6707d13e4e617ec94f0e5631" - ); - public static readonly MongoId INFO_INTELLIGENCE_FOLDER = new MongoId( - "5c12613b86f7743bbe2c3f76" - ); - public static readonly MongoId INFO_LABRYS_RESEARCH_NOTES = new MongoId( - "679b992329acd1f2f60985a5" - ); - public static readonly MongoId INFO_MILITARY_FLASH_DRIVE = new MongoId( - "62a0a16d0b9d3c46de5b6e97" - ); - public static readonly MongoId INFO_MINEFIELD_MAP_LIGHTHOUSE = new MongoId( - "675aaa8f7f3c962069072b27" - ); - public static readonly MongoId INFO_MINEFIELD_MAP_RESERVE = new MongoId( - "675aaa003107dac10006332f" - ); - public static readonly MongoId INFO_MINEFIELD_MAP_WOODS = new MongoId( - "675aaa9a3107dac100063331" - ); - public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_ADAPTATION = new MongoId( - "675aaae75a3ab8372d0b02a7" - ); - public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_ARK = new MongoId( - "675aaaf674a7619a5304c233" - ); - public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_HEARTBEAT = new MongoId( - "675aab0d6b6addc02a08f097" - ); - public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_ONYX = new MongoId( - "675aaae1dcf102478202c537" - ); - public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_VORON = new MongoId( - "675aaab74bca0b001d02f356" - ); + public static readonly MongoId INFO_DOCUMENTS_WITH_DECRYPTED_DATA = new MongoId("660bc341c38b837877075e4c"); + public static readonly MongoId INFO_ENCRYPTED_FLASH_DRIVE = new MongoId("660bbc47c38b837877075e47"); + public static readonly MongoId INFO_FLASH_DRIVE_WITH_SPECIAL_SOFTWARE = new MongoId("6707d13e4e617ec94f0e5631"); + public static readonly MongoId INFO_INTELLIGENCE_FOLDER = new MongoId("5c12613b86f7743bbe2c3f76"); + public static readonly MongoId INFO_LABRYS_RESEARCH_NOTES = new MongoId("679b992329acd1f2f60985a5"); + public static readonly MongoId INFO_MILITARY_FLASH_DRIVE = new MongoId("62a0a16d0b9d3c46de5b6e97"); + public static readonly MongoId INFO_MINEFIELD_MAP_LIGHTHOUSE = new MongoId("675aaa8f7f3c962069072b27"); + public static readonly MongoId INFO_MINEFIELD_MAP_RESERVE = new MongoId("675aaa003107dac10006332f"); + public static readonly MongoId INFO_MINEFIELD_MAP_WOODS = new MongoId("675aaa9a3107dac100063331"); + public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_ADAPTATION = new MongoId("675aaae75a3ab8372d0b02a7"); + public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_ARK = new MongoId("675aaaf674a7619a5304c233"); + public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_HEARTBEAT = new MongoId("675aab0d6b6addc02a08f097"); + public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_ONYX = new MongoId("675aaae1dcf102478202c537"); + public static readonly MongoId INFO_NOTE_WITH_CODE_WORD_VORON = new MongoId("675aaab74bca0b001d02f356"); public static readonly MongoId INFO_SAS_DRIVE = new MongoId("590c37d286f77443be3d7827"); - public static readonly MongoId INFO_SECURE_FLASH_DRIVE = new MongoId( - "590c621186f774138d11ea29" - ); - public static readonly MongoId INFO_SECURE_FLASH_DRIVE_V2 = new MongoId( - "6331ba83f2ab4f3f09502983" - ); - public static readonly MongoId INFO_SECURE_MAGNETIC_TAPE_CASSETTE = new MongoId( - "61bf7c024770ee6f9c6b8b53" - ); - public static readonly MongoId INFO_SILICON_OPTOELECTRONIC_INTEGRATED_CIRCUITS_TEXTBOOK = - new MongoId("6389c8fb46b54c634724d847"); + public static readonly MongoId INFO_SECURE_FLASH_DRIVE = new MongoId("590c621186f774138d11ea29"); + public static readonly MongoId INFO_SECURE_FLASH_DRIVE_V2 = new MongoId("6331ba83f2ab4f3f09502983"); + public static readonly MongoId INFO_SECURE_MAGNETIC_TAPE_CASSETTE = new MongoId("61bf7c024770ee6f9c6b8b53"); + public static readonly MongoId INFO_SILICON_OPTOELECTRONIC_INTEGRATED_CIRCUITS_TEXTBOOK = new MongoId("6389c8fb46b54c634724d847"); public static readonly MongoId INFO_SLIM_DIARY = new MongoId("590c651286f7741e566b6461"); public static readonly MongoId INFO_SSD_DRIVE = new MongoId("590c392f86f77444754deb29"); public static readonly MongoId INFO_TECH_MANUAL = new MongoId("590c639286f774151567fa95"); - public static readonly MongoId INFO_TERRAGROUP_BLUE_FOLDERS_MATERIALS = new MongoId( - "6389c8c5dbfd5e4b95197e6b" - ); - public static readonly MongoId INFO_TGVI24_LETHAL_VACCINE = new MongoId( - "6707d0804e617ec94f0e562f" - ); - public static readonly MongoId INFO_TGVI24_TRUE_VACCINE = new MongoId( - "6707d0bdaab679420007e01a" - ); - public static readonly MongoId INFO_TOPOGRAPHIC_SURVEY_MAPS = new MongoId( - "62a0a124de7ac81993580542" - ); - public static readonly MongoId INFO_VIDEO_CASSETTE_WITH_THE_CYBORG_KILLER_MOVIE = new MongoId( - "62a09e974f842e1bd12da3f0" - ); + public static readonly MongoId INFO_TERRAGROUP_BLUE_FOLDERS_MATERIALS = new MongoId("6389c8c5dbfd5e4b95197e6b"); + public static readonly MongoId INFO_TGVI24_LETHAL_VACCINE = new MongoId("6707d0804e617ec94f0e562f"); + public static readonly MongoId INFO_TGVI24_TRUE_VACCINE = new MongoId("6707d0bdaab679420007e01a"); + public static readonly MongoId INFO_TOPOGRAPHIC_SURVEY_MAPS = new MongoId("62a0a124de7ac81993580542"); + public static readonly MongoId INFO_VIDEO_CASSETTE_WITH_THE_CYBORG_KILLER_MOVIE = new MongoId("62a09e974f842e1bd12da3f0"); public static readonly MongoId INVENTORY_DEFAULT = new MongoId("55d7217a4bdc2d86028b456d"); - public static readonly MongoId IRONSIGHT_AK_RD_ENHANCED_V2_REAR_SIGHT = new MongoId( - "628a7b23b0f75035732dd565" - ); - public static readonly MongoId IRONSIGHT_AK_TAKTIKA_TULA_TT01_REAR_SIGHT_RAIL = new MongoId( - "5649d9a14bdc2d79388b4580" - ); - public static readonly MongoId IRONSIGHT_AK105_REAR_SIGHT = new MongoId( - "5ac733a45acfc400192630e2" - ); - public static readonly MongoId IRONSIGHT_AK12_REAR_SIGHT = new MongoId( - "649ec2cec93611967b03495e" - ); - public static readonly MongoId IRONSIGHT_AK12_REAR_SIGHT_MOUNT = new MongoId( - "649ec2da59cbb3c813042dca" - ); - public static readonly MongoId IRONSIGHT_AK545_REAR_SIGHT = new MongoId( - "628b9471078f94059a4b9bfb" - ); - public static readonly MongoId IRONSIGHT_AK74_REAR_SIGHT = new MongoId( - "5649b0544bdc2d1b2b8b458a" - ); - public static readonly MongoId IRONSIGHT_AK74M_REAR_SIGHT = new MongoId( - "5ac72e475acfc400180ae6fe" - ); - public static readonly MongoId IRONSIGHT_AKM_REAR_SIGHT = new MongoId( - "59d650cf86f7741b846413a4" - ); - public static readonly MongoId IRONSIGHT_AKMB_SYSTEM_REAR_SIGHT = new MongoId( - "5a0eb980fcdbcb001a3b00a6" - ); - public static readonly MongoId IRONSIGHT_AKMP_SYSTEM_FRONT_SIGHT_DEVICE = new MongoId( - "5a0f096dfcdbcb0176308b15" - ); - public static readonly MongoId IRONSIGHT_AKMP_SYSTEM_REAR_SIGHT_DEVICE = new MongoId( - "5a0ed824fcdbcb0176308b0d" - ); - public static readonly MongoId IRONSIGHT_APB_REAR_SIGHT = new MongoId( - "5aba639ed8ce8700182ece67" - ); - public static readonly MongoId IRONSIGHT_APS_FRONT_SIGHT = new MongoId( - "5aba62f8d8ce87001943946b" - ); - public static readonly MongoId IRONSIGHT_APS_REAR_SIGHT = new MongoId( - "5aba637ad8ce87001773e17f" - ); - public static readonly MongoId IRONSIGHT_AR15_COLT_A2_REAR_SIGHT = new MongoId( - "55d5f46a4bdc2d1b198b4567" - ); - public static readonly MongoId IRONSIGHT_AR15_LEAPERS_UTG_LOW_PROFILE_A2_FRONT_SIGHT = - new MongoId("55d4af3a4bdc2d972f8b456f"); - public static readonly MongoId IRONSIGHT_AR15_REAR_SIGHT_CARRY_HANDLE = new MongoId( - "5ae30bad5acfc400185c2dc4" - ); - public static readonly MongoId IRONSIGHT_AS_VAL_REAR_SIGHT = new MongoId( - "57c44e7b2459772d28133248" - ); - public static readonly MongoId IRONSIGHT_ASH12_FOLDING_FRONT_SIGHT = new MongoId( - "5caf16a2ae92152ac412efbc" - ); - public static readonly MongoId IRONSIGHT_ASH12_REAR_SIGHT_CARRY_HANDLE = new MongoId( - "5caf1691ae92152ac412efb9" - ); - public static readonly MongoId IRONSIGHT_BENELLI_M3_GHOST_RING_REAR_SIGHT = new MongoId( - "625ebcef6f53af4aa66b44dc" - ); - public static readonly MongoId IRONSIGHT_CHAOS_HK_STYLE_FRONT_SIGHT = new MongoId( - "674fe8dd362ea1f88b0e2792" - ); - public static readonly MongoId IRONSIGHT_CHAOS_HK_STYLE_REAR_SIGHT = new MongoId( - "674fe8cf4472d471fb0f07df" - ); - public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_FRONT_SIGHT = new MongoId( - "619f4d304c58466fe1228437" - ); - public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_REAR_SIGHT = new MongoId( - "619f4cee4c58466fe1228435" - ); - public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_RED_FIBER_OPTIC_FRONT_SIGHT = - new MongoId("619f52454c58466fe122843b"); - public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_RED_FIBER_OPTIC_REAR_SIGHT = new MongoId( - "619f4f8c4c58466fe1228439" - ); - public static readonly MongoId IRONSIGHT_DESERT_EAGLE_FRONT_SIGHT = new MongoId( - "668fe5ec4315934ba10c6f96" - ); - public static readonly MongoId IRONSIGHT_DESERT_EAGLE_REAR_SIGHT = new MongoId( - "668fe5e1800f0244f9036e46" - ); - public static readonly MongoId IRONSIGHT_FN_FIVESEVEN_MK2_FRONT_SIGHT = new MongoId( - "5d3eb536a4b9363b1f22f8e2" - ); - public static readonly MongoId IRONSIGHT_FN_FIVESEVEN_MK2_REAR_SIGHT = new MongoId( - "5d3eb4aba4b93650d64e497d" - ); - public static readonly MongoId IRONSIGHT_FN_SCAR_FLIPUP_FRONT_SIGHT = new MongoId( - "61816fcad92c473c770215cc" - ); - public static readonly MongoId IRONSIGHT_FN_SCAR_FLIPUP_REAR_SIGHT = new MongoId( - "61817865d3a39d50044c13a4" - ); - public static readonly MongoId IRONSIGHT_GLOCK_19X_FRONT_SIGHT = new MongoId( - "630765777d50ff5e8a1ea718" - ); - public static readonly MongoId IRONSIGHT_GLOCK_19X_REAR_SIGHT = new MongoId( - "630765cb962d0247b029dc45" - ); - public static readonly MongoId IRONSIGHT_GLOCK_DEAD_RINGER_SNAKE_EYE_FRONT_SIGHT = new MongoId( - "5a7d90eb159bd400165484f1" - ); - public static readonly MongoId IRONSIGHT_GLOCK_DEAD_RINGER_SNAKE_EYE_REAR_SIGHT = new MongoId( - "5a7d9122159bd4001438dbf4" - ); - public static readonly MongoId IRONSIGHT_GLOCK_FRONT_SIGHT = new MongoId( - "5a6f58f68dc32e000a311390" - ); - public static readonly MongoId IRONSIGHT_GLOCK_REAR_SIGHT = new MongoId( - "5a6f5d528dc32e00094b97d9" - ); - public static readonly MongoId IRONSIGHT_GLOCK_TRUGLO_TFX_FRONT_SIGHT = new MongoId( - "5a7d9104159bd400134c8c21" - ); - public static readonly MongoId IRONSIGHT_GLOCK_TRUGLO_TFX_REAR_SIGHT = new MongoId( - "5a7d912f159bd400165484f3" - ); - public static readonly MongoId IRONSIGHT_GLOCK_ZEV_TECH_FRONT_SIGHT = new MongoId( - "5a71e0048dc32e000c52ecc8" - ); - public static readonly MongoId IRONSIGHT_GLOCK_ZEV_TECH_REAR_SIGHT = new MongoId( - "5a71e0fb8dc32e00094b97f2" - ); - public static readonly MongoId IRONSIGHT_HK_416A5_FLIPUP_REAR_SIGHT = new MongoId( - "5bb20e49d4351e3bac1212de" - ); - public static readonly MongoId IRONSIGHT_HK_G36_FRONT_SIGHT = new MongoId( - "623166e08c43374ca1567195" - ); - public static readonly MongoId IRONSIGHT_HK_G36_REAR_SIGHT = new MongoId( - "6231670f0b8aa5472d060095" - ); - public static readonly MongoId IRONSIGHT_HK_MP5_DRUM_REAR_SIGHT = new MongoId( - "5926d2be86f774134d668e4e" - ); - public static readonly MongoId IRONSIGHT_HK_MP7_FLIPUP_FRONT_SIGHT = new MongoId( - "5ba26b01d4351e0085325a51" - ); - public static readonly MongoId IRONSIGHT_HK_MP7_FLIPUP_REAR_SIGHT = new MongoId( - "5ba26b17d4351e00367f9bdd" - ); - public static readonly MongoId IRONSIGHT_HK_USP_FRONT_SIGHT = new MongoId( - "6194f35c18a3974e5e7421e6" - ); - public static readonly MongoId IRONSIGHT_HK_USP_REAR_SIGHT = new MongoId( - "6194f2912d2c397d6600348d" - ); - public static readonly MongoId IRONSIGHT_HK_USP_RED_DOT_SIGHT_MOUNT = new MongoId( - "61963a852d2c397d660036ad" - ); - public static readonly MongoId IRONSIGHT_HK_USP_TACTICAL_FRONT_SIGHT = new MongoId( - "6194f3286db0f2477964e67d" - ); - public static readonly MongoId IRONSIGHT_HK_USP_TACTICAL_REAR_SIGHT = new MongoId( - "6194f2df645b5d229654ad77" - ); - public static readonly MongoId IRONSIGHT_KAC_FOLDING_FRONT_SIGHT = new MongoId( - "5c17804b2e2216152006c02f" - ); - public static readonly MongoId IRONSIGHT_KAC_FOLDING_MICRO_FRONT_SIGHT = new MongoId( - "5dfa3d950dee1b22f862eae0" - ); - public static readonly MongoId IRONSIGHT_KAC_FOLDING_MICRO_REAR_SIGHT = new MongoId( - "5dfa3d7ac41b2312ea33362a" - ); - public static readonly MongoId IRONSIGHT_KAC_FOLDING_REAR_SIGHT = new MongoId( - "5c1780312e221602b66cc189" - ); - public static readonly MongoId IRONSIGHT_KRISS_DEFIANCE_LOW_PROFILE_FLIPUP_FRONT_SIGHT = - new MongoId("5fb6567747ce63734e3fa1dc"); - public static readonly MongoId IRONSIGHT_KRISS_DEFIANCE_LOW_PROFILE_FLIPUP_REAR_SIGHT = - new MongoId("5fb6564947ce63734e3fa1da"); - public static readonly MongoId IRONSIGHT_M14_SA_ENLARGED_MILITARY_APERTURE_REAR_SIGHT = - new MongoId("5abcbb20d8ce87001773e258"); - public static readonly MongoId IRONSIGHT_M1911A1_FRONT_SIGHT = new MongoId( - "5e81ee213397a21db957f6a6" - ); - public static readonly MongoId IRONSIGHT_M1911A1_REAR_SIGHT = new MongoId( - "5e81ee4dcb2b95385c177582" - ); - public static readonly MongoId IRONSIGHT_M1A_SA_NATIONAL_MATCH_062_BLADE_FRONT_SIGHT = - new MongoId("5addba3e5acfc4001669f0ab"); - public static readonly MongoId IRONSIGHT_M1A_SA_XS_POST_125_BLADE_FRONT_SIGHT = new MongoId( - "5aafa49ae5b5b00015042a58" - ); - public static readonly MongoId IRONSIGHT_M45A1_NOVAK_LOMOUNT_FRONT_SIGHT = new MongoId( - "5f3e78a7fbf956000b716b8e" - ); - public static readonly MongoId IRONSIGHT_M45A1_NOVAK_LOMOUNT_REAR_SIGHT = new MongoId( - "5f3e7897ddc4f03b010e204a" - ); - public static readonly MongoId IRONSIGHT_M60_REAR_SIGHT = new MongoId( - "6601265f98a610c1aa0ea637" - ); - public static readonly MongoId IRONSIGHT_M60E4_FRONT_SIGHT = new MongoId( - "6601268bc752a02bbe05e686" - ); - public static readonly MongoId IRONSIGHT_M60E6_FRONT_SIGHT_RAIL = new MongoId( - "660126a98f2b23af220b27e7" - ); - public static readonly MongoId IRONSIGHT_M9A3_FRONT_SIGHT = new MongoId( - "5cadd919ae921500126a77f3" - ); - public static readonly MongoId IRONSIGHT_M9A3_REAR_SIGHT = new MongoId( - "5cadd940ae9215051e1c2316" - ); - public static readonly MongoId IRONSIGHT_M9A3_SIGHT_MOUNT_REAR_SIGHT_RAIL = new MongoId( - "5cadd954ae921500103bb3c2" - ); - public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_FRONT_SIGHT = new MongoId( - "5bc09a30d4351e00367fb7c8" - ); - public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_FRONT_SIGHT_FDE = new MongoId( - "5c18b90d2e2216152142466b" - ); - public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_REAR_SIGHT = new MongoId( - "5bc09a18d4351e003562b68e" - ); - public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_REAR_SIGHT_FDE = new MongoId( - "5c18b9192e2216398b5a8104" - ); - public static readonly MongoId IRONSIGHT_MCX_FLIPUP_FRONT_SIGHT = new MongoId( - "5fc0fa362770a0045c59c677" - ); - public static readonly MongoId IRONSIGHT_MCX_FLIPUP_REAR_SIGHT = new MongoId( - "5fc0fa957283c4046c58147e" - ); - public static readonly MongoId IRONSIGHT_MOSIN_RIFLE_CARBINE_REAR_SIGHT = new MongoId( - "5bfd4c980db834001b73449d" - ); - public static readonly MongoId IRONSIGHT_MOSIN_RIFLE_FRONT_SIGHT = new MongoId( - "5ae099875acfc4001714e593" - ); - public static readonly MongoId IRONSIGHT_MOSIN_RIFLE_REAR_SIGHT = new MongoId( - "5ae099925acfc4001a5fc7b3" - ); - public static readonly MongoId IRONSIGHT_MOSSBERG_590_GHOST_RING_FRONT_SIGHT = new MongoId( - "5e8708d4ae379e67d22e0102" - ); - public static readonly MongoId IRONSIGHT_MOSSBERG_590_GHOST_RING_REAR_SIGHT = new MongoId( - "5e87114fe2db31558c75a120" - ); - public static readonly MongoId IRONSIGHT_MP9_REAR_SIGHT = new MongoId( - "5de8fb539f98ac2bc659513a" - ); - public static readonly MongoId IRONSIGHT_MPX_FLIPUP_FRONT_SIGHT = new MongoId( - "5894a73486f77426d259076c" - ); - public static readonly MongoId IRONSIGHT_MPX_FLIPUP_REAR_SIGHT = new MongoId( - "5894a81786f77427140b8347" - ); - public static readonly MongoId IRONSIGHT_P226_FRONT_SIGHT = new MongoId( - "56d5a661d2720bd8418b456b" - ); - public static readonly MongoId IRONSIGHT_P226_MEPROLIGHT_TRUDOT_NIGHT_FRONT_SIGHT = new MongoId( - "5c07b36c0db834002a1259e9" - ); - public static readonly MongoId IRONSIGHT_P226_MEPROLIGHT_TRUDOT_NIGHT_REAR_SIGHT = new MongoId( - "5c07b3850db834002330045b" - ); - public static readonly MongoId IRONSIGHT_P226_REAR_SIGHT = new MongoId( - "56d5a77ed2720b90418b4568" - ); - public static readonly MongoId IRONSIGHT_P226_SIGHT_MOUNT_220239_REAR_SIGHT_BEARING = - new MongoId("56ea7293d2720b8d4b8b45ba"); - public static readonly MongoId IRONSIGHT_PK_REAR_SIGHT = new MongoId( - "6492fb8253acae0af00a29b6" - ); - public static readonly MongoId IRONSIGHT_PL15_EXTENDED_FRONT_SIGHT = new MongoId( - "60228a850ddce744014caf69" - ); - public static readonly MongoId IRONSIGHT_PL15_EXTENDED_REAR_SIGHT = new MongoId( - "602293f023506e50807090cb" - ); - public static readonly MongoId IRONSIGHT_PL15_FRONT_SIGHT = new MongoId( - "60228a76d62c9b14ed777a66" - ); - public static readonly MongoId IRONSIGHT_PL15_REAR_SIGHT = new MongoId( - "60229948cacb6b0506369e27" - ); - public static readonly MongoId IRONSIGHT_PM_REAR_SIGHT = new MongoId( - "63c6adcfb4ba094317063742" - ); - public static readonly MongoId IRONSIGHT_PP1901_VITYAZ_REAR_SIGHT = new MongoId( - "599860e986f7743bb57573a6" - ); - public static readonly MongoId IRONSIGHT_RPD_REAR_SIGHT = new MongoId( - "6513f153e63f29908d0ffaba" - ); - public static readonly MongoId IRONSIGHT_RPK16_REAR_SIGHT = new MongoId( - "5bf3f59f0db834001a6fa060" - ); - public static readonly MongoId IRONSIGHT_RPK16_REAR_SIGHT_BASE = new MongoId( - "5beec9450db83400970084fd" - ); - public static readonly MongoId IRONSIGHT_SA58_HOLLAND_TYPE_REAR_SIGHT = new MongoId( - "5b0bc22d5acfc47a8607f085" - ); - public static readonly MongoId IRONSIGHT_SKS_REAR_SIGHT = new MongoId( - "574db213245977459a2f3f5d" - ); - public static readonly MongoId IRONSIGHT_SOK12_CSS_REAR_SIGHT_RAIL_MOUNT = new MongoId( - "58272b842459774abc128d50" - ); - public static readonly MongoId IRONSIGHT_SOK12_REAR_SIGHT = new MongoId( - "57a9b9ce2459770ee926038d" - ); - public static readonly MongoId IRONSIGHT_SV98_REAR_SIGHT = new MongoId( - "56083e1b4bdc2dc8488b4572" - ); - public static readonly MongoId IRONSIGHT_SVDS_FRONT_SIGHT = new MongoId( - "5c471ba12e221602b3137d76" - ); - public static readonly MongoId IRONSIGHT_SVDS_REAR_SIGHT = new MongoId( - "5c471b7e2e2216152006e46c" - ); - public static readonly MongoId IRONSIGHT_SVT40_FRONT_SIGHT = new MongoId( - "64119d672c6d6f921a0929fb" - ); - public static readonly MongoId IRONSIGHT_SVT40_REAR_SIGHT = new MongoId( - "64119d90dcf48d656f0aa275" - ); - public static readonly MongoId IRONSIGHT_TRIJICON_ACOG_BACKUP_REAR_SIGHT = new MongoId( - "5c05295e0db834001a66acbb" - ); - public static readonly MongoId IRONSIGHT_VPO101_REAR_SIGHT = new MongoId( - "5c503b1c2e221602b21d6e9d" - ); - public static readonly MongoId IRONSIGHT_VPO209_REAR_SIGHT = new MongoId( - "59e8977386f77415a553c453" - ); - public static readonly MongoId IRONSIGHT_VSS_REAR_SIGHT = new MongoId( - "57838e1b2459774a256959b1" - ); + public static readonly MongoId IRONSIGHT_AK_RD_ENHANCED_V2_REAR_SIGHT = new MongoId("628a7b23b0f75035732dd565"); + public static readonly MongoId IRONSIGHT_AK_TAKTIKA_TULA_TT01_REAR_SIGHT_RAIL = new MongoId("5649d9a14bdc2d79388b4580"); + public static readonly MongoId IRONSIGHT_AK105_REAR_SIGHT = new MongoId("5ac733a45acfc400192630e2"); + public static readonly MongoId IRONSIGHT_AK12_REAR_SIGHT = new MongoId("649ec2cec93611967b03495e"); + public static readonly MongoId IRONSIGHT_AK12_REAR_SIGHT_MOUNT = new MongoId("649ec2da59cbb3c813042dca"); + public static readonly MongoId IRONSIGHT_AK545_REAR_SIGHT = new MongoId("628b9471078f94059a4b9bfb"); + public static readonly MongoId IRONSIGHT_AK74_REAR_SIGHT = new MongoId("5649b0544bdc2d1b2b8b458a"); + public static readonly MongoId IRONSIGHT_AK74M_REAR_SIGHT = new MongoId("5ac72e475acfc400180ae6fe"); + public static readonly MongoId IRONSIGHT_AKM_REAR_SIGHT = new MongoId("59d650cf86f7741b846413a4"); + public static readonly MongoId IRONSIGHT_AKMB_SYSTEM_REAR_SIGHT = new MongoId("5a0eb980fcdbcb001a3b00a6"); + public static readonly MongoId IRONSIGHT_AKMP_SYSTEM_FRONT_SIGHT_DEVICE = new MongoId("5a0f096dfcdbcb0176308b15"); + public static readonly MongoId IRONSIGHT_AKMP_SYSTEM_REAR_SIGHT_DEVICE = new MongoId("5a0ed824fcdbcb0176308b0d"); + public static readonly MongoId IRONSIGHT_APB_REAR_SIGHT = new MongoId("5aba639ed8ce8700182ece67"); + public static readonly MongoId IRONSIGHT_APS_FRONT_SIGHT = new MongoId("5aba62f8d8ce87001943946b"); + public static readonly MongoId IRONSIGHT_APS_REAR_SIGHT = new MongoId("5aba637ad8ce87001773e17f"); + public static readonly MongoId IRONSIGHT_AR15_COLT_A2_REAR_SIGHT = new MongoId("55d5f46a4bdc2d1b198b4567"); + public static readonly MongoId IRONSIGHT_AR15_LEAPERS_UTG_LOW_PROFILE_A2_FRONT_SIGHT = new MongoId("55d4af3a4bdc2d972f8b456f"); + public static readonly MongoId IRONSIGHT_AR15_REAR_SIGHT_CARRY_HANDLE = new MongoId("5ae30bad5acfc400185c2dc4"); + public static readonly MongoId IRONSIGHT_AS_VAL_REAR_SIGHT = new MongoId("57c44e7b2459772d28133248"); + public static readonly MongoId IRONSIGHT_ASH12_FOLDING_FRONT_SIGHT = new MongoId("5caf16a2ae92152ac412efbc"); + public static readonly MongoId IRONSIGHT_ASH12_REAR_SIGHT_CARRY_HANDLE = new MongoId("5caf1691ae92152ac412efb9"); + public static readonly MongoId IRONSIGHT_BENELLI_M3_GHOST_RING_REAR_SIGHT = new MongoId("625ebcef6f53af4aa66b44dc"); + public static readonly MongoId IRONSIGHT_CHAOS_HK_STYLE_FRONT_SIGHT = new MongoId("674fe8dd362ea1f88b0e2792"); + public static readonly MongoId IRONSIGHT_CHAOS_HK_STYLE_REAR_SIGHT = new MongoId("674fe8cf4472d471fb0f07df"); + public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_FRONT_SIGHT = new MongoId("619f4d304c58466fe1228437"); + public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_REAR_SIGHT = new MongoId("619f4cee4c58466fe1228435"); + public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_RED_FIBER_OPTIC_FRONT_SIGHT = new MongoId("619f52454c58466fe122843b"); + public static readonly MongoId IRONSIGHT_CHIAPPA_RHINO_RED_FIBER_OPTIC_REAR_SIGHT = new MongoId("619f4f8c4c58466fe1228439"); + public static readonly MongoId IRONSIGHT_DESERT_EAGLE_FRONT_SIGHT = new MongoId("668fe5ec4315934ba10c6f96"); + public static readonly MongoId IRONSIGHT_DESERT_EAGLE_REAR_SIGHT = new MongoId("668fe5e1800f0244f9036e46"); + public static readonly MongoId IRONSIGHT_FN_FIVESEVEN_MK2_FRONT_SIGHT = new MongoId("5d3eb536a4b9363b1f22f8e2"); + public static readonly MongoId IRONSIGHT_FN_FIVESEVEN_MK2_REAR_SIGHT = new MongoId("5d3eb4aba4b93650d64e497d"); + public static readonly MongoId IRONSIGHT_FN_SCAR_FLIPUP_FRONT_SIGHT = new MongoId("61816fcad92c473c770215cc"); + public static readonly MongoId IRONSIGHT_FN_SCAR_FLIPUP_REAR_SIGHT = new MongoId("61817865d3a39d50044c13a4"); + public static readonly MongoId IRONSIGHT_GLOCK_19X_FRONT_SIGHT = new MongoId("630765777d50ff5e8a1ea718"); + public static readonly MongoId IRONSIGHT_GLOCK_19X_REAR_SIGHT = new MongoId("630765cb962d0247b029dc45"); + public static readonly MongoId IRONSIGHT_GLOCK_DEAD_RINGER_SNAKE_EYE_FRONT_SIGHT = new MongoId("5a7d90eb159bd400165484f1"); + public static readonly MongoId IRONSIGHT_GLOCK_DEAD_RINGER_SNAKE_EYE_REAR_SIGHT = new MongoId("5a7d9122159bd4001438dbf4"); + public static readonly MongoId IRONSIGHT_GLOCK_FRONT_SIGHT = new MongoId("5a6f58f68dc32e000a311390"); + public static readonly MongoId IRONSIGHT_GLOCK_REAR_SIGHT = new MongoId("5a6f5d528dc32e00094b97d9"); + public static readonly MongoId IRONSIGHT_GLOCK_TRUGLO_TFX_FRONT_SIGHT = new MongoId("5a7d9104159bd400134c8c21"); + public static readonly MongoId IRONSIGHT_GLOCK_TRUGLO_TFX_REAR_SIGHT = new MongoId("5a7d912f159bd400165484f3"); + public static readonly MongoId IRONSIGHT_GLOCK_ZEV_TECH_FRONT_SIGHT = new MongoId("5a71e0048dc32e000c52ecc8"); + public static readonly MongoId IRONSIGHT_GLOCK_ZEV_TECH_REAR_SIGHT = new MongoId("5a71e0fb8dc32e00094b97f2"); + public static readonly MongoId IRONSIGHT_HK_416A5_FLIPUP_REAR_SIGHT = new MongoId("5bb20e49d4351e3bac1212de"); + public static readonly MongoId IRONSIGHT_HK_G36_FRONT_SIGHT = new MongoId("623166e08c43374ca1567195"); + public static readonly MongoId IRONSIGHT_HK_G36_REAR_SIGHT = new MongoId("6231670f0b8aa5472d060095"); + public static readonly MongoId IRONSIGHT_HK_MP5_DRUM_REAR_SIGHT = new MongoId("5926d2be86f774134d668e4e"); + public static readonly MongoId IRONSIGHT_HK_MP7_FLIPUP_FRONT_SIGHT = new MongoId("5ba26b01d4351e0085325a51"); + public static readonly MongoId IRONSIGHT_HK_MP7_FLIPUP_REAR_SIGHT = new MongoId("5ba26b17d4351e00367f9bdd"); + public static readonly MongoId IRONSIGHT_HK_USP_FRONT_SIGHT = new MongoId("6194f35c18a3974e5e7421e6"); + public static readonly MongoId IRONSIGHT_HK_USP_REAR_SIGHT = new MongoId("6194f2912d2c397d6600348d"); + public static readonly MongoId IRONSIGHT_HK_USP_RED_DOT_SIGHT_MOUNT = new MongoId("61963a852d2c397d660036ad"); + public static readonly MongoId IRONSIGHT_HK_USP_TACTICAL_FRONT_SIGHT = new MongoId("6194f3286db0f2477964e67d"); + public static readonly MongoId IRONSIGHT_HK_USP_TACTICAL_REAR_SIGHT = new MongoId("6194f2df645b5d229654ad77"); + public static readonly MongoId IRONSIGHT_KAC_FOLDING_FRONT_SIGHT = new MongoId("5c17804b2e2216152006c02f"); + public static readonly MongoId IRONSIGHT_KAC_FOLDING_MICRO_FRONT_SIGHT = new MongoId("5dfa3d950dee1b22f862eae0"); + public static readonly MongoId IRONSIGHT_KAC_FOLDING_MICRO_REAR_SIGHT = new MongoId("5dfa3d7ac41b2312ea33362a"); + public static readonly MongoId IRONSIGHT_KAC_FOLDING_REAR_SIGHT = new MongoId("5c1780312e221602b66cc189"); + public static readonly MongoId IRONSIGHT_KRISS_DEFIANCE_LOW_PROFILE_FLIPUP_FRONT_SIGHT = new MongoId("5fb6567747ce63734e3fa1dc"); + public static readonly MongoId IRONSIGHT_KRISS_DEFIANCE_LOW_PROFILE_FLIPUP_REAR_SIGHT = new MongoId("5fb6564947ce63734e3fa1da"); + public static readonly MongoId IRONSIGHT_M14_SA_ENLARGED_MILITARY_APERTURE_REAR_SIGHT = new MongoId("5abcbb20d8ce87001773e258"); + public static readonly MongoId IRONSIGHT_M1911A1_FRONT_SIGHT = new MongoId("5e81ee213397a21db957f6a6"); + public static readonly MongoId IRONSIGHT_M1911A1_REAR_SIGHT = new MongoId("5e81ee4dcb2b95385c177582"); + public static readonly MongoId IRONSIGHT_M1A_SA_NATIONAL_MATCH_062_BLADE_FRONT_SIGHT = new MongoId("5addba3e5acfc4001669f0ab"); + public static readonly MongoId IRONSIGHT_M1A_SA_XS_POST_125_BLADE_FRONT_SIGHT = new MongoId("5aafa49ae5b5b00015042a58"); + public static readonly MongoId IRONSIGHT_M45A1_NOVAK_LOMOUNT_FRONT_SIGHT = new MongoId("5f3e78a7fbf956000b716b8e"); + public static readonly MongoId IRONSIGHT_M45A1_NOVAK_LOMOUNT_REAR_SIGHT = new MongoId("5f3e7897ddc4f03b010e204a"); + public static readonly MongoId IRONSIGHT_M60_REAR_SIGHT = new MongoId("6601265f98a610c1aa0ea637"); + public static readonly MongoId IRONSIGHT_M60E4_FRONT_SIGHT = new MongoId("6601268bc752a02bbe05e686"); + public static readonly MongoId IRONSIGHT_M60E6_FRONT_SIGHT_RAIL = new MongoId("660126a98f2b23af220b27e7"); + public static readonly MongoId IRONSIGHT_M9A3_FRONT_SIGHT = new MongoId("5cadd919ae921500126a77f3"); + public static readonly MongoId IRONSIGHT_M9A3_REAR_SIGHT = new MongoId("5cadd940ae9215051e1c2316"); + public static readonly MongoId IRONSIGHT_M9A3_SIGHT_MOUNT_REAR_SIGHT_RAIL = new MongoId("5cadd954ae921500103bb3c2"); + public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_FRONT_SIGHT = new MongoId("5bc09a30d4351e00367fb7c8"); + public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_FRONT_SIGHT_FDE = new MongoId("5c18b90d2e2216152142466b"); + public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_REAR_SIGHT = new MongoId("5bc09a18d4351e003562b68e"); + public static readonly MongoId IRONSIGHT_MAGPUL_MBUS_GEN2_FLIPUP_REAR_SIGHT_FDE = new MongoId("5c18b9192e2216398b5a8104"); + public static readonly MongoId IRONSIGHT_MCX_FLIPUP_FRONT_SIGHT = new MongoId("5fc0fa362770a0045c59c677"); + public static readonly MongoId IRONSIGHT_MCX_FLIPUP_REAR_SIGHT = new MongoId("5fc0fa957283c4046c58147e"); + public static readonly MongoId IRONSIGHT_MOSIN_RIFLE_CARBINE_REAR_SIGHT = new MongoId("5bfd4c980db834001b73449d"); + public static readonly MongoId IRONSIGHT_MOSIN_RIFLE_FRONT_SIGHT = new MongoId("5ae099875acfc4001714e593"); + public static readonly MongoId IRONSIGHT_MOSIN_RIFLE_REAR_SIGHT = new MongoId("5ae099925acfc4001a5fc7b3"); + public static readonly MongoId IRONSIGHT_MOSSBERG_590_GHOST_RING_FRONT_SIGHT = new MongoId("5e8708d4ae379e67d22e0102"); + public static readonly MongoId IRONSIGHT_MOSSBERG_590_GHOST_RING_REAR_SIGHT = new MongoId("5e87114fe2db31558c75a120"); + public static readonly MongoId IRONSIGHT_MP9_REAR_SIGHT = new MongoId("5de8fb539f98ac2bc659513a"); + public static readonly MongoId IRONSIGHT_MPX_FLIPUP_FRONT_SIGHT = new MongoId("5894a73486f77426d259076c"); + public static readonly MongoId IRONSIGHT_MPX_FLIPUP_REAR_SIGHT = new MongoId("5894a81786f77427140b8347"); + public static readonly MongoId IRONSIGHT_P226_FRONT_SIGHT = new MongoId("56d5a661d2720bd8418b456b"); + public static readonly MongoId IRONSIGHT_P226_MEPROLIGHT_TRUDOT_NIGHT_FRONT_SIGHT = new MongoId("5c07b36c0db834002a1259e9"); + public static readonly MongoId IRONSIGHT_P226_MEPROLIGHT_TRUDOT_NIGHT_REAR_SIGHT = new MongoId("5c07b3850db834002330045b"); + public static readonly MongoId IRONSIGHT_P226_REAR_SIGHT = new MongoId("56d5a77ed2720b90418b4568"); + public static readonly MongoId IRONSIGHT_P226_SIGHT_MOUNT_220239_REAR_SIGHT_BEARING = new MongoId("56ea7293d2720b8d4b8b45ba"); + public static readonly MongoId IRONSIGHT_PK_REAR_SIGHT = new MongoId("6492fb8253acae0af00a29b6"); + public static readonly MongoId IRONSIGHT_PL15_EXTENDED_FRONT_SIGHT = new MongoId("60228a850ddce744014caf69"); + public static readonly MongoId IRONSIGHT_PL15_EXTENDED_REAR_SIGHT = new MongoId("602293f023506e50807090cb"); + public static readonly MongoId IRONSIGHT_PL15_FRONT_SIGHT = new MongoId("60228a76d62c9b14ed777a66"); + public static readonly MongoId IRONSIGHT_PL15_REAR_SIGHT = new MongoId("60229948cacb6b0506369e27"); + public static readonly MongoId IRONSIGHT_PM_REAR_SIGHT = new MongoId("63c6adcfb4ba094317063742"); + public static readonly MongoId IRONSIGHT_PP1901_VITYAZ_REAR_SIGHT = new MongoId("599860e986f7743bb57573a6"); + public static readonly MongoId IRONSIGHT_RPD_REAR_SIGHT = new MongoId("6513f153e63f29908d0ffaba"); + public static readonly MongoId IRONSIGHT_RPK16_REAR_SIGHT = new MongoId("5bf3f59f0db834001a6fa060"); + public static readonly MongoId IRONSIGHT_RPK16_REAR_SIGHT_BASE = new MongoId("5beec9450db83400970084fd"); + public static readonly MongoId IRONSIGHT_SA58_HOLLAND_TYPE_REAR_SIGHT = new MongoId("5b0bc22d5acfc47a8607f085"); + public static readonly MongoId IRONSIGHT_SKS_REAR_SIGHT = new MongoId("574db213245977459a2f3f5d"); + public static readonly MongoId IRONSIGHT_SOK12_CSS_REAR_SIGHT_RAIL_MOUNT = new MongoId("58272b842459774abc128d50"); + public static readonly MongoId IRONSIGHT_SOK12_REAR_SIGHT = new MongoId("57a9b9ce2459770ee926038d"); + public static readonly MongoId IRONSIGHT_SV98_REAR_SIGHT = new MongoId("56083e1b4bdc2dc8488b4572"); + public static readonly MongoId IRONSIGHT_SVDS_FRONT_SIGHT = new MongoId("5c471ba12e221602b3137d76"); + public static readonly MongoId IRONSIGHT_SVDS_REAR_SIGHT = new MongoId("5c471b7e2e2216152006e46c"); + public static readonly MongoId IRONSIGHT_SVT40_FRONT_SIGHT = new MongoId("64119d672c6d6f921a0929fb"); + public static readonly MongoId IRONSIGHT_SVT40_REAR_SIGHT = new MongoId("64119d90dcf48d656f0aa275"); + public static readonly MongoId IRONSIGHT_TRIJICON_ACOG_BACKUP_REAR_SIGHT = new MongoId("5c05295e0db834001a66acbb"); + public static readonly MongoId IRONSIGHT_VPO101_REAR_SIGHT = new MongoId("5c503b1c2e221602b21d6e9d"); + public static readonly MongoId IRONSIGHT_VPO209_REAR_SIGHT = new MongoId("59e8977386f77415a553c453"); + public static readonly MongoId IRONSIGHT_VSS_REAR_SIGHT = new MongoId("57838e1b2459774a256959b1"); public static readonly MongoId KEY_01 = new MongoId("679baa2c61f588ae2b062a24"); public static readonly MongoId KEY_02 = new MongoId("679baa4f59b8961f370dd683"); public static readonly MongoId KEY_03 = new MongoId("679baa5a59b8961f370dd685"); @@ -6101,68 +2573,32 @@ public static class ItemTpl public static readonly MongoId KEY_2 = new MongoId("5751916f24597720a27126df"); public static readonly MongoId KEY_3 = new MongoId("57518f7724597720a31c09ab"); public static readonly MongoId KEY_5 = new MongoId("57518fd424597720c85dbaaa"); - public static readonly MongoId KEY_ABANDONED_FACTORY_MARKED = new MongoId( - "63a3a93f8a56922e82001f5d" - ); - public static readonly MongoId KEY_APARTMENT_LOCKED_ROOM_SAFE = new MongoId( - "63a39ddda3a2b32b5f6e007a" - ); + public static readonly MongoId KEY_ABANDONED_FACTORY_MARKED = new MongoId("63a3a93f8a56922e82001f5d"); + public static readonly MongoId KEY_APARTMENT_LOCKED_ROOM_SAFE = new MongoId("63a39ddda3a2b32b5f6e007a"); public static readonly MongoId KEY_ARCHIVE_ROOM = new MongoId("63a39e49cd6db0635c1975fc"); public static readonly MongoId KEY_ARIADNE_SYMBOL = new MongoId("67e183377c6c2011970f3149"); - public static readonly MongoId KEY_ASPECT_COMPANY_OFFICE = new MongoId( - "64ce572331dd890873175115" - ); + public static readonly MongoId KEY_ASPECT_COMPANY_OFFICE = new MongoId("64ce572331dd890873175115"); public static readonly MongoId KEY_BACKUP_HIDEOUT = new MongoId("6398fd8ad3de3849057f5128"); public static readonly MongoId KEY_BBQS43_GAS_TORCH = new MongoId("67ab3d4b83869afd170fdd3f"); - public static readonly MongoId KEY_BELUGA_RESTAURANT_DIRECTOR = new MongoId( - "64ccc1fe088064307e14a6f7" - ); - public static readonly MongoId KEY_CAR_DEALERSHIP_CLOSED_SECTION = new MongoId( - "63a397d3af870e651d58e65b" - ); - public static readonly MongoId KEY_CAR_DEALERSHIP_DIRECTORS_OFFICE_ROOM = new MongoId( - "63a399193901f439517cafb6" - ); - public static readonly MongoId KEY_CARGO_CONTAINER_MESH_DOOR = new MongoId( - "63a39fdf1e21260da44a0256" - ); - public static readonly MongoId KEY_CHEKANNAYA_15_APARTMENT = new MongoId( - "63a39fc0af870e651d58e6ae" - ); + public static readonly MongoId KEY_BELUGA_RESTAURANT_DIRECTOR = new MongoId("64ccc1fe088064307e14a6f7"); + public static readonly MongoId KEY_CAR_DEALERSHIP_CLOSED_SECTION = new MongoId("63a397d3af870e651d58e65b"); + public static readonly MongoId KEY_CAR_DEALERSHIP_DIRECTORS_OFFICE_ROOM = new MongoId("63a399193901f439517cafb6"); + public static readonly MongoId KEY_CARGO_CONTAINER_MESH_DOOR = new MongoId("63a39fdf1e21260da44a0256"); + public static readonly MongoId KEY_CHEKANNAYA_15_APARTMENT = new MongoId("63a39fc0af870e651d58e6ae"); public static readonly MongoId KEY_CITY_KEY_26 = new MongoId("63a71f1a0aa9fb29da61c537"); public static readonly MongoId KEY_CITY_KEY_X = new MongoId("63a39e0f64283b5e9c56b282"); public static readonly MongoId KEY_COLD_STORAGE_ROOM = new MongoId("61a6446f4b5f8b70f451b166"); - public static readonly MongoId KEY_COMPANY_DIRECTORS_ROOM = new MongoId( - "6761a6f90575f25e020816a4" - ); - public static readonly MongoId KEY_CONCORDIA_APARTMENT_34_ROOM = new MongoId( - "64ccc1d4a0f13c24561edf27" - ); - public static readonly MongoId KEY_CONCORDIA_APARTMENT_63_ROOM = new MongoId( - "64ccc1f4ff54fb38131acf27" - ); - public static readonly MongoId KEY_CONCORDIA_APARTMENT_64 = new MongoId( - "63a71e922b25f7513905ca20" - ); - public static readonly MongoId KEY_CONCORDIA_APARTMENT_64_OFFICE_ROOM = new MongoId( - "63a71e86b7f4570d3a293169" - ); - public static readonly MongoId KEY_CONCORDIA_APARTMENT_8_HOME_CINEMA = new MongoId( - "64ccc1ec1779ad6ba200a137" - ); - public static readonly MongoId KEY_CONCORDIA_APARTMENT_8_ROOM = new MongoId( - "63a71e781031ac76fe773c7d" - ); - public static readonly MongoId KEY_CONCORDIA_SECURITY_ROOM = new MongoId( - "63a39c7964283b5e9c56b280" - ); + public static readonly MongoId KEY_COMPANY_DIRECTORS_ROOM = new MongoId("6761a6f90575f25e020816a4"); + public static readonly MongoId KEY_CONCORDIA_APARTMENT_34_ROOM = new MongoId("64ccc1d4a0f13c24561edf27"); + public static readonly MongoId KEY_CONCORDIA_APARTMENT_63_ROOM = new MongoId("64ccc1f4ff54fb38131acf27"); + public static readonly MongoId KEY_CONCORDIA_APARTMENT_64 = new MongoId("63a71e922b25f7513905ca20"); + public static readonly MongoId KEY_CONCORDIA_APARTMENT_64_OFFICE_ROOM = new MongoId("63a71e86b7f4570d3a293169"); + public static readonly MongoId KEY_CONCORDIA_APARTMENT_8_HOME_CINEMA = new MongoId("64ccc1ec1779ad6ba200a137"); + public static readonly MongoId KEY_CONCORDIA_APARTMENT_8_ROOM = new MongoId("63a71e781031ac76fe773c7d"); + public static readonly MongoId KEY_CONCORDIA_SECURITY_ROOM = new MongoId("63a39c7964283b5e9c56b280"); public static readonly MongoId KEY_CONFERENCE_ROOM = new MongoId("62987cb98081af308d7558c8"); - public static readonly MongoId KEY_CONSTRUCTION_SITE_BUNKHOUSE = new MongoId( - "63a39cb1c9b3aa4b61683ee2" - ); - public static readonly MongoId KEY_CONVENIENCE_STORE_STORAGE_ROOM = new MongoId( - "61a64428a8c6aa1b795f0ba1" - ); + public static readonly MongoId KEY_CONSTRUCTION_SITE_BUNKHOUSE = new MongoId("63a39cb1c9b3aa4b61683ee2"); + public static readonly MongoId KEY_CONVENIENCE_STORE_STORAGE_ROOM = new MongoId("61a64428a8c6aa1b795f0ba1"); public static readonly MongoId KEY_CORPSE_ROOM = new MongoId("679bab714e9ca6b3d80586b4"); public static readonly MongoId KEY_COTTAGE_BACK_DOOR = new MongoId("5a0eb6ac86f7743124037a28"); public static readonly MongoId KEY_COTTAGE_SAFE = new MongoId("5a0f068686f7745b0d4ea242"); @@ -6184,239 +2620,101 @@ public static class ItemTpl public static readonly MongoId KEY_DORM_ROOM_303 = new MongoId("593aa4be86f77457f56379f8"); public static readonly MongoId KEY_DORM_ROOM_306 = new MongoId("5780cda02459777b272ede61"); public static readonly MongoId KEY_DORM_ROOM_308 = new MongoId("5780cf722459777a5108b9a1"); - public static readonly MongoId KEY_DORM_ROOM_314_MARKED = new MongoId( - "5780cf7f2459777de4559322" - ); + public static readonly MongoId KEY_DORM_ROOM_314_MARKED = new MongoId("5780cf7f2459777de4559322"); public static readonly MongoId KEY_DORM_ROOM_315 = new MongoId("5780cf692459777de4559321"); - public static readonly MongoId KEY_EMERCOM_MEDICAL_UNIT = new MongoId( - "5ad5db3786f7743568421cce" - ); - public static readonly MongoId KEY_FACTORY_EMERGENCY_EXIT = new MongoId( - "5448ba0b4bdc2d02308b456c" - ); - public static readonly MongoId KEY_FINANCIAL_INSTITUTION_OFFICE = new MongoId( - "63a39667c9b3aa4b61683e98" - ); - public static readonly MongoId KEY_FINANCIAL_INSTITUTION_SMALL_OFFICE = new MongoId( - "63a71ed21031ac76fe773c7f" - ); + public static readonly MongoId KEY_EMERCOM_MEDICAL_UNIT = new MongoId("5ad5db3786f7743568421cce"); + public static readonly MongoId KEY_FACTORY_EMERGENCY_EXIT = new MongoId("5448ba0b4bdc2d02308b456c"); + public static readonly MongoId KEY_FINANCIAL_INSTITUTION_OFFICE = new MongoId("63a39667c9b3aa4b61683e98"); + public static readonly MongoId KEY_FINANCIAL_INSTITUTION_SMALL_OFFICE = new MongoId("63a71ed21031ac76fe773c7f"); public static readonly MongoId KEY_FOLDING_AUTOMOBILE = new MongoId("590de4a286f77423d9312a32"); public static readonly MongoId KEY_FOLDING_CAR = new MongoId("59136f6f86f774447a1ed173"); public static readonly MongoId KEY_GAS_STATION_OFFICE = new MongoId("5780d0652459777df90dcb74"); public static readonly MongoId KEY_GAS_STATION_SAFE = new MongoId("5a0f045e86f7745b0f0d0e42"); - public static readonly MongoId KEY_GAS_STATION_STORAGE_ROOM = new MongoId( - "5913877a86f774432f15d444" - ); - public static readonly MongoId KEY_GOSHAN_CASH_REGISTER = new MongoId( - "5ad7247386f7747487619dc3" - ); + public static readonly MongoId KEY_GAS_STATION_STORAGE_ROOM = new MongoId("5913877a86f774432f15d444"); + public static readonly MongoId KEY_GOSHAN_CASH_REGISTER = new MongoId("5ad7247386f7747487619dc3"); public static readonly MongoId KEY_GRUMPYS_HIDEOUT = new MongoId("664d3dd590294949fe2d81b7"); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_OFFICE_ROOM_107 = new MongoId( - "5a0ea64786f7741707720468" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_OFFICE_ROOM_108 = new MongoId( - "5a0ea69f86f7741cd5406619" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_205 = new MongoId( - "5a144bdb86f7741d374bbde0" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_206 = new MongoId( - "5a0ee4b586f7743698200d22" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_209 = new MongoId( - "5a0ee62286f774369454a7ac" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_213 = new MongoId( - "5a0ee72c86f77436955d3435" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_216 = new MongoId( - "5a0ee76686f7743698200d5c" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_222 = new MongoId( - "5a13f24186f77410e57c5626" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_226 = new MongoId( - "5a13f35286f77413ef1436b0" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_306 = new MongoId( - "5a145d4786f7744cbb6f4a12" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_308 = new MongoId( - "5a145d7b86f7744cbb6f4a13" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_310 = new MongoId( - "5a0eec9686f77402ac5c39f2" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_313 = new MongoId( - "5a0eecf686f7740350630097" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_314 = new MongoId( - "5a0eed4386f77405112912aa" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_316 = new MongoId( - "5a145ebb86f77458f1796f05" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_322 = new MongoId( - "5a0eedb386f77403506300be" - ); - public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_328 = new MongoId( - "5a0eee1486f77402aa773226" - ); - public static readonly MongoId KEY_HEALTH_RESORT_MANAGEMENT_OFFICE_SAFE = new MongoId( - "5a0f08bc86f77478f33b84c2" - ); - public static readonly MongoId KEY_HEALTH_RESORT_MANAGEMENT_WAREHOUSE_SAFE = new MongoId( - "5a0f0f5886f7741c4e32a472" - ); - public static readonly MongoId KEY_HEALTH_RESORT_OFFICE_KEY_WITH_A_BLUE_TAPE = new MongoId( - "5eff09cd30a7dc22fd1ddfed" - ); - public static readonly MongoId KEY_HEALTH_RESORT_UNIVERSAL_UTILITY_ROOM = new MongoId( - "5a0ea79b86f7741d4a35298e" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_OFFICE_ROOM_104 = new MongoId( - "5a0dc45586f7742f6b0b73e3" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_OFFICE_ROOM_112 = new MongoId( - "5a0dc95c86f77452440fc675" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_203 = new MongoId( - "5a144dfd86f77445cb5a0982" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_205 = new MongoId( - "5a0ec6d286f7742c0b518fb5" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_207 = new MongoId( - "5a0ec70e86f7742c0b518fba" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_216 = new MongoId( - "5a0ee30786f774023b6ee08f" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_218 = new MongoId( - "5a13eebd86f7746fd639aa93" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_219 = new MongoId( - "5a13ef0686f7746e5a411744" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_220 = new MongoId( - "5a0ee34586f774023b6ee092" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_221 = new MongoId( - "5a0ee37f86f774023657a86f" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_222 = new MongoId( - "5a1452ee86f7746f33111763" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_301 = new MongoId( - "5a13ef7e86f7741290491063" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_303 = new MongoId( - "5a0eeb1a86f774688b70aa5c" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_306 = new MongoId( - "5a13f46386f7741dd7384b04" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_309 = new MongoId( - "5a0eeb8e86f77461257ed71a" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_321_SAFE = new MongoId( - "5a0eff2986f7741fd654e684" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_323 = new MongoId( - "5a13ee1986f774794d4c14cd" - ); - public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_325 = new MongoId( - "5a0eebed86f77461230ddb3d" - ); - public static readonly MongoId KEY_HEP_STATION_STORAGE_ROOM = new MongoId( - "5d8e15b686f774445103b190" - ); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_OFFICE_ROOM_107 = new MongoId("5a0ea64786f7741707720468"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_OFFICE_ROOM_108 = new MongoId("5a0ea69f86f7741cd5406619"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_205 = new MongoId("5a144bdb86f7741d374bbde0"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_206 = new MongoId("5a0ee4b586f7743698200d22"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_209 = new MongoId("5a0ee62286f774369454a7ac"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_213 = new MongoId("5a0ee72c86f77436955d3435"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_216 = new MongoId("5a0ee76686f7743698200d5c"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_222 = new MongoId("5a13f24186f77410e57c5626"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_226 = new MongoId("5a13f35286f77413ef1436b0"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_306 = new MongoId("5a145d4786f7744cbb6f4a12"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_308 = new MongoId("5a145d7b86f7744cbb6f4a13"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_310 = new MongoId("5a0eec9686f77402ac5c39f2"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_313 = new MongoId("5a0eecf686f7740350630097"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_314 = new MongoId("5a0eed4386f77405112912aa"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_316 = new MongoId("5a145ebb86f77458f1796f05"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_322 = new MongoId("5a0eedb386f77403506300be"); + public static readonly MongoId KEY_HEALTH_RESORT_EAST_WING_ROOM_328 = new MongoId("5a0eee1486f77402aa773226"); + public static readonly MongoId KEY_HEALTH_RESORT_MANAGEMENT_OFFICE_SAFE = new MongoId("5a0f08bc86f77478f33b84c2"); + public static readonly MongoId KEY_HEALTH_RESORT_MANAGEMENT_WAREHOUSE_SAFE = new MongoId("5a0f0f5886f7741c4e32a472"); + public static readonly MongoId KEY_HEALTH_RESORT_OFFICE_KEY_WITH_A_BLUE_TAPE = new MongoId("5eff09cd30a7dc22fd1ddfed"); + public static readonly MongoId KEY_HEALTH_RESORT_UNIVERSAL_UTILITY_ROOM = new MongoId("5a0ea79b86f7741d4a35298e"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_OFFICE_ROOM_104 = new MongoId("5a0dc45586f7742f6b0b73e3"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_OFFICE_ROOM_112 = new MongoId("5a0dc95c86f77452440fc675"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_203 = new MongoId("5a144dfd86f77445cb5a0982"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_205 = new MongoId("5a0ec6d286f7742c0b518fb5"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_207 = new MongoId("5a0ec70e86f7742c0b518fba"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_216 = new MongoId("5a0ee30786f774023b6ee08f"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_218 = new MongoId("5a13eebd86f7746fd639aa93"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_219 = new MongoId("5a13ef0686f7746e5a411744"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_220 = new MongoId("5a0ee34586f774023b6ee092"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_221 = new MongoId("5a0ee37f86f774023657a86f"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_222 = new MongoId("5a1452ee86f7746f33111763"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_301 = new MongoId("5a13ef7e86f7741290491063"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_303 = new MongoId("5a0eeb1a86f774688b70aa5c"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_306 = new MongoId("5a13f46386f7741dd7384b04"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_309 = new MongoId("5a0eeb8e86f77461257ed71a"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_321_SAFE = new MongoId("5a0eff2986f7741fd654e684"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_323 = new MongoId("5a13ee1986f774794d4c14cd"); + public static readonly MongoId KEY_HEALTH_RESORT_WEST_WING_ROOM_325 = new MongoId("5a0eebed86f77461230ddb3d"); + public static readonly MongoId KEY_HEP_STATION_STORAGE_ROOM = new MongoId("5d8e15b686f774445103b190"); public static readonly MongoId KEY_HILLSIDE_HOUSE = new MongoId("61a6444b8c141d68246e2d2f"); - public static readonly MongoId KEY_HORSE_RESTAURANT_TOILET = new MongoId( - "658199a0490414548c0fa83b" - ); - public static readonly MongoId KEY_HOUSING_OFFICE_FIRST_FLOOR_SAFE = new MongoId( - "63a39e6acd6db0635c1975fe" - ); - public static readonly MongoId KEY_HOUSING_OFFICE_SECOND_FLOOR_SAFE = new MongoId( - "63a39e5b234195315d4020bf" - ); + public static readonly MongoId KEY_HORSE_RESTAURANT_TOILET = new MongoId("658199a0490414548c0fa83b"); + public static readonly MongoId KEY_HOUSING_OFFICE_FIRST_FLOOR_SAFE = new MongoId("63a39e6acd6db0635c1975fe"); + public static readonly MongoId KEY_HOUSING_OFFICE_SECOND_FLOOR_SAFE = new MongoId("63a39e5b234195315d4020bf"); public static readonly MongoId KEY_IDEA_CASH_REGISTER = new MongoId("5ad7242b86f7740a6a3abd43"); public static readonly MongoId KEY_IRON_GATE = new MongoId("63a39f6e64283b5e9c56b289"); public static readonly MongoId KEY_ITY = new MongoId("63a71f3b0aa9fb29da61c539"); - public static readonly MongoId KEY_KIBA_ARMS_INNER_GRATE_DOOR = new MongoId( - "5addaffe86f77470b455f900" - ); - public static readonly MongoId KEY_KIBA_ARMS_OUTER_DOOR = new MongoId( - "5ad5d7d286f77450166e0a89" - ); - public static readonly MongoId KEY_KNOSSOS_LLC_FACILITY = new MongoId( - "679b9716597ba2ed120c3d3f" - ); + public static readonly MongoId KEY_KIBA_ARMS_INNER_GRATE_DOOR = new MongoId("5addaffe86f77470b455f900"); + public static readonly MongoId KEY_KIBA_ARMS_OUTER_DOOR = new MongoId("5ad5d7d286f77450166e0a89"); + public static readonly MongoId KEY_KNOSSOS_LLC_FACILITY = new MongoId("679b9716597ba2ed120c3d3f"); public static readonly MongoId KEY_LABYRINTH = new MongoId("679bac1d61f588ae2b062a26"); public static readonly MongoId KEY_LEONS_HIDEOUT = new MongoId("664d3de85f2355673b09aed5"); public static readonly MongoId KEY_MACHINERY = new MongoId("5937ee6486f77408994ba448"); public static readonly MongoId KEY_MACHINERY_TECH = new MongoId("590de52486f774226a0c24c2"); public static readonly MongoId KEY_MERIN_CAR_TRUNK = new MongoId("61aa5b518f5e7a39b41416e2"); - public static readonly MongoId KEY_MILITARY_CHECKPOINT = new MongoId( - "5913915886f774123603c392" - ); + public static readonly MongoId KEY_MILITARY_CHECKPOINT = new MongoId("5913915886f774123603c392"); public static readonly MongoId KEY_MISSAM_FORKLIFT = new MongoId("62a09ec84f842e1bd12da3f2"); - public static readonly MongoId KEY_MVD_ACADEMY_ENTRANCE_HALL_GUARD_ROOM = new MongoId( - "6582dc4b6ba9e979af6b79f4" - ); - public static readonly MongoId KEY_MYSTERIOUS_ROOM_MARKED = new MongoId( - "64ccc25f95763a1ae376e447" - ); - public static readonly MongoId KEY_NECRUSPHARM_PHARMACY = new MongoId( - "5ad5d64486f774079b080af8" - ); + public static readonly MongoId KEY_MVD_ACADEMY_ENTRANCE_HALL_GUARD_ROOM = new MongoId("6582dc4b6ba9e979af6b79f4"); + public static readonly MongoId KEY_MYSTERIOUS_ROOM_MARKED = new MongoId("64ccc25f95763a1ae376e447"); + public static readonly MongoId KEY_NECRUSPHARM_PHARMACY = new MongoId("5ad5d64486f774079b080af8"); public static readonly MongoId KEY_NEGOTIATION_ROOM = new MongoId("6582dbe43a2e5248357dbe9a"); public static readonly MongoId KEY_OBSERVATION_ROOM = new MongoId("679baace4e9ca6b3d80586b2"); public static readonly MongoId KEY_OLD_HOUSE_ROOM = new MongoId("6761a6ccd9bbb27ad703c48a"); - public static readonly MongoId KEY_OLI_ADMINISTRATION_OFFICE = new MongoId( - "5ad5ccd186f774446d5706e9" - ); + public static readonly MongoId KEY_OLI_ADMINISTRATION_OFFICE = new MongoId("5ad5ccd186f774446d5706e9"); public static readonly MongoId KEY_OLI_CASH_REGISTER = new MongoId("5ad7217186f7746744498875"); - public static readonly MongoId KEY_OLI_LOGISTICS_DEPARTMENT_OFFICE = new MongoId( - "5ad5cfbd86f7742c825d6104" - ); - public static readonly MongoId KEY_OLI_OUTLET_UTILITY_ROOM = new MongoId( - "5ad5d20586f77449be26d877" - ); + public static readonly MongoId KEY_OLI_LOGISTICS_DEPARTMENT_OFFICE = new MongoId("5ad5cfbd86f7742c825d6104"); + public static readonly MongoId KEY_OLI_OUTLET_UTILITY_ROOM = new MongoId("5ad5d20586f77449be26d877"); public static readonly MongoId KEY_OPERATING_ROOM = new MongoId("62987da96188c076bc0d8c51"); public static readonly MongoId KEY_PE_TEACHERS_OFFICE = new MongoId("64ccc268c41e91416064ebc7"); - public static readonly MongoId KEY_PINEWOOD_HOTEL_ROOM_206 = new MongoId( - "63a39f18c2d53c2c6839c1d3" - ); - public static readonly MongoId KEY_PINEWOOD_HOTEL_ROOM_215 = new MongoId( - "63a39f08cd6db0635c197600" - ); + public static readonly MongoId KEY_PINEWOOD_HOTEL_ROOM_206 = new MongoId("63a39f18c2d53c2c6839c1d3"); + public static readonly MongoId KEY_PINEWOOD_HOTEL_ROOM_215 = new MongoId("63a39f08cd6db0635c197600"); public static readonly MongoId KEY_PISTOL_CASE = new MongoId("5671446a4bdc2d97058b4569"); public static readonly MongoId KEY_POLICE_TRUCK_CABIN = new MongoId("61aa5aed32a4743c3453d319"); public static readonly MongoId KEY_PORTABLE_BUNKHOUSE = new MongoId("5938144586f77473c2087145"); public static readonly MongoId KEY_PORTABLE_CABIN = new MongoId("5780d07a2459777de4559324"); - public static readonly MongoId KEY_POWER_SUBSTATION_UTILITY_CABIN = new MongoId( - "5ad5d49886f77455f9731921" - ); - public static readonly MongoId KEY_PRIMORSKY_4648_SKYBRIDGE = new MongoId( - "63a39e1d234195315d4020bd" - ); - public static readonly MongoId KEY_PRIMORSKY_48_APARTMENT = new MongoId( - "63a71eb5b7f4570d3a29316b" - ); - public static readonly MongoId KEY_PRIMORSKY_AVE_APARTMENT = new MongoId( - "6391fcf5744e45201147080f" - ); - public static readonly MongoId KEY_PUMPING_STATION_BACK_DOOR = new MongoId( - "593858c486f774253a24cb52" - ); - public static readonly MongoId KEY_PUMPING_STATION_FRONT_DOOR = new MongoId( - "57a349b2245977762b199ec7" - ); - public static readonly MongoId KEY_RADAR_STATION_COMMANDANT_ROOM = new MongoId( - "62987c658081af308d7558c6" - ); + public static readonly MongoId KEY_POWER_SUBSTATION_UTILITY_CABIN = new MongoId("5ad5d49886f77455f9731921"); + public static readonly MongoId KEY_PRIMORSKY_4648_SKYBRIDGE = new MongoId("63a39e1d234195315d4020bd"); + public static readonly MongoId KEY_PRIMORSKY_48_APARTMENT = new MongoId("63a71eb5b7f4570d3a29316b"); + public static readonly MongoId KEY_PRIMORSKY_AVE_APARTMENT = new MongoId("6391fcf5744e45201147080f"); + public static readonly MongoId KEY_PUMPING_STATION_BACK_DOOR = new MongoId("593858c486f774253a24cb52"); + public static readonly MongoId KEY_PUMPING_STATION_FRONT_DOOR = new MongoId("57a349b2245977762b199ec7"); + public static readonly MongoId KEY_RADAR_STATION_COMMANDANT_ROOM = new MongoId("62987c658081af308d7558c6"); public static readonly MongoId KEY_RBAK = new MongoId("5d80c78786f774403a401e3e"); public static readonly MongoId KEY_RBAM = new MongoId("5d80c88d86f77440556dbf07"); public static readonly MongoId KEY_RBAO = new MongoId("5d80c66d86f774405611c7d6"); @@ -6448,2628 +2746,997 @@ public static class ItemTpl public static readonly MongoId KEY_RBST = new MongoId("5d9f1fa686f774726974a992"); public static readonly MongoId KEY_RBTB = new MongoId("5d80c6fc86f774403a401e3c"); public static readonly MongoId KEY_RBVO_MARKED = new MongoId("5d80c62a86f7744036212b3f"); - public static readonly MongoId KEY_REAL_ESTATE_AGENCY_OFFICE_ROOM = new MongoId( - "6582dc5740562727a654ebb1" - ); + public static readonly MongoId KEY_REAL_ESTATE_AGENCY_OFFICE_ROOM = new MongoId("6582dc5740562727a654ebb1"); public static readonly MongoId KEY_RELAXATION_ROOM = new MongoId("6582dbf0b8d7830efc45016f"); public static readonly MongoId KEY_ROGUE_USEC_BARRACK = new MongoId("62a9cb937377a65d7b070cef"); public static readonly MongoId KEY_ROGUE_USEC_STASH = new MongoId("61a64492ba05ef10d62adcc1"); - public static readonly MongoId KEY_ROGUE_USEC_WORKSHOP = new MongoId( - "61aa81fcb225ac1ead7957c3" - ); + public static readonly MongoId KEY_ROGUE_USEC_WORKSHOP = new MongoId("61aa81fcb225ac1ead7957c3"); public static readonly MongoId KEY_RUSTED_BLOODY = new MongoId("64d4b23dc1b37504b41ac2b6"); - public static readonly MongoId KEY_SHARED_BEDROOM_MARKED = new MongoId( - "62987dfc402c7f69bf010923" - ); + public static readonly MongoId KEY_SHARED_BEDROOM_MARKED = new MongoId("62987dfc402c7f69bf010923"); public static readonly MongoId KEY_SHATUNS_HIDEOUT = new MongoId("664d3db6db5dea2bad286955"); public static readonly MongoId KEY_SHTURMANS_STASH = new MongoId("5d08d21286f774736e7c94c3"); public static readonly MongoId KEY_SMW_CAR = new MongoId("5a0eb38b86f774153b320eb0"); public static readonly MongoId KEY_STAIR_LANDING = new MongoId("63a39fd1c9b3aa4b61683efb"); public static readonly MongoId KEY_STORE_MANAGERS = new MongoId("63a39c69af870e651d58e6aa"); public static readonly MongoId KEY_STORE_SAFE = new MongoId("5a0f075686f7745bcc42ee12"); - public static readonly MongoId KEY_SUPPLY_DEPARTMENT_DIRECTORS_OFFICE = new MongoId( - "63a39ce4cd6db0635c1975fa" - ); - public static readonly MongoId KEY_TARBANK_CASH_REGISTER_DEPARTMENT = new MongoId( - "64ccc2111779ad6ba200a139" - ); - public static readonly MongoId KEY_TARCONE_DIRECTORS_OFFICE = new MongoId( - "5780d0532459777a5108b9a2" - ); - public static readonly MongoId KEY_TERRAGROUP_LABS_ARSENAL_STORAGE_ROOM = new MongoId( - "5c1f79a086f7746ed066fb8f" - ); - public static readonly MongoId KEY_TERRAGROUP_LABS_MANAGERS_OFFICE_ROOM = new MongoId( - "5c1e2a1e86f77431ea0ea84c" - ); - public static readonly MongoId KEY_TERRAGROUP_LABS_WEAPON_TESTING_AREA = new MongoId( - "5c1e2d1f86f77431e9280bee" - ); - public static readonly MongoId KEY_TERRAGROUP_MEETING_ROOM = new MongoId( - "64ccc206793ca11c8f450a38" - ); - public static readonly MongoId KEY_TERRAGROUP_SCIENCE_OFFICE = new MongoId( - "658199aa38c79576a2569e13" - ); - public static readonly MongoId KEY_TERRAGROUP_SECURITY_ARMORY = new MongoId( - "64ccc24de61ea448b507d34d" - ); + public static readonly MongoId KEY_SUPPLY_DEPARTMENT_DIRECTORS_OFFICE = new MongoId("63a39ce4cd6db0635c1975fa"); + public static readonly MongoId KEY_TARBANK_CASH_REGISTER_DEPARTMENT = new MongoId("64ccc2111779ad6ba200a139"); + public static readonly MongoId KEY_TARCONE_DIRECTORS_OFFICE = new MongoId("5780d0532459777a5108b9a2"); + public static readonly MongoId KEY_TERRAGROUP_LABS_ARSENAL_STORAGE_ROOM = new MongoId("5c1f79a086f7746ed066fb8f"); + public static readonly MongoId KEY_TERRAGROUP_LABS_MANAGERS_OFFICE_ROOM = new MongoId("5c1e2a1e86f77431ea0ea84c"); + public static readonly MongoId KEY_TERRAGROUP_LABS_WEAPON_TESTING_AREA = new MongoId("5c1e2d1f86f77431e9280bee"); + public static readonly MongoId KEY_TERRAGROUP_MEETING_ROOM = new MongoId("64ccc206793ca11c8f450a38"); + public static readonly MongoId KEY_TERRAGROUP_SCIENCE_OFFICE = new MongoId("658199aa38c79576a2569e13"); + public static readonly MongoId KEY_TERRAGROUP_SECURITY_ARMORY = new MongoId("64ccc24de61ea448b507d34d"); public static readonly MongoId KEY_TORTURE_ROOM = new MongoId("679baae891966fe40408f14c"); - public static readonly MongoId KEY_TRAILER_PARK_PORTABLE_CABIN = new MongoId( - "5913611c86f77479e0084092" - ); - public static readonly MongoId KEY_ULTRA_MEDICAL_STORAGE = new MongoId( - "5e42c71586f7747f245e1343" - ); - public static readonly MongoId KEY_UNDERGROUND_PARKING_UTILITY_ROOM = new MongoId( - "658199972dc4e60f6d556a2f" - ); - public static readonly MongoId KEY_UNITY_CREDIT_BANK_ARCHIVE_ROOM = new MongoId( - "6582dc63cafcd9485374dbc5" - ); - public static readonly MongoId KEY_UNITY_CREDIT_BANK_CASH_REGISTER = new MongoId( - "6581998038c79576a2569e11" - ); + public static readonly MongoId KEY_TRAILER_PARK_PORTABLE_CABIN = new MongoId("5913611c86f77479e0084092"); + public static readonly MongoId KEY_ULTRA_MEDICAL_STORAGE = new MongoId("5e42c71586f7747f245e1343"); + public static readonly MongoId KEY_UNDERGROUND_PARKING_UTILITY_ROOM = new MongoId("658199972dc4e60f6d556a2f"); + public static readonly MongoId KEY_UNITY_CREDIT_BANK_ARCHIVE_ROOM = new MongoId("6582dc63cafcd9485374dbc5"); + public static readonly MongoId KEY_UNITY_CREDIT_BANK_CASH_REGISTER = new MongoId("6581998038c79576a2569e11"); public static readonly MongoId KEY_UNKNOWN = new MongoId("593962ca86f774068014d9af"); - public static readonly MongoId KEY_USEC_COTTAGE_FIRST_SAFE = new MongoId( - "61aa5b7db225ac1ead7957c1" - ); + public static readonly MongoId KEY_USEC_COTTAGE_FIRST_SAFE = new MongoId("61aa5b7db225ac1ead7957c1"); public static readonly MongoId KEY_USEC_COTTAGE_ROOM = new MongoId("66265d7be65f224b2e17c6aa"); - public static readonly MongoId KEY_USEC_COTTAGE_SECOND_SAFE = new MongoId( - "61aa5ba8018e9821b7368da9" - ); + public static readonly MongoId KEY_USEC_COTTAGE_SECOND_SAFE = new MongoId("61aa5ba8018e9821b7368da9"); public static readonly MongoId KEY_USEC_STASH = new MongoId("5da743f586f7744014504f72"); public static readonly MongoId KEY_VALVE_HANDWHEEL = new MongoId("678fa929819ddc4c350c0317"); public static readonly MongoId KEY_VAZ_CAR = new MongoId("5913651986f774432f15d132"); public static readonly MongoId KEY_VORONS_HIDEOUT = new MongoId("664d3ddfdda2e85aca370d75"); - public static readonly MongoId KEY_WATER_TREATMENT_PLANT_STORAGE_ROOM = new MongoId( - "62987e26a77ec735f90a2995" - ); + public static readonly MongoId KEY_WATER_TREATMENT_PLANT_STORAGE_ROOM = new MongoId("62987e26a77ec735f90a2995"); public static readonly MongoId KEY_WEAPON_SAFE = new MongoId("59148f8286f7741b951ea113"); - public static readonly MongoId KEY_WEATHER_STATION_SAFE = new MongoId( - "5a0f006986f7741ffd2fe484" - ); + public static readonly MongoId KEY_WEATHER_STATION_SAFE = new MongoId("5a0f006986f7741ffd2fe484"); public static readonly MongoId KEY_XRAY_ROOM = new MongoId("64ccc246ff54fb38131acf29"); public static readonly MongoId KEY_YOTOTA_CAR = new MongoId("591ae8f986f77406f854be45"); public static readonly MongoId KEY_ZB014 = new MongoId("591afe0186f77431bd616a11"); - public static readonly MongoId KEY_ZMEISKY_3_APARTMENT_8 = new MongoId( - "63a39dfe3901f439517cafba" - ); - public static readonly MongoId KEY_ZMEISKY_5_APARTMENT_20 = new MongoId( - "63a39df18a56922e82001f25" - ); + public static readonly MongoId KEY_ZMEISKY_3_APARTMENT_8 = new MongoId("63a39dfe3901f439517cafba"); + public static readonly MongoId KEY_ZMEISKY_5_APARTMENT_20 = new MongoId("63a39df18a56922e82001f25"); public static readonly MongoId KEYCARD_LABRYS_ACCESS = new MongoId("679b9819a2f2dd4da9023512"); public static readonly MongoId KEYCARD_OBJECT_11SR = new MongoId("5e42c81886f7742a01529f57"); public static readonly MongoId KEYCARD_OBJECT_21WS = new MongoId("5e42c83786f7742a021fdf3c"); public static readonly MongoId KEYCARD_OFFBLACK = new MongoId("5751961824597720a31c09ac"); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_ACCESS = new MongoId( - "5c94bbff86f7747ee735c08f" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_BLACK = new MongoId( - "5c1d0f4986f7744bb01837fa" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_BLUE = new MongoId( - "5c1d0c5f86f7744bb2683cf0" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_GREEN = new MongoId( - "5c1d0dc586f7744baf2e7b79" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_RED = new MongoId( - "5c1d0efb86f7744baf2e7b7b" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_VIOLET = new MongoId( - "5c1e495a86f7743109743dfb" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_YELLOW = new MongoId( - "5c1d0d6d86f7744bb2683e1f" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_LABS_RESIDENTIAL_UNIT = new MongoId( - "6711039f9e648049e50b3307" - ); - public static readonly MongoId KEYCARD_TERRAGROUP_STORAGE_ROOM = new MongoId( - "66acd6702b17692df20144c0" - ); - public static readonly MongoId KEYCARD_WITH_A_BLUE_MARKING = new MongoId( - "5efde6b4f5448336730dbd61" - ); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_ACCESS = new MongoId("5c94bbff86f7747ee735c08f"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_BLACK = new MongoId("5c1d0f4986f7744bb01837fa"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_BLUE = new MongoId("5c1d0c5f86f7744bb2683cf0"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_GREEN = new MongoId("5c1d0dc586f7744baf2e7b79"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_RED = new MongoId("5c1d0efb86f7744baf2e7b7b"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_VIOLET = new MongoId("5c1e495a86f7743109743dfb"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_KEYCARD_YELLOW = new MongoId("5c1d0d6d86f7744bb2683e1f"); + public static readonly MongoId KEYCARD_TERRAGROUP_LABS_RESIDENTIAL_UNIT = new MongoId("6711039f9e648049e50b3307"); + public static readonly MongoId KEYCARD_TERRAGROUP_STORAGE_ROOM = new MongoId("66acd6702b17692df20144c0"); + public static readonly MongoId KEYCARD_WITH_A_BLUE_MARKING = new MongoId("5efde6b4f5448336730dbd61"); public static readonly MongoId KNIFE_6KH5_BAYONET = new MongoId("5bffdc370db834001d23eca8"); - public static readonly MongoId KNIFE_AKULA_PUSH_DAGGER = new MongoId( - "674d90b55704568fe60bc8f5" - ); + public static readonly MongoId KNIFE_AKULA_PUSH_DAGGER = new MongoId("674d90b55704568fe60bc8f5"); public static readonly MongoId KNIFE_ANTIQUE_AXE = new MongoId("5bc9c1e2d4351e00367fbcf0"); - public static readonly MongoId KNIFE_APOK_TACTICAL_WASTELAND_GLADIUS = new MongoId( - "664a5428d5e33a713b622379" - ); - public static readonly MongoId KNIFE_BARS_A2607_95KH18 = new MongoId( - "57e26fc7245977162a14b800" - ); - public static readonly MongoId KNIFE_BARS_A2607_DAMASCUS = new MongoId( - "57e26ea924597715ca604a09" - ); + public static readonly MongoId KNIFE_APOK_TACTICAL_WASTELAND_GLADIUS = new MongoId("664a5428d5e33a713b622379"); + public static readonly MongoId KNIFE_BARS_A2607_95KH18 = new MongoId("57e26fc7245977162a14b800"); + public static readonly MongoId KNIFE_BARS_A2607_DAMASCUS = new MongoId("57e26ea924597715ca604a09"); public static readonly MongoId KNIFE_CAMPER_AXE = new MongoId("5c012ffc0db834001d23f03f"); public static readonly MongoId KNIFE_CHAINED_LABRYS = new MongoId("679ba90d269ddfea47012159"); public static readonly MongoId KNIFE_CRASH_AXE = new MongoId("5bffe7930db834001b734a39"); public static readonly MongoId KNIFE_CULTIST = new MongoId("5fc64ea372b0dd78d51159dc"); - public static readonly MongoId KNIFE_ER_FULCRUM_BAYONET = new MongoId( - "54491bb74bdc2d09088b4567" - ); + public static readonly MongoId KNIFE_ER_FULCRUM_BAYONET = new MongoId("54491bb74bdc2d09088b4567"); public static readonly MongoId KNIFE_FREEMAN_CROWBAR = new MongoId("5c07df7f0db834001b73588a"); - public static readonly MongoId KNIFE_INFECTIOUS_STRIKE = new MongoId( - "670ad7f1ad195290cd00da7a" - ); - public static readonly MongoId KNIFE_KIBA_ARMS_TACTICAL_TOMAHAWK = new MongoId( - "57cd379a24597778e7682ecf" - ); - public static readonly MongoId KNIFE_MILLER_BROS_BLADES_M2_TACTICAL_SWORD = new MongoId( - "5bffdd7e0db834001b734a1a" - ); - public static readonly MongoId KNIFE_MPL50_ENTRENCHING_TOOL = new MongoId( - "5bead2e00db834001c062938" - ); + public static readonly MongoId KNIFE_INFECTIOUS_STRIKE = new MongoId("670ad7f1ad195290cd00da7a"); + public static readonly MongoId KNIFE_KIBA_ARMS_TACTICAL_TOMAHAWK = new MongoId("57cd379a24597778e7682ecf"); + public static readonly MongoId KNIFE_MILLER_BROS_BLADES_M2_TACTICAL_SWORD = new MongoId("5bffdd7e0db834001b734a1a"); + public static readonly MongoId KNIFE_MPL50_ENTRENCHING_TOOL = new MongoId("5bead2e00db834001c062938"); public static readonly MongoId KNIFE_OLD_HAND_SCYTHE = new MongoId("63495c500c297e20065a08b1"); - public static readonly MongoId KNIFE_PRTARAN_POLICE_BATON = new MongoId( - "6540d2162ae6d96b540afcaf" - ); - public static readonly MongoId KNIFE_RED_REBEL_ICE_PICK = new MongoId( - "5c0126f40db834002a125382" - ); - public static readonly MongoId KNIFE_SOG_VOODOO_HAWK_TACTICAL_TOMAHAWK = new MongoId( - "63920105a83e15700a00f168" - ); - public static readonly MongoId KNIFE_SP8_SURVIVAL_MACHETE = new MongoId( - "5c010e350db83400232feec7" - ); - public static readonly MongoId KNIFE_SUPERFORS_DB_2020_DEAD_BLOW_HAMMER = new MongoId( - "6087e570b998180e9f76dc24" - ); - public static readonly MongoId KNIFE_UNITED_CUTLERY_M48_TACTICAL_KUKRI = new MongoId( - "65ca457b4aafb5d7fc0dcb5d" - ); - public static readonly MongoId KNIFE_UVSR_TAIGA1_SURVIVAL_MACHETE = new MongoId( - "601948682627df266209af05" - ); - public static readonly MongoId LAUNCHER_GP25_KOSTYOR_40MM_UNDERBARREL_GRENADE = new MongoId( - "62e7e7bbe6da9612f743f1e0" - ); - public static readonly MongoId LAUNCHER_GP34_40MM_UNDERBARREL_GRENADE = new MongoId( - "5648b62b4bdc2d9d488b4585" - ); - public static readonly MongoId LAUNCHER_M203_40MM_UNDERBARREL_GRENADE = new MongoId( - "6357c98711fb55120211f7e1" - ); - public static readonly MongoId LOCKABLECONTAINER_PISTOL_CASE = new MongoId( - "567143bf4bdc2d1a0f8b4567" - ); - public static readonly MongoId LOOTCONTAINER_AIRDROP_COMMON_SUPPLY_CRATE = new MongoId( - "6223349b3136504a544d1608" - ); - public static readonly MongoId LOOTCONTAINER_AIRDROP_MEDICAL_CRATE = new MongoId( - "622334c873090231d904a9fc" - ); - public static readonly MongoId LOOTCONTAINER_AIRDROP_SUPPLY_CRATE = new MongoId( - "622334fa3136504a544d160c" - ); - public static readonly MongoId LOOTCONTAINER_AIRDROP_SUPPLY_CRATE_2 = new MongoId( - "61a89e812cc17d60cc5f9879" - ); - public static readonly MongoId LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_1 = - new MongoId("66da1b49099cf6adcc07a36b"); - public static readonly MongoId LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_2 = - new MongoId("66da1b546916142b3b022777"); - public static readonly MongoId LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_3 = - new MongoId("61a89e5445a2672acf66c877"); - public static readonly MongoId LOOTCONTAINER_AIRDROP_WEAPON_CRATE = new MongoId( - "6223351bb5d97a7b2c635ca7" - ); - public static readonly MongoId LOOTCONTAINER_BANK_CASH_REGISTER = new MongoId( - "64d116f41a9c6143a956127d" - ); - public static readonly MongoId LOOTCONTAINER_BANK_SAFE_3X3 = new MongoId( - "66acff0a1d8e1083b303f5af" - ); - public static readonly MongoId LOOTCONTAINER_BANK_SAFE_4X4 = new MongoId( - "64d11702dd0cd96ab82c3280" - ); - public static readonly MongoId LOOTCONTAINER_BOX_FULL_OF_JUNK = new MongoId( - "566966cd4bdc2d0c4c8b4578" - ); - public static readonly MongoId LOOTCONTAINER_BURIED_BARREL_CACHE = new MongoId( - "5d6d2bb386f774785b07a77a" - ); - public static readonly MongoId LOOTCONTAINER_CASH_REGISTER = new MongoId( - "578f879c24597735401e6bc6" - ); - public static readonly MongoId LOOTCONTAINER_CASH_REGISTER_TAR22 = new MongoId( - "5ad74cf586f774391278f6f0" - ); - public static readonly MongoId LOOTCONTAINER_CIVILIAN_BODY = new MongoId( - "658420d8085fea07e674cdb6" - ); - public static readonly MongoId LOOTCONTAINER_COMMON_FUND_STASH = new MongoId( - "5d07b91b86f7745a077a9432" - ); - public static readonly MongoId LOOTCONTAINER_DEAD_SCAV = new MongoId( - "5909e4b686f7747f5b744fa4" - ); - public static readonly MongoId LOOTCONTAINER_DEAD_SCAV_4X4_2 = new MongoId( - "67adf5752fc5ee84020a9940" - ); + public static readonly MongoId KNIFE_PRTARAN_POLICE_BATON = new MongoId("6540d2162ae6d96b540afcaf"); + public static readonly MongoId KNIFE_RED_REBEL_ICE_PICK = new MongoId("5c0126f40db834002a125382"); + public static readonly MongoId KNIFE_SOG_VOODOO_HAWK_TACTICAL_TOMAHAWK = new MongoId("63920105a83e15700a00f168"); + public static readonly MongoId KNIFE_SP8_SURVIVAL_MACHETE = new MongoId("5c010e350db83400232feec7"); + public static readonly MongoId KNIFE_SUPERFORS_DB_2020_DEAD_BLOW_HAMMER = new MongoId("6087e570b998180e9f76dc24"); + public static readonly MongoId KNIFE_UNITED_CUTLERY_M48_TACTICAL_KUKRI = new MongoId("65ca457b4aafb5d7fc0dcb5d"); + public static readonly MongoId KNIFE_UVSR_TAIGA1_SURVIVAL_MACHETE = new MongoId("601948682627df266209af05"); + public static readonly MongoId LAUNCHER_GP25_KOSTYOR_40MM_UNDERBARREL_GRENADE = new MongoId("62e7e7bbe6da9612f743f1e0"); + public static readonly MongoId LAUNCHER_GP34_40MM_UNDERBARREL_GRENADE = new MongoId("5648b62b4bdc2d9d488b4585"); + public static readonly MongoId LAUNCHER_M203_40MM_UNDERBARREL_GRENADE = new MongoId("6357c98711fb55120211f7e1"); + public static readonly MongoId LOCKABLECONTAINER_PISTOL_CASE = new MongoId("567143bf4bdc2d1a0f8b4567"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_COMMON_SUPPLY_CRATE = new MongoId("6223349b3136504a544d1608"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_MEDICAL_CRATE = new MongoId("622334c873090231d904a9fc"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_SUPPLY_CRATE = new MongoId("622334fa3136504a544d160c"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_SUPPLY_CRATE_2 = new MongoId("61a89e812cc17d60cc5f9879"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_1 = new MongoId("66da1b49099cf6adcc07a36b"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_2 = new MongoId("66da1b546916142b3b022777"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_3 = new MongoId("61a89e5445a2672acf66c877"); + public static readonly MongoId LOOTCONTAINER_AIRDROP_WEAPON_CRATE = new MongoId("6223351bb5d97a7b2c635ca7"); + public static readonly MongoId LOOTCONTAINER_BANK_CASH_REGISTER = new MongoId("64d116f41a9c6143a956127d"); + public static readonly MongoId LOOTCONTAINER_BANK_SAFE_3X3 = new MongoId("66acff0a1d8e1083b303f5af"); + public static readonly MongoId LOOTCONTAINER_BANK_SAFE_4X4 = new MongoId("64d11702dd0cd96ab82c3280"); + public static readonly MongoId LOOTCONTAINER_BOX_FULL_OF_JUNK = new MongoId("566966cd4bdc2d0c4c8b4578"); + public static readonly MongoId LOOTCONTAINER_BURIED_BARREL_CACHE = new MongoId("5d6d2bb386f774785b07a77a"); + public static readonly MongoId LOOTCONTAINER_CASH_REGISTER = new MongoId("578f879c24597735401e6bc6"); + public static readonly MongoId LOOTCONTAINER_CASH_REGISTER_TAR22 = new MongoId("5ad74cf586f774391278f6f0"); + public static readonly MongoId LOOTCONTAINER_CIVILIAN_BODY = new MongoId("658420d8085fea07e674cdb6"); + public static readonly MongoId LOOTCONTAINER_COMMON_FUND_STASH = new MongoId("5d07b91b86f7745a077a9432"); + public static readonly MongoId LOOTCONTAINER_DEAD_SCAV = new MongoId("5909e4b686f7747f5b744fa4"); + public static readonly MongoId LOOTCONTAINER_DEAD_SCAV_4X4_2 = new MongoId("67adf5752fc5ee84020a9940"); public static readonly MongoId LOOTCONTAINER_DRAWER = new MongoId("578f87b7245977356274f2cd"); - public static readonly MongoId LOOTCONTAINER_DUFFLE_BAG = new MongoId( - "578f87a3245977356274f2cb" - ); - public static readonly MongoId LOOTCONTAINER_DUFFLE_BAG_ADV = new MongoId( - "61aa1e9a32a4743c3453d2cf" - ); - public static readonly MongoId LOOTCONTAINER_FESTIVE_AIRDROP_SUPPLY_CRATE = new MongoId( - "67614e3a6a90e4f10b0b140d" - ); - public static readonly MongoId LOOTCONTAINER_GRENADE_BOX = new MongoId( - "67adf4eb110ba15da90c6413" - ); - public static readonly MongoId LOOTCONTAINER_GRENADE_BOX_3X2_2 = new MongoId( - "5909d36d86f774660f0bb900" - ); - public static readonly MongoId LOOTCONTAINER_GROUND_CACHE = new MongoId( - "5d6d2b5486f774785c2ba8ea" - ); + public static readonly MongoId LOOTCONTAINER_DUFFLE_BAG = new MongoId("578f87a3245977356274f2cb"); + public static readonly MongoId LOOTCONTAINER_DUFFLE_BAG_ADV = new MongoId("61aa1e9a32a4743c3453d2cf"); + public static readonly MongoId LOOTCONTAINER_FESTIVE_AIRDROP_SUPPLY_CRATE = new MongoId("67614e3a6a90e4f10b0b140d"); + public static readonly MongoId LOOTCONTAINER_GRENADE_BOX = new MongoId("67adf4eb110ba15da90c6413"); + public static readonly MongoId LOOTCONTAINER_GRENADE_BOX_3X2_2 = new MongoId("5909d36d86f774660f0bb900"); + public static readonly MongoId LOOTCONTAINER_GROUND_CACHE = new MongoId("5d6d2b5486f774785c2ba8ea"); public static readonly MongoId LOOTCONTAINER_JACKET = new MongoId("578f8778245977358849a9b5"); - public static readonly MongoId LOOTCONTAINER_JACKET_114KEY = new MongoId( - "59387ac686f77401442ddd61" - ); - public static readonly MongoId LOOTCONTAINER_JACKET_204KEY = new MongoId( - "5914944186f774189e5e76c2" - ); - public static readonly MongoId LOOTCONTAINER_JACKET_2X2_2 = new MongoId( - "67adf4a95247ac91530fcec7" - ); - public static readonly MongoId LOOTCONTAINER_JACKET_MACHINERYKEY = new MongoId( - "5937ef2b86f77408a47244b3" - ); - public static readonly MongoId LOOTCONTAINER_LAB_TECHNICIAN_BODY = new MongoId( - "6582e6c6edf14c4c6023adf2" - ); - public static readonly MongoId LOOTCONTAINER_LONG_WEAPON_BOX = new MongoId( - "61aa1e6984ea0800645777f9" - ); - public static readonly MongoId LOOTCONTAINER_MEDBAG_SMU06 = new MongoId( - "5909d24f86f77466f56e6855" - ); - public static readonly MongoId LOOTCONTAINER_MEDBAG_SMU06_ADV = new MongoId( - "61aa1ead84ea0800645777fd" - ); + public static readonly MongoId LOOTCONTAINER_JACKET_114KEY = new MongoId("59387ac686f77401442ddd61"); + public static readonly MongoId LOOTCONTAINER_JACKET_204KEY = new MongoId("5914944186f774189e5e76c2"); + public static readonly MongoId LOOTCONTAINER_JACKET_2X2_2 = new MongoId("67adf4a95247ac91530fcec7"); + public static readonly MongoId LOOTCONTAINER_JACKET_MACHINERYKEY = new MongoId("5937ef2b86f77408a47244b3"); + public static readonly MongoId LOOTCONTAINER_LAB_TECHNICIAN_BODY = new MongoId("6582e6c6edf14c4c6023adf2"); + public static readonly MongoId LOOTCONTAINER_LONG_WEAPON_BOX = new MongoId("61aa1e6984ea0800645777f9"); + public static readonly MongoId LOOTCONTAINER_MEDBAG_SMU06 = new MongoId("5909d24f86f77466f56e6855"); + public static readonly MongoId LOOTCONTAINER_MEDBAG_SMU06_ADV = new MongoId("61aa1ead84ea0800645777fd"); public static readonly MongoId LOOTCONTAINER_MEDCASE = new MongoId("5909d4c186f7746ad34e805a"); - public static readonly MongoId LOOTCONTAINER_MEDICAL_SUPPLY_CRATE = new MongoId( - "5d6fe50986f77449d97f7463" - ); + public static readonly MongoId LOOTCONTAINER_MEDICAL_SUPPLY_CRATE = new MongoId("5d6fe50986f77449d97f7463"); public static readonly MongoId LOOTCONTAINER_PC_BLOCK = new MongoId("59139c2186f77411564f8e42"); - public static readonly MongoId LOOTCONTAINER_PLASTIC_SUITCASE = new MongoId( - "5c052cea86f7746b2101e8d8" - ); + public static readonly MongoId LOOTCONTAINER_PLASTIC_SUITCASE = new MongoId("5c052cea86f7746b2101e8d8"); public static readonly MongoId LOOTCONTAINER_PMC_BODY = new MongoId("6582e6d7b14c3f72eb071420"); - public static readonly MongoId LOOTCONTAINER_RATION_SUPPLY_CRATE = new MongoId( - "5d6fd13186f77424ad2a8c69" - ); + public static readonly MongoId LOOTCONTAINER_RATION_SUPPLY_CRATE = new MongoId("5d6fd13186f77424ad2a8c69"); public static readonly MongoId LOOTCONTAINER_SAFE = new MongoId("578f8782245977354405a1e3"); - public static readonly MongoId LOOTCONTAINER_SCAV_BODY = new MongoId( - "6582e6bb0c3b9823fe6d1840" - ); - public static readonly MongoId LOOTCONTAINER_TECHNICAL_SUPPLY_CRATE = new MongoId( - "67adf5f7adc1f43b0702b826" - ); - public static readonly MongoId LOOTCONTAINER_TECHNICAL_SUPPLY_CRATE_5X5_2 = new MongoId( - "5d6fd45b86f774317075ed43" - ); + public static readonly MongoId LOOTCONTAINER_SCAV_BODY = new MongoId("6582e6bb0c3b9823fe6d1840"); + public static readonly MongoId LOOTCONTAINER_TECHNICAL_SUPPLY_CRATE = new MongoId("67adf5f7adc1f43b0702b826"); + public static readonly MongoId LOOTCONTAINER_TECHNICAL_SUPPLY_CRATE_5X5_2 = new MongoId("5d6fd45b86f774317075ed43"); public static readonly MongoId LOOTCONTAINER_TOOLBOX = new MongoId("67adf54d1c58bd68b2002ff0"); - public static readonly MongoId LOOTCONTAINER_TOOLBOX_4X3_2 = new MongoId( - "5909d50c86f774659e6aaebe" - ); - public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_4X4 = new MongoId( - "5909d7cf86f77470ee57d75a" - ); - public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_5X2 = new MongoId( - "5909d5ef86f77467974efbd8" - ); - public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_5X5 = new MongoId( - "5909d89086f77472591234a0" - ); - public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_6X3 = new MongoId( - "5909d76c86f77471e53d2adf" - ); - public static readonly MongoId LOOTCONTAINER_WOODEN_AMMO_BOX = new MongoId( - "67adf4b81c58bd68b2002fec" - ); - public static readonly MongoId LOOTCONTAINER_WOODEN_AMMO_BOX_3X3_2 = new MongoId( - "5909d45286f77465a8136dc6" - ); - public static readonly MongoId LOOTCONTAINER_WOODEN_CRATE = new MongoId( - "578f87ad245977356274f2cc" - ); - public static readonly MongoId LOOTCONTAINER_WOODEN_CRATE_5X2_2 = new MongoId( - "67adf4db515e3dd542077a1d" - ); - public static readonly MongoId MACHINEGUN_AGS30_30X29MM_AUTOMATIC_GRENADE_LAUNCHER = - new MongoId("5d52cc5ba4b9367408500062"); - public static readonly MongoId MACHINEGUN_DEGTYAREV_RPD_762X39_MACHINE_GUN = new MongoId( - "6513ef33e06849f06c0957ca" - ); - public static readonly MongoId MACHINEGUN_DEGTYAREV_RPDN_762X39_MACHINE_GUN = new MongoId( - "65268d8ecb944ff1e90ea385" - ); - public static readonly MongoId MACHINEGUN_KALASHNIKOV_PKM_762X54R_MACHINE_GUN = new MongoId( - "64637076203536ad5600c990" - ); - public static readonly MongoId MACHINEGUN_KALASHNIKOV_PKP_762X54R_INFANTRY_MACHINE_GUN = - new MongoId("64ca3d3954fc657e230529cc"); - public static readonly MongoId MACHINEGUN_KALASHNIKOV_PKTM_762X54R_MODERNIZED_TANK_MACHINE_GUN = - new MongoId("657857faeff4c850222dff1b"); - public static readonly MongoId MACHINEGUN_NSV_UTYOS_127X108_HEAVY_MACHINE_GUN = new MongoId( - "5cdeb229d7f00c000e7ce174" - ); - public static readonly MongoId MACHINEGUN_RPK16_545X39_LIGHT_MACHINE_GUN = new MongoId( - "5beed0f50db834001c062b12" - ); - public static readonly MongoId MACHINEGUN_US_ORDNANCE_M60E4_762X51_LIGHT_MACHINE_GUN = - new MongoId("65fb023261d5829b2d090755"); - public static readonly MongoId MACHINEGUN_US_ORDNANCE_M60E6_762X51_LIGHT_MACHINE_GUN = - new MongoId("661ceb1b9311543c7104149b"); - public static readonly MongoId MACHINEGUN_US_ORDNANCE_M60E6_762X51_LIGHT_MACHINE_GUN_FDE = - new MongoId("661cec09b2c6356b4d0c7a36"); - public static readonly MongoId MAGAZINE_127X108_100_100RND = new MongoId( - "5cffa483d7ad1a049e54ef1c" - ); - public static readonly MongoId MAGAZINE_127X33_DE_7RND = new MongoId( - "668fe5c5f35310705d02b696" - ); - public static readonly MongoId MAGAZINE_127X55_ASH12_10RND = new MongoId( - "5caf1041ae92157c28402e3f" - ); - public static readonly MongoId MAGAZINE_127X55_ASH12_20RND = new MongoId( - "5caf1109ae9215753c44119f" - ); - public static readonly MongoId MAGAZINE_127X55_RSH12_CYL_5RND = new MongoId( - "633ec6ee025b096d320a3b15" - ); - public static readonly MongoId MAGAZINE_127X99_M82_10RND = new MongoId( - "67d418d0ffb910d21f04720e" - ); - public static readonly MongoId MAGAZINE_12G_255_CYL_5RND = new MongoId( - "60dc519adf4c47305f6d410d" - ); - public static readonly MongoId MAGAZINE_12G_590A1X8_8RND = new MongoId( - "5e87080c81c4ed43e83cefda" - ); - public static readonly MongoId MAGAZINE_12G_AA12_20RND = new MongoId( - "6709133fa532466d5403fb7c" + public static readonly MongoId LOOTCONTAINER_TOOLBOX_4X3_2 = new MongoId("5909d50c86f774659e6aaebe"); + public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_4X4 = new MongoId("5909d7cf86f77470ee57d75a"); + public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_5X2 = new MongoId("5909d5ef86f77467974efbd8"); + public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_5X5 = new MongoId("5909d89086f77472591234a0"); + public static readonly MongoId LOOTCONTAINER_WEAPON_BOX_6X3 = new MongoId("5909d76c86f77471e53d2adf"); + public static readonly MongoId LOOTCONTAINER_WOODEN_AMMO_BOX = new MongoId("67adf4b81c58bd68b2002fec"); + public static readonly MongoId LOOTCONTAINER_WOODEN_AMMO_BOX_3X3_2 = new MongoId("5909d45286f77465a8136dc6"); + public static readonly MongoId LOOTCONTAINER_WOODEN_CRATE = new MongoId("578f87ad245977356274f2cc"); + public static readonly MongoId LOOTCONTAINER_WOODEN_CRATE_5X2_2 = new MongoId("67adf4db515e3dd542077a1d"); + public static readonly MongoId MACHINEGUN_AGS30_30X29MM_AUTOMATIC_GRENADE_LAUNCHER = new MongoId("5d52cc5ba4b9367408500062"); + public static readonly MongoId MACHINEGUN_DEGTYAREV_RPD_762X39_MACHINE_GUN = new MongoId("6513ef33e06849f06c0957ca"); + public static readonly MongoId MACHINEGUN_DEGTYAREV_RPDN_762X39_MACHINE_GUN = new MongoId("65268d8ecb944ff1e90ea385"); + public static readonly MongoId MACHINEGUN_KALASHNIKOV_PKM_762X54R_MACHINE_GUN = new MongoId("64637076203536ad5600c990"); + public static readonly MongoId MACHINEGUN_KALASHNIKOV_PKP_762X54R_INFANTRY_MACHINE_GUN = new MongoId("64ca3d3954fc657e230529cc"); + public static readonly MongoId MACHINEGUN_KALASHNIKOV_PKTM_762X54R_MODERNIZED_TANK_MACHINE_GUN = new MongoId( + "657857faeff4c850222dff1b" ); + public static readonly MongoId MACHINEGUN_NSV_UTYOS_127X108_HEAVY_MACHINE_GUN = new MongoId("5cdeb229d7f00c000e7ce174"); + public static readonly MongoId MACHINEGUN_RPK16_545X39_LIGHT_MACHINE_GUN = new MongoId("5beed0f50db834001c062b12"); + public static readonly MongoId MACHINEGUN_US_ORDNANCE_M60E4_762X51_LIGHT_MACHINE_GUN = new MongoId("65fb023261d5829b2d090755"); + public static readonly MongoId MACHINEGUN_US_ORDNANCE_M60E6_762X51_LIGHT_MACHINE_GUN = new MongoId("661ceb1b9311543c7104149b"); + public static readonly MongoId MACHINEGUN_US_ORDNANCE_M60E6_762X51_LIGHT_MACHINE_GUN_FDE = new MongoId("661cec09b2c6356b4d0c7a36"); + public static readonly MongoId MAGAZINE_127X108_100_100RND = new MongoId("5cffa483d7ad1a049e54ef1c"); + public static readonly MongoId MAGAZINE_127X33_DE_7RND = new MongoId("668fe5c5f35310705d02b696"); + public static readonly MongoId MAGAZINE_127X55_ASH12_10RND = new MongoId("5caf1041ae92157c28402e3f"); + public static readonly MongoId MAGAZINE_127X55_ASH12_20RND = new MongoId("5caf1109ae9215753c44119f"); + public static readonly MongoId MAGAZINE_127X55_RSH12_CYL_5RND = new MongoId("633ec6ee025b096d320a3b15"); + public static readonly MongoId MAGAZINE_127X99_M82_10RND = new MongoId("67d418d0ffb910d21f04720e"); + public static readonly MongoId MAGAZINE_12G_255_CYL_5RND = new MongoId("60dc519adf4c47305f6d410d"); + public static readonly MongoId MAGAZINE_12G_590A1X8_8RND = new MongoId("5e87080c81c4ed43e83cefda"); + public static readonly MongoId MAGAZINE_12G_AA12_20RND = new MongoId("6709133fa532466d5403fb7c"); public static readonly MongoId MAGAZINE_12G_AA12_8RND = new MongoId("66ffaab91f7492c901027bb8"); - public static readonly MongoId MAGAZINE_12G_M3X11_11RND = new MongoId( - "625ff3046d721f05d93bf2ee" - ); - public static readonly MongoId MAGAZINE_12G_M3X13_13RND = new MongoId( - "625ff31daaaa8c1130599f64" - ); + public static readonly MongoId MAGAZINE_12G_M3X11_11RND = new MongoId("625ff3046d721f05d93bf2ee"); + public static readonly MongoId MAGAZINE_12G_M3X13_13RND = new MongoId("625ff31daaaa8c1130599f64"); public static readonly MongoId MAGAZINE_12G_M3X5_5RND = new MongoId("625ff2ccb8c587128c1a01dd"); public static readonly MongoId MAGAZINE_12G_M3X7_7RND = new MongoId("6259bdcabd28e4721447a2aa"); public static readonly MongoId MAGAZINE_12G_M3X9_9RND = new MongoId("625ff2eb9f5537057932257d"); - public static readonly MongoId MAGAZINE_12G_M870X10_10RND = new MongoId( - "5a78832ec5856700155a6ca3" - ); - public static readonly MongoId MAGAZINE_12G_M870X4_4RND = new MongoId( - "5a7882dcc5856700177af662" - ); - public static readonly MongoId MAGAZINE_12G_M870X7_7RND = new MongoId( - "5a78830bc5856700137e4c90" - ); - public static readonly MongoId MAGAZINE_12G_MD_ARMS_20RND = new MongoId( - "674fe8f6f34d761ab8020cc8" - ); - public static readonly MongoId MAGAZINE_12G_MP133X6_6RND = new MongoId( - "55d484b44bdc2d1d4e8b456d" - ); - public static readonly MongoId MAGAZINE_12G_MP133X8_8RND = new MongoId( - "55d485804bdc2d8c2f8b456b" - ); - public static readonly MongoId MAGAZINE_12G_MP153X4_4RND = new MongoId( - "56deee15d2720bee328b4567" - ); - public static readonly MongoId MAGAZINE_12G_MP153X5_5RND = new MongoId( - "5882163e24597758206fee8c" - ); - public static readonly MongoId MAGAZINE_12G_MP153X6_6RND = new MongoId( - "5882163824597757561aa922" - ); - public static readonly MongoId MAGAZINE_12G_MP153X7_7RND = new MongoId( - "5882163224597757561aa920" - ); - public static readonly MongoId MAGAZINE_12G_MP153X8_8RND = new MongoId( - "56deeefcd2720bc8328b4568" - ); - public static readonly MongoId MAGAZINE_12G_MP155X6_6RND = new MongoId( - "6076c87f232e5a31c233d50e" - ); - public static readonly MongoId MAGAZINE_12G_POWERMAG_20RND = new MongoId( - "5cf8f3b0d7f00c00217872ef" - ); - public static readonly MongoId MAGAZINE_12G_SAI02_10RND = new MongoId( - "5a966f51a2750c00156aacf6" - ); + public static readonly MongoId MAGAZINE_12G_M870X10_10RND = new MongoId("5a78832ec5856700155a6ca3"); + public static readonly MongoId MAGAZINE_12G_M870X4_4RND = new MongoId("5a7882dcc5856700177af662"); + public static readonly MongoId MAGAZINE_12G_M870X7_7RND = new MongoId("5a78830bc5856700137e4c90"); + public static readonly MongoId MAGAZINE_12G_MD_ARMS_20RND = new MongoId("674fe8f6f34d761ab8020cc8"); + public static readonly MongoId MAGAZINE_12G_MP133X6_6RND = new MongoId("55d484b44bdc2d1d4e8b456d"); + public static readonly MongoId MAGAZINE_12G_MP133X8_8RND = new MongoId("55d485804bdc2d8c2f8b456b"); + public static readonly MongoId MAGAZINE_12G_MP153X4_4RND = new MongoId("56deee15d2720bee328b4567"); + public static readonly MongoId MAGAZINE_12G_MP153X5_5RND = new MongoId("5882163e24597758206fee8c"); + public static readonly MongoId MAGAZINE_12G_MP153X6_6RND = new MongoId("5882163824597757561aa922"); + public static readonly MongoId MAGAZINE_12G_MP153X7_7RND = new MongoId("5882163224597757561aa920"); + public static readonly MongoId MAGAZINE_12G_MP153X8_8RND = new MongoId("56deeefcd2720bc8328b4568"); + public static readonly MongoId MAGAZINE_12G_MP155X6_6RND = new MongoId("6076c87f232e5a31c233d50e"); + public static readonly MongoId MAGAZINE_12G_POWERMAG_20RND = new MongoId("5cf8f3b0d7f00c00217872ef"); + public static readonly MongoId MAGAZINE_12G_SAI02_10RND = new MongoId("5a966f51a2750c00156aacf6"); public static readonly MongoId MAGAZINE_12G_SB5_5RND = new MongoId("57616a9e2459773c7a400234"); - public static readonly MongoId MAGAZINE_20G_2001_SB3X2_2RND = new MongoId( - "5a38ee51c4a282000c5a955c" - ); - public static readonly MongoId MAGAZINE_20G_SB3X4_4RND = new MongoId( - "5a38ed75c4a28232996e40c6" - ); - public static readonly MongoId MAGAZINE_20G_SB3X5_5RND = new MongoId( - "5c6161fb2e221600113fbde5" - ); - public static readonly MongoId MAGAZINE_20X1MM_DRUM_20RND = new MongoId( - "66015dc4aaad2f54cb04c56a" - ); - public static readonly MongoId MAGAZINE_23X75_KS23MX3_3RND = new MongoId( - "5f647d9f8499b57dc40ddb93" - ); - public static readonly MongoId MAGAZINE_30X29_AGS30_99RND = new MongoId( - "5d52d479a4b936793d58c76b" - ); - public static readonly MongoId MAGAZINE_366TKM_6610_20RND = new MongoId( - "587df583245977373c4f1129" - ); - public static readonly MongoId MAGAZINE_366TKM_6L10_30RND = new MongoId( - "5a01c29586f77474660c694c" - ); - public static readonly MongoId MAGAZINE_366TKM_6P2_BAK_40RND = new MongoId( - "5b1fb3e15acfc4001637f068" - ); - public static readonly MongoId MAGAZINE_366TKM_6P2SB11_40RND = new MongoId( - "59e5f5a486f7746c530b3ce2" - ); - public static readonly MongoId MAGAZINE_366TKM_AK_AL_10RND = new MongoId( - "5b1fd4e35acfc40018633c39" - ); - public static readonly MongoId MAGAZINE_366TKM_AK_RIBBED_10RND = new MongoId( - "59e5d83b86f7745aed03d262" - ); - public static readonly MongoId MAGAZINE_366TKM_AK103_30RND = new MongoId( - "5ac66bea5acfc43b321d4aec" - ); - public static readonly MongoId MAGAZINE_366TKM_AK30_30RND = new MongoId( - "59fafc5086f7740dbe19f6c3" - ); - public static readonly MongoId MAGAZINE_366TKM_AK30_FDE_30RND = new MongoId( - "59fafc9386f774067d462453" - ); - public static readonly MongoId MAGAZINE_366TKM_AK55_30RND = new MongoId( - "59d625f086f774661516605d" - ); - public static readonly MongoId MAGAZINE_366TKM_AKA16_73RND = new MongoId( - "5c6175362e221600133e3b94" - ); - public static readonly MongoId MAGAZINE_366TKM_AKMS_AL_30RND = new MongoId( - "5a0060fc86f7745793204432" - ); - public static readonly MongoId MAGAZINE_366TKM_GEN_M3_20RND = new MongoId( - "64b9cf0ac12b9c38db26923a" - ); - public static readonly MongoId MAGAZINE_366TKM_GEN_M3_30RND = new MongoId( - "59d6272486f77466146386ff" - ); - public static readonly MongoId MAGAZINE_366TKM_GEN_M3_BANANA_30RND = new MongoId( - "5e21a3c67e40bd02257a008a" - ); - public static readonly MongoId MAGAZINE_366TKM_KCI_SKS_75RND = new MongoId( - "61695095d92c473c7702147a" - ); - public static readonly MongoId MAGAZINE_366TKM_MOLOT_75RND = new MongoId( - "5cbdc23eae9215001136a407" - ); - public static readonly MongoId MAGAZINE_366TKM_SKS_AALVX_35RND = new MongoId( - "5c5970672e221602b21d7855" - ); - public static readonly MongoId MAGAZINE_366TKM_SKS_INT_10RND = new MongoId( - "587df3a12459772c28142567" - ); - public static readonly MongoId MAGAZINE_366TKM_ULTIMAG_30RND = new MongoId( - "6272874a6c47bd74f92e2087" - ); - public static readonly MongoId MAGAZINE_366TKM_VPO215_4RND = new MongoId( - "5de653abf76fdc1ce94a5a2a" - ); - public static readonly MongoId MAGAZINE_366TKM_X47_762_50RND = new MongoId( - "5cfe8010d7ad1a59283b14c6" - ); - public static readonly MongoId MAGAZINE_40X46_MSGL_0RND = new MongoId( - "627bce33f21bc425b06ab967" - ); - public static readonly MongoId MAGAZINE_45ACP_1911_7RND = new MongoId( - "5e81c4ca763d9f754677befa" - ); - public static readonly MongoId MAGAZINE_45ACP_G30_MAGEX_30RND = new MongoId( - "5fb651dc85f90547f674b6f4" - ); - public static readonly MongoId MAGAZINE_45ACP_GLOCK_45_13RND = new MongoId( - "5fb651b52b1b027b1f50bcff" - ); - public static readonly MongoId MAGAZINE_45ACP_MECGAR_11RND = new MongoId( - "5ef3448ab37dfd6af863525c" - ); - public static readonly MongoId MAGAZINE_45ACP_UMP_45_25RND = new MongoId( - "5fc3e466187fea44d52eda90" - ); - public static readonly MongoId MAGAZINE_45ACP_USP45_12RND = new MongoId( - "6193d338de3cdf1d2614a6fc" - ); - public static readonly MongoId MAGAZINE_45ACP_USP45T_12RND = new MongoId( - "6193d3149fb0c665d5490e32" - ); - public static readonly MongoId MAGAZINE_45ACP_USP45T_999RND = new MongoId( - "671d8b8c0959c721a50ca838" - ); - public static readonly MongoId MAGAZINE_45ACP_WILSON_7RND = new MongoId( - "5f3e77b26cda304dcc634057" - ); - public static readonly MongoId MAGAZINE_45ACP_WILSON_999RND = new MongoId( - "671d8b38b769f0d88c0950f8" - ); - public static readonly MongoId MAGAZINE_46X30_MP7_20RND = new MongoId( - "5ba264f6d4351e0034777d52" - ); - public static readonly MongoId MAGAZINE_46X30_MP7_30RND = new MongoId( - "5ba2657ed4351e0035628ff2" - ); - public static readonly MongoId MAGAZINE_46X30_MP7_40RND = new MongoId( - "5ba26586d4351e44f824b340" - ); - public static readonly MongoId MAGAZINE_545X39_6L18_45RND = new MongoId( - "564ca9df4bdc2d35148b4569" - ); - public static readonly MongoId MAGAZINE_545X39_6L20_30RND = new MongoId( - "564ca99c4bdc2d16268b4589" - ); - public static readonly MongoId MAGAZINE_545X39_6L23_30RND = new MongoId( - "55d480c04bdc2d1d4e8b456a" - ); - public static readonly MongoId MAGAZINE_545X39_6L23_PLUM_30RND = new MongoId( - "5cbdaf89ae9215000e5b9c94" - ); - public static readonly MongoId MAGAZINE_545X39_6L26_45RND = new MongoId( - "55d481904bdc2d8c2f8b456a" - ); - public static readonly MongoId MAGAZINE_545X39_6L31_60RND = new MongoId( - "55d482194bdc2d1d4e8b456b" - ); - public static readonly MongoId MAGAZINE_545X39_AK12_30RND = new MongoId( - "5bed61680db834001d2c45ab" - ); - public static readonly MongoId MAGAZINE_545X39_AK12_OLD_30RND = new MongoId( - "649ec30cb013f04a700e60fb" - ); - public static readonly MongoId MAGAZINE_545X39_GEN_M3_30RND = new MongoId( - "5aaa4194e5b5b055d06310a5" - ); - public static readonly MongoId MAGAZINE_545X39_RPK16_DRUM_95RND = new MongoId( - "5bed625c0db834001c062946" - ); - public static readonly MongoId MAGAZINE_545X39_SAIGA_545_10RND = new MongoId( - "55d4837c4bdc2d1d4e8b456c" - ); - public static readonly MongoId MAGAZINE_545X39_SAIGA_545_20RND = new MongoId( - "64b9e265c94d0d15c5027e35" - ); - public static readonly MongoId MAGAZINE_556X45_6L29_30RND = new MongoId( - "5ac66c5d5acfc4001718d314" - ); - public static readonly MongoId MAGAZINE_556X45_AR_CMAG_100RND = new MongoId( - "6761765f1f08ed5e8800b7a6" - ); - public static readonly MongoId MAGAZINE_556X45_AUG_10RND = new MongoId( - "630e1adbbd357927e4007c09" - ); - public static readonly MongoId MAGAZINE_556X45_AUG_30RND = new MongoId( - "62e7c98b550c8218d602cbb4" - ); - public static readonly MongoId MAGAZINE_556X45_AUG_42RND = new MongoId( - "630e295c984633f1fb0e7c30" - ); - public static readonly MongoId MAGAZINE_556X45_BATTLEMAG_30RND = new MongoId( - "5c6d46132e221601da357d56" - ); - public static readonly MongoId MAGAZINE_556X45_C10_AK_30RND = new MongoId( - "5c0548ae0db834001966a3c2" - ); - public static readonly MongoId MAGAZINE_556X45_G36_30RND = new MongoId( - "62307b7b10d2321fa8741921" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_10RND = new MongoId( - "5aaa5e60e5b5b000140293d6" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_20RND = new MongoId( - "5448c1d04bdc2dff2f8b4569" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_30RND = new MongoId( - "5aaa5dfee5b5b000140293d3" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_40RND = new MongoId( - "544a378f4bdc2d30388b4567" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_AIRSOFT_30RND = new MongoId( - "6241c2c2117ad530666a5108" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_FDE_30RND = new MongoId( - "5d1340b3d7ad1a0b52682ed7" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_FDE_40RND = new MongoId( - "5d1340bdd7ad1a0e8d245aab" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_WINDOW_30RND = new MongoId( - "55802d5f4bdc2dac148b458e" - ); - public static readonly MongoId MAGAZINE_556X45_GEN_M3_WINDOW_FDE_30RND = new MongoId( - "5d1340cad7ad1a0b0b249869" - ); - public static readonly MongoId MAGAZINE_556X45_HK_POLY_30RND = new MongoId( - "5c6d42cb2e2216000e69d7d1" - ); - public static readonly MongoId MAGAZINE_556X45_HK_STEEL_30RND = new MongoId( - "5c05413a0db834001c390617" - ); - public static readonly MongoId MAGAZINE_556X45_MAG5100_100RND = new MongoId( - "5c6592372e221600133e47d7" - ); - public static readonly MongoId MAGAZINE_556X45_MAG560_60RND = new MongoId( - "544a37c44bdc2d25388b4567" - ); - public static readonly MongoId MAGAZINE_556X45_MK16_30RND = new MongoId( - "61840bedd92c473c77021635" - ); - public static readonly MongoId MAGAZINE_556X45_MK16_FDE_30RND = new MongoId( - "61840d85568c120fdd2962a5" - ); - public static readonly MongoId MAGAZINE_556X45_PM_GEN2_30RND = new MongoId( - "5c6d450c2e221600114c997d" - ); - public static readonly MongoId MAGAZINE_556X45_PMAG_D60_60RND = new MongoId( - "59c1383d86f774290a37e0ca" - ); - public static readonly MongoId MAGAZINE_556X45_STANAG_30RND = new MongoId( - "55d4887d4bdc2d962f8b4570" - ); - public static readonly MongoId MAGAZINE_57X28_57_20RND = new MongoId( - "5d3eb5eca4b9363b1f22f8e4" - ); - public static readonly MongoId MAGAZINE_57X28_P90_50RND = new MongoId( - "5cc70093e4a949033c734312" - ); - public static readonly MongoId MAGAZINE_762X25TT_PPSH_35RND = new MongoId( - "5ea034eb5aad6446a939737b" - ); - public static readonly MongoId MAGAZINE_762X25TT_PPSH_71RND = new MongoId( - "5ea034f65aad6446a939737e" - ); - public static readonly MongoId MAGAZINE_762X25TT_TT105_8RND = new MongoId( - "571a29dc2459771fb2755a6a" - ); - public static readonly MongoId MAGAZINE_762X25TT_TT105_999RND = new MongoId( - "671d85439ae8365d69117ba6" - ); - public static readonly MongoId MAGAZINE_762X35_MOLOT_223_45RND = new MongoId( - "6764139c44b3c96e7b0e2f7b" - ); - public static readonly MongoId MAGAZINE_762X39_BUBEN_100RND = new MongoId( - "6513f0a194c72326990a3868" - ); - public static readonly MongoId MAGAZINE_762X51_417_762_10RND = new MongoId( - "617130016c780c1e710c9a24" - ); - public static readonly MongoId MAGAZINE_762X51_417_762_20RND = new MongoId( - "617131a4568c120fdd29482d" - ); - public static readonly MongoId MAGAZINE_762X51_AA70_10RND = new MongoId( - "5d25af8f8abbc3055079fec5" - ); - public static readonly MongoId MAGAZINE_762X51_AA70_20RND = new MongoId( - "5cf12a15d7f00c05464b293f" - ); - public static readonly MongoId MAGAZINE_762X51_AICS_10RND = new MongoId( - "5d25a6538abbc306c62e630d" - ); - public static readonly MongoId MAGAZINE_762X51_AICS_5RND = new MongoId( - "5d25a4a98abbc30b917421a4" - ); - public static readonly MongoId MAGAZINE_762X51_ASSAULT_BOX_100RND = new MongoId( - "660ea4453786cc0af808a1be" - ); - public static readonly MongoId MAGAZINE_762X51_AXMC_308_10RND = new MongoId( - "628120f210e26c1f344e6558" - ); - public static readonly MongoId MAGAZINE_762X51_DVL10_10RND = new MongoId( - "5888988e24597752fe43a6fa" - ); - public static readonly MongoId MAGAZINE_762X51_FEED_TRAY_POUCH_100RND = new MongoId( - "660ea4ba5a58d057b009efab" - ); - public static readonly MongoId MAGAZINE_762X51_KAC_762_10RND = new MongoId( - "5df8f535bb49d91fb446d6b0" - ); - public static readonly MongoId MAGAZINE_762X51_KAC_762_20RND = new MongoId( - "5df8f541c41b2312ea3335e3" - ); - public static readonly MongoId MAGAZINE_762X51_L1A1_30RND = new MongoId( - "5b7d37845acfc400170e2f87" - ); - public static readonly MongoId MAGAZINE_762X51_L7AWM_20RND = new MongoId( - "65293c38fc460e50a509cb25" - ); - public static readonly MongoId MAGAZINE_762X51_L7AWM_25RND = new MongoId( - "65293c7a17e14363030ad308" - ); - public static readonly MongoId MAGAZINE_762X51_M14_30RND = new MongoId( - "5addcce35acfc4001a5fc635" - ); - public static readonly MongoId MAGAZINE_762X51_M1A_10RND = new MongoId( - "64b9e2037fdfb81df81e3c25" - ); - public static readonly MongoId MAGAZINE_762X51_M1A_20RND = new MongoId( - "5aaf8a0be5b5b00015693243" - ); - public static readonly MongoId MAGAZINE_762X51_MDT_12RND = new MongoId( - "5d25a6a48abbc306c62e6310" - ); - public static readonly MongoId MAGAZINE_762X51_MK17_20RND = new MongoId( - "618168dc8004cc50514c34fc" - ); - public static readonly MongoId MAGAZINE_762X51_MK17_20RND_FDE = new MongoId( - "6183d53f1cb55961fa0fdcda" - ); - public static readonly MongoId MAGAZINE_762X51_PMAG_762_20RND = new MongoId( - "5a3501acc4a282000d72293a" - ); - public static readonly MongoId MAGAZINE_762X51_PMAG_AC_10RND = new MongoId( - "5d25a7b88abbc3054f3e60bc" - ); - public static readonly MongoId MAGAZINE_762X51_PMAG_AC_5RND = new MongoId( - "5ce69cbad7f00c00b61c5098" - ); - public static readonly MongoId MAGAZINE_762X51_SA58_MMW_20RND = new MongoId( - "5b7c2d1d5acfc43d1028532a" - ); - public static readonly MongoId MAGAZINE_762X51_SA58FAL_10RND = new MongoId( - "5b7bef1e5acfc43d82528402" - ); - public static readonly MongoId MAGAZINE_762X51_SA58FAL_20RND = new MongoId( - "5b099ac65acfc400186331e1" - ); - public static readonly MongoId MAGAZINE_762X51_SA58FAL_30RND = new MongoId( - "5b7bef5d5acfc43bca7067a3" - ); - public static readonly MongoId MAGAZINE_762X51_T5000M_5RND = new MongoId( - "5df25b6c0b92095fd441e4cf" - ); - public static readonly MongoId MAGAZINE_762X51_VPO101_10RND = new MongoId( - "5c503ad32e2216398b5aada2" - ); - public static readonly MongoId MAGAZINE_762X51_VPO101_5RND = new MongoId( - "5c503ac82e221602b21d6e9a" - ); - public static readonly MongoId MAGAZINE_762X51_WYATT_10RND = new MongoId( - "5bfeaa0f0db834001b734927" - ); - public static readonly MongoId MAGAZINE_762X51_WYATT_5RND = new MongoId( - "5bfea7ad0db834001c38f1ee" - ); - public static readonly MongoId MAGAZINE_762X51_X14_762_50RND = new MongoId( - "5addccf45acfc400185c2989" - ); - public static readonly MongoId MAGAZINE_762X51_X25_50RND = new MongoId( - "6761770e48fa5c377e06fc3c" - ); - public static readonly MongoId MAGAZINE_762X51_XFAL_50RND = new MongoId( - "5b7bef9c5acfc43d102852ec" - ); - public static readonly MongoId MAGAZINE_762X54R_AA762R_02_10RND = new MongoId( - "5bae13ded4351e44f824bf38" - ); - public static readonly MongoId MAGAZINE_762X54R_AVT_15RND = new MongoId( - "641074a07fd350b98c0b3f96" - ); - public static readonly MongoId MAGAZINE_762X54R_MOSIN_5RND = new MongoId( - "5ae0973a5acfc4001562206c" - ); - public static readonly MongoId MAGAZINE_762X54R_PK_100RND = new MongoId( - "646372518610c40fc20204e8" - ); - public static readonly MongoId MAGAZINE_762X54R_PKTM_250RND = new MongoId( - "65785979bec02a3fe82c181e" - ); - public static readonly MongoId MAGAZINE_762X54R_SV98_10RND = new MongoId( - "559ba5b34bdc2d1f1a8b4582" - ); - public static readonly MongoId MAGAZINE_762X54R_SVD_10RND = new MongoId( - "5c471c442e221602b542a6f8" - ); - public static readonly MongoId MAGAZINE_762X54R_SVD_20RND = new MongoId( - "5c88f24b2e22160bc12c69a6" - ); - public static readonly MongoId MAGAZINE_762X54R_SVT_10_10RND = new MongoId( - "6422e1ea3c0f06190302161a" - ); - public static readonly MongoId MAGAZINE_86X70_AXMC_338LM_10RND = new MongoId( - "628120fd5631d45211793c9f" - ); - public static readonly MongoId MAGAZINE_86X70_M10_338_8RND = new MongoId( - "673cbdfad0453ba50c0f76d6" - ); - public static readonly MongoId MAGAZINE_86X70_MK18_10RND = new MongoId( - "5fc23426900b1d5091531e15" - ); - public static readonly MongoId MAGAZINE_9X18PM_APS_20RND = new MongoId( - "5a17fb03fcdbcbcae668728f" - ); - public static readonly MongoId MAGAZINE_9X18PM_PM_8RND = new MongoId( - "5448c12b4bdc2d02308b456f" - ); - public static readonly MongoId MAGAZINE_9X18PM_PM_999RND = new MongoId( - "670e8eab8c1bb0e5a7075acf" - ); - public static readonly MongoId MAGAZINE_9X18PM_PM_DRUM_84RND = new MongoId( - "55d485be4bdc2d962f8b456f" - ); - public static readonly MongoId MAGAZINE_9X18PM_PP91_20RND = new MongoId( - "57d14e1724597714010c3f4b" - ); - public static readonly MongoId MAGAZINE_9X18PM_PP91_30RND = new MongoId( - "57d1519e24597714373db79d" - ); - public static readonly MongoId MAGAZINE_9X19_BIG_STICK_24RND = new MongoId( - "630769c4962d0247b029dc60" - ); - public static readonly MongoId MAGAZINE_9X19_BIG_STICK_31RND = new MongoId( - "630767c37d50ff5e8a1ea71a" - ); - public static readonly MongoId MAGAZINE_9X19_BIG_STICK_33RND = new MongoId( - "5a7ad2e851dfba0016153692" - ); - public static readonly MongoId MAGAZINE_9X19_CR_CYL_6RND = new MongoId( - "624c3074dbbd335e8e6becf3" - ); - public static readonly MongoId MAGAZINE_9X19_CX4_30RND = new MongoId( - "676176b762e0497044079f49" - ); - public static readonly MongoId MAGAZINE_9X19_G_SGMT_50RND = new MongoId( - "5a718f958dc32e00094b97e7" - ); - public static readonly MongoId MAGAZINE_9X19_G19X_19RND = new MongoId( - "63076701a987397c0816d21b" - ); - public static readonly MongoId MAGAZINE_9X19_G19X_999RND = new MongoId( - "671d8ac8a3e45c1f59082799" - ); - public static readonly MongoId MAGAZINE_9X19_GL9_21RND = new MongoId( - "5a718da68dc32e000d46d264" - ); - public static readonly MongoId MAGAZINE_9X19_GLOCK_9X19_17RND = new MongoId( - "5a718b548dc32e000d46d262" - ); - public static readonly MongoId MAGAZINE_9X19_M9A3_17RND = new MongoId( - "5cadc2e0ae9215051e1c21e7" - ); - public static readonly MongoId MAGAZINE_9X19_MP443_18RND = new MongoId( - "576a5ed62459771e9c2096cb" - ); - public static readonly MongoId MAGAZINE_9X19_MP443_999RND = new MongoId( - "671d8617a3e45c1f5908278c" - ); - public static readonly MongoId MAGAZINE_9X19_MP5_20RND = new MongoId( - "5d2f213448f0355009199284" - ); - public static readonly MongoId MAGAZINE_9X19_MP5_30RND = new MongoId( - "5926c3b286f774640d189b6b" - ); - public static readonly MongoId MAGAZINE_9X19_MP9_15RND = new MongoId( - "5de8e8dafd6b4e6e2276dc32" - ); - public static readonly MongoId MAGAZINE_9X19_MP9_20RND = new MongoId( - "5de8ea8ffd6b4e6e2276dc35" - ); - public static readonly MongoId MAGAZINE_9X19_MP9_25RND = new MongoId( - "5de8eaadbbaf010b10528a6d" - ); - public static readonly MongoId MAGAZINE_9X19_MP9_30RND = new MongoId( - "5de8eac42a78646d96665d91" - ); - public static readonly MongoId MAGAZINE_9X19_MPX_20RND = new MongoId( - "5c5db6552e2216001026119d" - ); - public static readonly MongoId MAGAZINE_9X19_MPX_30RND = new MongoId( - "5894a05586f774094708ef75" - ); - public static readonly MongoId MAGAZINE_9X19_MPX_F5_50RND = new MongoId( - "5c5db6742e2216000f1b2852" - ); - public static readonly MongoId MAGAZINE_9X19_MPX_TTI_41RND = new MongoId( - "5c5db6652e221600113fba51" - ); - public static readonly MongoId MAGAZINE_9X19_P226_15RND = new MongoId( - "56d59948d2720bb7418b4582" - ); - public static readonly MongoId MAGAZINE_9X19_P226_20RND = new MongoId( - "5c920e902e221644f31c3c99" - ); - public static readonly MongoId MAGAZINE_9X19_PL15_16RND = new MongoId( - "602286df23506e50807090c6" - ); - public static readonly MongoId MAGAZINE_9X19_PP19_F5_50RND = new MongoId( - "6749c40822a2740bb408d066" - ); - public static readonly MongoId MAGAZINE_9X19_PP1901_30RND = new MongoId( - "599860ac86f77436b225ed1a" - ); - public static readonly MongoId MAGAZINE_9X19_SB7_10RND = new MongoId( - "5998529a86f774647f44f421" - ); - public static readonly MongoId MAGAZINE_9X19_SG919_20RND = new MongoId( - "5c0673fb0db8340023300271" - ); - public static readonly MongoId MAGAZINE_9X19_SG919_30RND = new MongoId( - "5c0672ed0db834001b7353f3" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_20RND = new MongoId( - "66992713ae08c5c29e0c4f97" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_25RND = new MongoId( - "6699271b9950f5f4cd060299" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_32RND = new MongoId( - "669927203c4fda6471005cbe" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_40RND = new MongoId( - "66992725ae08c5c29e0c4f9a" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_50RND = new MongoId( - "6699272a3c4fda6471005cc1" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_CMAG_100RND = new MongoId( - "676176a162e0497044079f46" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_PRO_20RND = new MongoId( - "668031ffe3e7eb26e8004cdd" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_PRO_25RND = new MongoId( - "66866f4ec3d473265104f381" - ); - public static readonly MongoId MAGAZINE_9X19_UZI_PRO_32RND = new MongoId( - "66866f622a2296a8d9099639" - ); - public static readonly MongoId MAGAZINE_9X19_X5_MP5_50RND = new MongoId( - "5a351711c4a282000b1521a4" - ); - public static readonly MongoId MAGAZINE_9X21_SR1MP_18RND = new MongoId( - "59f99a7d86f7745b134aa97b" - ); - public static readonly MongoId MAGAZINE_9X21_SR2M_20RND = new MongoId( - "633a98eab8b0506e48497c1a" - ); - public static readonly MongoId MAGAZINE_9X21_SR2M_30RND = new MongoId( - "62e153bcdb1a5c41971c1b5b" - ); - public static readonly MongoId MAGAZINE_9X33R_CR_CYL_6RND = new MongoId( - "619f54a1d25cbd424731fb99" - ); - public static readonly MongoId MAGAZINE_9X33R_CR_LOAD_0RND = new MongoId( - "61a4cda622af7f4f6a3ce617" - ); + public static readonly MongoId MAGAZINE_20G_2001_SB3X2_2RND = new MongoId("5a38ee51c4a282000c5a955c"); + public static readonly MongoId MAGAZINE_20G_SB3X4_4RND = new MongoId("5a38ed75c4a28232996e40c6"); + public static readonly MongoId MAGAZINE_20G_SB3X5_5RND = new MongoId("5c6161fb2e221600113fbde5"); + public static readonly MongoId MAGAZINE_20X1MM_DRUM_20RND = new MongoId("66015dc4aaad2f54cb04c56a"); + public static readonly MongoId MAGAZINE_23X75_KS23MX3_3RND = new MongoId("5f647d9f8499b57dc40ddb93"); + public static readonly MongoId MAGAZINE_30X29_AGS30_99RND = new MongoId("5d52d479a4b936793d58c76b"); + public static readonly MongoId MAGAZINE_366TKM_6610_20RND = new MongoId("587df583245977373c4f1129"); + public static readonly MongoId MAGAZINE_366TKM_6L10_30RND = new MongoId("5a01c29586f77474660c694c"); + public static readonly MongoId MAGAZINE_366TKM_6P2_BAK_40RND = new MongoId("5b1fb3e15acfc4001637f068"); + public static readonly MongoId MAGAZINE_366TKM_6P2SB11_40RND = new MongoId("59e5f5a486f7746c530b3ce2"); + public static readonly MongoId MAGAZINE_366TKM_AK_AL_10RND = new MongoId("5b1fd4e35acfc40018633c39"); + public static readonly MongoId MAGAZINE_366TKM_AK_RIBBED_10RND = new MongoId("59e5d83b86f7745aed03d262"); + public static readonly MongoId MAGAZINE_366TKM_AK103_30RND = new MongoId("5ac66bea5acfc43b321d4aec"); + public static readonly MongoId MAGAZINE_366TKM_AK30_30RND = new MongoId("59fafc5086f7740dbe19f6c3"); + public static readonly MongoId MAGAZINE_366TKM_AK30_FDE_30RND = new MongoId("59fafc9386f774067d462453"); + public static readonly MongoId MAGAZINE_366TKM_AK55_30RND = new MongoId("59d625f086f774661516605d"); + public static readonly MongoId MAGAZINE_366TKM_AKA16_73RND = new MongoId("5c6175362e221600133e3b94"); + public static readonly MongoId MAGAZINE_366TKM_AKMS_AL_30RND = new MongoId("5a0060fc86f7745793204432"); + public static readonly MongoId MAGAZINE_366TKM_GEN_M3_20RND = new MongoId("64b9cf0ac12b9c38db26923a"); + public static readonly MongoId MAGAZINE_366TKM_GEN_M3_30RND = new MongoId("59d6272486f77466146386ff"); + public static readonly MongoId MAGAZINE_366TKM_GEN_M3_BANANA_30RND = new MongoId("5e21a3c67e40bd02257a008a"); + public static readonly MongoId MAGAZINE_366TKM_KCI_SKS_75RND = new MongoId("61695095d92c473c7702147a"); + public static readonly MongoId MAGAZINE_366TKM_MOLOT_75RND = new MongoId("5cbdc23eae9215001136a407"); + public static readonly MongoId MAGAZINE_366TKM_SKS_AALVX_35RND = new MongoId("5c5970672e221602b21d7855"); + public static readonly MongoId MAGAZINE_366TKM_SKS_INT_10RND = new MongoId("587df3a12459772c28142567"); + public static readonly MongoId MAGAZINE_366TKM_ULTIMAG_30RND = new MongoId("6272874a6c47bd74f92e2087"); + public static readonly MongoId MAGAZINE_366TKM_VPO215_4RND = new MongoId("5de653abf76fdc1ce94a5a2a"); + public static readonly MongoId MAGAZINE_366TKM_X47_762_50RND = new MongoId("5cfe8010d7ad1a59283b14c6"); + public static readonly MongoId MAGAZINE_40X46_MSGL_0RND = new MongoId("627bce33f21bc425b06ab967"); + public static readonly MongoId MAGAZINE_45ACP_1911_7RND = new MongoId("5e81c4ca763d9f754677befa"); + public static readonly MongoId MAGAZINE_45ACP_G30_MAGEX_30RND = new MongoId("5fb651dc85f90547f674b6f4"); + public static readonly MongoId MAGAZINE_45ACP_GLOCK_45_13RND = new MongoId("5fb651b52b1b027b1f50bcff"); + public static readonly MongoId MAGAZINE_45ACP_MECGAR_11RND = new MongoId("5ef3448ab37dfd6af863525c"); + public static readonly MongoId MAGAZINE_45ACP_UMP_45_25RND = new MongoId("5fc3e466187fea44d52eda90"); + public static readonly MongoId MAGAZINE_45ACP_USP45_12RND = new MongoId("6193d338de3cdf1d2614a6fc"); + public static readonly MongoId MAGAZINE_45ACP_USP45T_12RND = new MongoId("6193d3149fb0c665d5490e32"); + public static readonly MongoId MAGAZINE_45ACP_USP45T_999RND = new MongoId("671d8b8c0959c721a50ca838"); + public static readonly MongoId MAGAZINE_45ACP_WILSON_7RND = new MongoId("5f3e77b26cda304dcc634057"); + public static readonly MongoId MAGAZINE_45ACP_WILSON_999RND = new MongoId("671d8b38b769f0d88c0950f8"); + public static readonly MongoId MAGAZINE_46X30_MP7_20RND = new MongoId("5ba264f6d4351e0034777d52"); + public static readonly MongoId MAGAZINE_46X30_MP7_30RND = new MongoId("5ba2657ed4351e0035628ff2"); + public static readonly MongoId MAGAZINE_46X30_MP7_40RND = new MongoId("5ba26586d4351e44f824b340"); + public static readonly MongoId MAGAZINE_545X39_6L18_45RND = new MongoId("564ca9df4bdc2d35148b4569"); + public static readonly MongoId MAGAZINE_545X39_6L20_30RND = new MongoId("564ca99c4bdc2d16268b4589"); + public static readonly MongoId MAGAZINE_545X39_6L23_30RND = new MongoId("55d480c04bdc2d1d4e8b456a"); + public static readonly MongoId MAGAZINE_545X39_6L23_PLUM_30RND = new MongoId("5cbdaf89ae9215000e5b9c94"); + public static readonly MongoId MAGAZINE_545X39_6L26_45RND = new MongoId("55d481904bdc2d8c2f8b456a"); + public static readonly MongoId MAGAZINE_545X39_6L31_60RND = new MongoId("55d482194bdc2d1d4e8b456b"); + public static readonly MongoId MAGAZINE_545X39_AK12_30RND = new MongoId("5bed61680db834001d2c45ab"); + public static readonly MongoId MAGAZINE_545X39_AK12_OLD_30RND = new MongoId("649ec30cb013f04a700e60fb"); + public static readonly MongoId MAGAZINE_545X39_GEN_M3_30RND = new MongoId("5aaa4194e5b5b055d06310a5"); + public static readonly MongoId MAGAZINE_545X39_RPK16_DRUM_95RND = new MongoId("5bed625c0db834001c062946"); + public static readonly MongoId MAGAZINE_545X39_SAIGA_545_10RND = new MongoId("55d4837c4bdc2d1d4e8b456c"); + public static readonly MongoId MAGAZINE_545X39_SAIGA_545_20RND = new MongoId("64b9e265c94d0d15c5027e35"); + public static readonly MongoId MAGAZINE_556X45_6L29_30RND = new MongoId("5ac66c5d5acfc4001718d314"); + public static readonly MongoId MAGAZINE_556X45_AR_CMAG_100RND = new MongoId("6761765f1f08ed5e8800b7a6"); + public static readonly MongoId MAGAZINE_556X45_AUG_10RND = new MongoId("630e1adbbd357927e4007c09"); + public static readonly MongoId MAGAZINE_556X45_AUG_30RND = new MongoId("62e7c98b550c8218d602cbb4"); + public static readonly MongoId MAGAZINE_556X45_AUG_42RND = new MongoId("630e295c984633f1fb0e7c30"); + public static readonly MongoId MAGAZINE_556X45_BATTLEMAG_30RND = new MongoId("5c6d46132e221601da357d56"); + public static readonly MongoId MAGAZINE_556X45_C10_AK_30RND = new MongoId("5c0548ae0db834001966a3c2"); + public static readonly MongoId MAGAZINE_556X45_G36_30RND = new MongoId("62307b7b10d2321fa8741921"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_10RND = new MongoId("5aaa5e60e5b5b000140293d6"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_20RND = new MongoId("5448c1d04bdc2dff2f8b4569"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_30RND = new MongoId("5aaa5dfee5b5b000140293d3"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_40RND = new MongoId("544a378f4bdc2d30388b4567"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_AIRSOFT_30RND = new MongoId("6241c2c2117ad530666a5108"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_FDE_30RND = new MongoId("5d1340b3d7ad1a0b52682ed7"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_FDE_40RND = new MongoId("5d1340bdd7ad1a0e8d245aab"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_WINDOW_30RND = new MongoId("55802d5f4bdc2dac148b458e"); + public static readonly MongoId MAGAZINE_556X45_GEN_M3_WINDOW_FDE_30RND = new MongoId("5d1340cad7ad1a0b0b249869"); + public static readonly MongoId MAGAZINE_556X45_HK_POLY_30RND = new MongoId("5c6d42cb2e2216000e69d7d1"); + public static readonly MongoId MAGAZINE_556X45_HK_STEEL_30RND = new MongoId("5c05413a0db834001c390617"); + public static readonly MongoId MAGAZINE_556X45_MAG5100_100RND = new MongoId("5c6592372e221600133e47d7"); + public static readonly MongoId MAGAZINE_556X45_MAG560_60RND = new MongoId("544a37c44bdc2d25388b4567"); + public static readonly MongoId MAGAZINE_556X45_MK16_30RND = new MongoId("61840bedd92c473c77021635"); + public static readonly MongoId MAGAZINE_556X45_MK16_FDE_30RND = new MongoId("61840d85568c120fdd2962a5"); + public static readonly MongoId MAGAZINE_556X45_PM_GEN2_30RND = new MongoId("5c6d450c2e221600114c997d"); + public static readonly MongoId MAGAZINE_556X45_PMAG_D60_60RND = new MongoId("59c1383d86f774290a37e0ca"); + public static readonly MongoId MAGAZINE_556X45_STANAG_30RND = new MongoId("55d4887d4bdc2d962f8b4570"); + public static readonly MongoId MAGAZINE_57X28_57_20RND = new MongoId("5d3eb5eca4b9363b1f22f8e4"); + public static readonly MongoId MAGAZINE_57X28_P90_50RND = new MongoId("5cc70093e4a949033c734312"); + public static readonly MongoId MAGAZINE_762X25TT_PPSH_35RND = new MongoId("5ea034eb5aad6446a939737b"); + public static readonly MongoId MAGAZINE_762X25TT_PPSH_71RND = new MongoId("5ea034f65aad6446a939737e"); + public static readonly MongoId MAGAZINE_762X25TT_TT105_8RND = new MongoId("571a29dc2459771fb2755a6a"); + public static readonly MongoId MAGAZINE_762X25TT_TT105_999RND = new MongoId("671d85439ae8365d69117ba6"); + public static readonly MongoId MAGAZINE_762X35_MOLOT_223_45RND = new MongoId("6764139c44b3c96e7b0e2f7b"); + public static readonly MongoId MAGAZINE_762X39_BUBEN_100RND = new MongoId("6513f0a194c72326990a3868"); + public static readonly MongoId MAGAZINE_762X51_417_762_10RND = new MongoId("617130016c780c1e710c9a24"); + public static readonly MongoId MAGAZINE_762X51_417_762_20RND = new MongoId("617131a4568c120fdd29482d"); + public static readonly MongoId MAGAZINE_762X51_AA70_10RND = new MongoId("5d25af8f8abbc3055079fec5"); + public static readonly MongoId MAGAZINE_762X51_AA70_20RND = new MongoId("5cf12a15d7f00c05464b293f"); + public static readonly MongoId MAGAZINE_762X51_AICS_10RND = new MongoId("5d25a6538abbc306c62e630d"); + public static readonly MongoId MAGAZINE_762X51_AICS_5RND = new MongoId("5d25a4a98abbc30b917421a4"); + public static readonly MongoId MAGAZINE_762X51_ASSAULT_BOX_100RND = new MongoId("660ea4453786cc0af808a1be"); + public static readonly MongoId MAGAZINE_762X51_AXMC_308_10RND = new MongoId("628120f210e26c1f344e6558"); + public static readonly MongoId MAGAZINE_762X51_DVL10_10RND = new MongoId("5888988e24597752fe43a6fa"); + public static readonly MongoId MAGAZINE_762X51_FEED_TRAY_POUCH_100RND = new MongoId("660ea4ba5a58d057b009efab"); + public static readonly MongoId MAGAZINE_762X51_KAC_762_10RND = new MongoId("5df8f535bb49d91fb446d6b0"); + public static readonly MongoId MAGAZINE_762X51_KAC_762_20RND = new MongoId("5df8f541c41b2312ea3335e3"); + public static readonly MongoId MAGAZINE_762X51_L1A1_30RND = new MongoId("5b7d37845acfc400170e2f87"); + public static readonly MongoId MAGAZINE_762X51_L7AWM_20RND = new MongoId("65293c38fc460e50a509cb25"); + public static readonly MongoId MAGAZINE_762X51_L7AWM_25RND = new MongoId("65293c7a17e14363030ad308"); + public static readonly MongoId MAGAZINE_762X51_M14_30RND = new MongoId("5addcce35acfc4001a5fc635"); + public static readonly MongoId MAGAZINE_762X51_M1A_10RND = new MongoId("64b9e2037fdfb81df81e3c25"); + public static readonly MongoId MAGAZINE_762X51_M1A_20RND = new MongoId("5aaf8a0be5b5b00015693243"); + public static readonly MongoId MAGAZINE_762X51_MDT_12RND = new MongoId("5d25a6a48abbc306c62e6310"); + public static readonly MongoId MAGAZINE_762X51_MK17_20RND = new MongoId("618168dc8004cc50514c34fc"); + public static readonly MongoId MAGAZINE_762X51_MK17_20RND_FDE = new MongoId("6183d53f1cb55961fa0fdcda"); + public static readonly MongoId MAGAZINE_762X51_PMAG_762_20RND = new MongoId("5a3501acc4a282000d72293a"); + public static readonly MongoId MAGAZINE_762X51_PMAG_AC_10RND = new MongoId("5d25a7b88abbc3054f3e60bc"); + public static readonly MongoId MAGAZINE_762X51_PMAG_AC_5RND = new MongoId("5ce69cbad7f00c00b61c5098"); + public static readonly MongoId MAGAZINE_762X51_SA58_MMW_20RND = new MongoId("5b7c2d1d5acfc43d1028532a"); + public static readonly MongoId MAGAZINE_762X51_SA58FAL_10RND = new MongoId("5b7bef1e5acfc43d82528402"); + public static readonly MongoId MAGAZINE_762X51_SA58FAL_20RND = new MongoId("5b099ac65acfc400186331e1"); + public static readonly MongoId MAGAZINE_762X51_SA58FAL_30RND = new MongoId("5b7bef5d5acfc43bca7067a3"); + public static readonly MongoId MAGAZINE_762X51_T5000M_5RND = new MongoId("5df25b6c0b92095fd441e4cf"); + public static readonly MongoId MAGAZINE_762X51_VPO101_10RND = new MongoId("5c503ad32e2216398b5aada2"); + public static readonly MongoId MAGAZINE_762X51_VPO101_5RND = new MongoId("5c503ac82e221602b21d6e9a"); + public static readonly MongoId MAGAZINE_762X51_WYATT_10RND = new MongoId("5bfeaa0f0db834001b734927"); + public static readonly MongoId MAGAZINE_762X51_WYATT_5RND = new MongoId("5bfea7ad0db834001c38f1ee"); + public static readonly MongoId MAGAZINE_762X51_X14_762_50RND = new MongoId("5addccf45acfc400185c2989"); + public static readonly MongoId MAGAZINE_762X51_X25_50RND = new MongoId("6761770e48fa5c377e06fc3c"); + public static readonly MongoId MAGAZINE_762X51_XFAL_50RND = new MongoId("5b7bef9c5acfc43d102852ec"); + public static readonly MongoId MAGAZINE_762X54R_AA762R_02_10RND = new MongoId("5bae13ded4351e44f824bf38"); + public static readonly MongoId MAGAZINE_762X54R_AVT_15RND = new MongoId("641074a07fd350b98c0b3f96"); + public static readonly MongoId MAGAZINE_762X54R_MOSIN_5RND = new MongoId("5ae0973a5acfc4001562206c"); + public static readonly MongoId MAGAZINE_762X54R_PK_100RND = new MongoId("646372518610c40fc20204e8"); + public static readonly MongoId MAGAZINE_762X54R_PKTM_250RND = new MongoId("65785979bec02a3fe82c181e"); + public static readonly MongoId MAGAZINE_762X54R_SV98_10RND = new MongoId("559ba5b34bdc2d1f1a8b4582"); + public static readonly MongoId MAGAZINE_762X54R_SVD_10RND = new MongoId("5c471c442e221602b542a6f8"); + public static readonly MongoId MAGAZINE_762X54R_SVD_20RND = new MongoId("5c88f24b2e22160bc12c69a6"); + public static readonly MongoId MAGAZINE_762X54R_SVT_10_10RND = new MongoId("6422e1ea3c0f06190302161a"); + public static readonly MongoId MAGAZINE_86X70_AXMC_338LM_10RND = new MongoId("628120fd5631d45211793c9f"); + public static readonly MongoId MAGAZINE_86X70_M10_338_8RND = new MongoId("673cbdfad0453ba50c0f76d6"); + public static readonly MongoId MAGAZINE_86X70_MK18_10RND = new MongoId("5fc23426900b1d5091531e15"); + public static readonly MongoId MAGAZINE_9X18PM_APS_20RND = new MongoId("5a17fb03fcdbcbcae668728f"); + public static readonly MongoId MAGAZINE_9X18PM_PM_8RND = new MongoId("5448c12b4bdc2d02308b456f"); + public static readonly MongoId MAGAZINE_9X18PM_PM_999RND = new MongoId("670e8eab8c1bb0e5a7075acf"); + public static readonly MongoId MAGAZINE_9X18PM_PM_DRUM_84RND = new MongoId("55d485be4bdc2d962f8b456f"); + public static readonly MongoId MAGAZINE_9X18PM_PP91_20RND = new MongoId("57d14e1724597714010c3f4b"); + public static readonly MongoId MAGAZINE_9X18PM_PP91_30RND = new MongoId("57d1519e24597714373db79d"); + public static readonly MongoId MAGAZINE_9X19_BIG_STICK_24RND = new MongoId("630769c4962d0247b029dc60"); + public static readonly MongoId MAGAZINE_9X19_BIG_STICK_31RND = new MongoId("630767c37d50ff5e8a1ea71a"); + public static readonly MongoId MAGAZINE_9X19_BIG_STICK_33RND = new MongoId("5a7ad2e851dfba0016153692"); + public static readonly MongoId MAGAZINE_9X19_CR_CYL_6RND = new MongoId("624c3074dbbd335e8e6becf3"); + public static readonly MongoId MAGAZINE_9X19_CX4_30RND = new MongoId("676176b762e0497044079f49"); + public static readonly MongoId MAGAZINE_9X19_G_SGMT_50RND = new MongoId("5a718f958dc32e00094b97e7"); + public static readonly MongoId MAGAZINE_9X19_G19X_19RND = new MongoId("63076701a987397c0816d21b"); + public static readonly MongoId MAGAZINE_9X19_G19X_999RND = new MongoId("671d8ac8a3e45c1f59082799"); + public static readonly MongoId MAGAZINE_9X19_GL9_21RND = new MongoId("5a718da68dc32e000d46d264"); + public static readonly MongoId MAGAZINE_9X19_GLOCK_9X19_17RND = new MongoId("5a718b548dc32e000d46d262"); + public static readonly MongoId MAGAZINE_9X19_M9A3_17RND = new MongoId("5cadc2e0ae9215051e1c21e7"); + public static readonly MongoId MAGAZINE_9X19_MP443_18RND = new MongoId("576a5ed62459771e9c2096cb"); + public static readonly MongoId MAGAZINE_9X19_MP443_999RND = new MongoId("671d8617a3e45c1f5908278c"); + public static readonly MongoId MAGAZINE_9X19_MP5_20RND = new MongoId("5d2f213448f0355009199284"); + public static readonly MongoId MAGAZINE_9X19_MP5_30RND = new MongoId("5926c3b286f774640d189b6b"); + public static readonly MongoId MAGAZINE_9X19_MP9_15RND = new MongoId("5de8e8dafd6b4e6e2276dc32"); + public static readonly MongoId MAGAZINE_9X19_MP9_20RND = new MongoId("5de8ea8ffd6b4e6e2276dc35"); + public static readonly MongoId MAGAZINE_9X19_MP9_25RND = new MongoId("5de8eaadbbaf010b10528a6d"); + public static readonly MongoId MAGAZINE_9X19_MP9_30RND = new MongoId("5de8eac42a78646d96665d91"); + public static readonly MongoId MAGAZINE_9X19_MPX_20RND = new MongoId("5c5db6552e2216001026119d"); + public static readonly MongoId MAGAZINE_9X19_MPX_30RND = new MongoId("5894a05586f774094708ef75"); + public static readonly MongoId MAGAZINE_9X19_MPX_F5_50RND = new MongoId("5c5db6742e2216000f1b2852"); + public static readonly MongoId MAGAZINE_9X19_MPX_TTI_41RND = new MongoId("5c5db6652e221600113fba51"); + public static readonly MongoId MAGAZINE_9X19_P226_15RND = new MongoId("56d59948d2720bb7418b4582"); + public static readonly MongoId MAGAZINE_9X19_P226_20RND = new MongoId("5c920e902e221644f31c3c99"); + public static readonly MongoId MAGAZINE_9X19_PL15_16RND = new MongoId("602286df23506e50807090c6"); + public static readonly MongoId MAGAZINE_9X19_PP19_F5_50RND = new MongoId("6749c40822a2740bb408d066"); + public static readonly MongoId MAGAZINE_9X19_PP1901_30RND = new MongoId("599860ac86f77436b225ed1a"); + public static readonly MongoId MAGAZINE_9X19_SB7_10RND = new MongoId("5998529a86f774647f44f421"); + public static readonly MongoId MAGAZINE_9X19_SG919_20RND = new MongoId("5c0673fb0db8340023300271"); + public static readonly MongoId MAGAZINE_9X19_SG919_30RND = new MongoId("5c0672ed0db834001b7353f3"); + public static readonly MongoId MAGAZINE_9X19_UZI_20RND = new MongoId("66992713ae08c5c29e0c4f97"); + public static readonly MongoId MAGAZINE_9X19_UZI_25RND = new MongoId("6699271b9950f5f4cd060299"); + public static readonly MongoId MAGAZINE_9X19_UZI_32RND = new MongoId("669927203c4fda6471005cbe"); + public static readonly MongoId MAGAZINE_9X19_UZI_40RND = new MongoId("66992725ae08c5c29e0c4f9a"); + public static readonly MongoId MAGAZINE_9X19_UZI_50RND = new MongoId("6699272a3c4fda6471005cc1"); + public static readonly MongoId MAGAZINE_9X19_UZI_CMAG_100RND = new MongoId("676176a162e0497044079f46"); + public static readonly MongoId MAGAZINE_9X19_UZI_PRO_20RND = new MongoId("668031ffe3e7eb26e8004cdd"); + public static readonly MongoId MAGAZINE_9X19_UZI_PRO_25RND = new MongoId("66866f4ec3d473265104f381"); + public static readonly MongoId MAGAZINE_9X19_UZI_PRO_32RND = new MongoId("66866f622a2296a8d9099639"); + public static readonly MongoId MAGAZINE_9X19_X5_MP5_50RND = new MongoId("5a351711c4a282000b1521a4"); + public static readonly MongoId MAGAZINE_9X21_SR1MP_18RND = new MongoId("59f99a7d86f7745b134aa97b"); + public static readonly MongoId MAGAZINE_9X21_SR2M_20RND = new MongoId("633a98eab8b0506e48497c1a"); + public static readonly MongoId MAGAZINE_9X21_SR2M_30RND = new MongoId("62e153bcdb1a5c41971c1b5b"); + public static readonly MongoId MAGAZINE_9X33R_CR_CYL_6RND = new MongoId("619f54a1d25cbd424731fb99"); + public static readonly MongoId MAGAZINE_9X33R_CR_LOAD_0RND = new MongoId("61a4cda622af7f4f6a3ce617"); public static readonly MongoId MAGAZINE_9X33R_DE_9RND = new MongoId("669fa435803b94fb5d0e3a76"); - public static readonly MongoId MAGAZINE_9X39_6L24_10RND = new MongoId( - "57838f0b2459774a256959b2" - ); - public static readonly MongoId MAGAZINE_9X39_6L25_20RND = new MongoId( - "57838f9f2459774a150289a0" - ); - public static readonly MongoId MAGAZINE_9X39_9A91_20RND = new MongoId( - "6450ec2e7da7133e5a09ca96" - ); - public static readonly MongoId MAGAZINE_9X39_SR3M130_30RND = new MongoId( - "5a9e81fba2750c00164f6b11" - ); - public static readonly MongoId MAGAZINE_9X39_VSSVAL_30RND = new MongoId( - "65118f531b90b4fc77015083" - ); + public static readonly MongoId MAGAZINE_9X39_6L24_10RND = new MongoId("57838f0b2459774a256959b2"); + public static readonly MongoId MAGAZINE_9X39_6L25_20RND = new MongoId("57838f9f2459774a150289a0"); + public static readonly MongoId MAGAZINE_9X39_9A91_20RND = new MongoId("6450ec2e7da7133e5a09ca96"); + public static readonly MongoId MAGAZINE_9X39_SR3M130_30RND = new MongoId("5a9e81fba2750c00164f6b11"); + public static readonly MongoId MAGAZINE_9X39_VSSVAL_30RND = new MongoId("65118f531b90b4fc77015083"); public static readonly MongoId MAP_CUSTOMS_PLAN = new MongoId("5798a2832459774b53341029"); public static readonly MongoId MAP_FACTORY_PLAN = new MongoId("574eb85c245977648157eec3"); public static readonly MongoId MAP_INTERCHANGE_PLAN = new MongoId("5be4038986f774527d3fae60"); - public static readonly MongoId MAP_SHORELINE_HEALTH_RESORT_PLAN = new MongoId( - "5a80a29286f7742b25692012" - ); + public static readonly MongoId MAP_SHORELINE_HEALTH_RESORT_PLAN = new MongoId("5a80a29286f7742b25692012"); public static readonly MongoId MAP_SHORELINE_PLAN = new MongoId("5a8036fb86f77407252ddc02"); public static readonly MongoId MAP_WOODS_PLAN = new MongoId("5900b89686f7744e704a8747"); - public static readonly MongoId MARKOFUNKNOWN_MARK_OF_THE_UNHEARD = new MongoId( - "65ddcc9cfa85b9f17d0dfb07" - ); - public static readonly MongoId MARKSMANRIFLE_HK_G28_762X51_MARKSMAN_RIFLE = new MongoId( - "6176aca650224f204c1da3fb" - ); - public static readonly MongoId MARKSMANRIFLE_KELTEC_RFB_762X51_RIFLE = new MongoId( - "5f2a9575926fd9352339381f" - ); - public static readonly MongoId MARKSMANRIFLE_KNIGHTS_ARMAMENT_COMPANY_SR25_762X51_MARKSMAN_RIFLE = - new MongoId("5df8ce05b11454561e39243b"); - public static readonly MongoId MARKSMANRIFLE_REMINGTON_R11_RSASS_762X51_MARKSMAN_RIFLE = - new MongoId("5a367e5dc4a282000e49738f"); - public static readonly MongoId MARKSMANRIFLE_SPRINGFIELD_ARMORY_M1A_762X51_RIFLE = new MongoId( - "5aafa857e5b5b00018480968" - ); - public static readonly MongoId MARKSMANRIFLE_SVDS_762X54R_SNIPER_RIFLE = new MongoId( - "5c46fbd72e2216398b5a8c9c" - ); - public static readonly MongoId MARKSMANRIFLE_SWORD_INTERNATIONAL_MK18_338_LM_MARKSMAN_RIFLE = - new MongoId("5fc22d7c187fea44d52eda44"); - public static readonly MongoId MARKSMANRIFLE_THEAKGUY_AK50_50_BMG_SNIPER_RIFLE = new MongoId( - "67d0576f29f580ebc10efd08" - ); - public static readonly MongoId MARKSMANRIFLE_VSS_VINTOREZ_9X39_SPECIAL_SNIPER_RIFLE = - new MongoId("57838ad32459774a17445cd2"); - public static readonly MongoId MEDICAL_ALUMINUM_SPLINT = new MongoId( - "5af0454c86f7746bf20992e8" + public static readonly MongoId MARKOFUNKNOWN_MARK_OF_THE_UNHEARD = new MongoId("65ddcc9cfa85b9f17d0dfb07"); + public static readonly MongoId MARKSMANRIFLE_HK_G28_762X51_MARKSMAN_RIFLE = new MongoId("6176aca650224f204c1da3fb"); + public static readonly MongoId MARKSMANRIFLE_KELTEC_RFB_762X51_RIFLE = new MongoId("5f2a9575926fd9352339381f"); + public static readonly MongoId MARKSMANRIFLE_KNIGHTS_ARMAMENT_COMPANY_SR25_762X51_MARKSMAN_RIFLE = new MongoId( + "5df8ce05b11454561e39243b" ); + public static readonly MongoId MARKSMANRIFLE_REMINGTON_R11_RSASS_762X51_MARKSMAN_RIFLE = new MongoId("5a367e5dc4a282000e49738f"); + public static readonly MongoId MARKSMANRIFLE_SPRINGFIELD_ARMORY_M1A_762X51_RIFLE = new MongoId("5aafa857e5b5b00018480968"); + public static readonly MongoId MARKSMANRIFLE_SVDS_762X54R_SNIPER_RIFLE = new MongoId("5c46fbd72e2216398b5a8c9c"); + public static readonly MongoId MARKSMANRIFLE_SWORD_INTERNATIONAL_MK18_338_LM_MARKSMAN_RIFLE = new MongoId("5fc22d7c187fea44d52eda44"); + public static readonly MongoId MARKSMANRIFLE_THEAKGUY_AK50_50_BMG_SNIPER_RIFLE = new MongoId("67d0576f29f580ebc10efd08"); + public static readonly MongoId MARKSMANRIFLE_VSS_VINTOREZ_9X39_SPECIAL_SNIPER_RIFLE = new MongoId("57838ad32459774a17445cd2"); + public static readonly MongoId MEDICAL_ALUMINUM_SPLINT = new MongoId("5af0454c86f7746bf20992e8"); public static readonly MongoId MEDICAL_ARMY_BANDAGE = new MongoId("5751a25924597722c463c472"); - public static readonly MongoId MEDICAL_ASEPTIC_BANDAGE = new MongoId( - "544fb25a4bdc2dfb738b4567" - ); - public static readonly MongoId MEDICAL_CALOKB_HEMOSTATIC_APPLICATOR = new MongoId( - "5e8488fa988a8701445df1e4" - ); - public static readonly MongoId MEDICAL_CAT_HEMOSTATIC_TOURNIQUET = new MongoId( - "60098af40accd37ef2175f27" - ); - public static readonly MongoId MEDICAL_CMS_SURGICAL_KIT = new MongoId( - "5d02778e86f774203e7dedbe" - ); - public static readonly MongoId MEDICAL_ESMARCH_TOURNIQUET = new MongoId( - "5e831507ea0a7c419c2f9bd9" - ); - public static readonly MongoId MEDICAL_IMMOBILIZING_SPLINT = new MongoId( - "544fb3364bdc2d34748b456a" - ); + public static readonly MongoId MEDICAL_ASEPTIC_BANDAGE = new MongoId("544fb25a4bdc2dfb738b4567"); + public static readonly MongoId MEDICAL_CALOKB_HEMOSTATIC_APPLICATOR = new MongoId("5e8488fa988a8701445df1e4"); + public static readonly MongoId MEDICAL_CAT_HEMOSTATIC_TOURNIQUET = new MongoId("60098af40accd37ef2175f27"); + public static readonly MongoId MEDICAL_CMS_SURGICAL_KIT = new MongoId("5d02778e86f774203e7dedbe"); + public static readonly MongoId MEDICAL_ESMARCH_TOURNIQUET = new MongoId("5e831507ea0a7c419c2f9bd9"); + public static readonly MongoId MEDICAL_IMMOBILIZING_SPLINT = new MongoId("544fb3364bdc2d34748b456a"); public static readonly MongoId MEDICAL_SANITAR_KIT = new MongoId("5e99735686f7744bfc4af32c"); - public static readonly MongoId MEDICAL_SURV12_FIELD_SURGICAL_KIT = new MongoId( - "5d02797c86f774203f38e30a" - ); - public static readonly MongoId MEDKIT_AFAK_TACTICAL_INDIVIDUAL_FIRST_AID_KIT = new MongoId( - "60098ad7c2240c0fe85c570a" - ); + public static readonly MongoId MEDICAL_SURV12_FIELD_SURGICAL_KIT = new MongoId("5d02797c86f774203f38e30a"); + public static readonly MongoId MEDKIT_AFAK_TACTICAL_INDIVIDUAL_FIRST_AID_KIT = new MongoId("60098ad7c2240c0fe85c570a"); public static readonly MongoId MEDKIT_AI2 = new MongoId("5755356824597772cb798962"); - public static readonly MongoId MEDKIT_CAR_FIRST_AID_KIT = new MongoId( - "590c661e86f7741e566b646a" - ); - public static readonly MongoId MEDKIT_GRIZZLY_MEDICAL_KIT = new MongoId( - "590c657e86f77412b013051d" - ); - public static readonly MongoId MEDKIT_IFAK_INDIVIDUAL_FIRST_AID_KIT = new MongoId( - "590c678286f77426c9660122" - ); - public static readonly MongoId MEDKIT_SALEWA_FIRST_AID_KIT = new MongoId( - "544fb45d4bdc2dee738b4568" - ); - public static readonly MongoId MEDKIT_SANITARS_FIRST_AID_KIT = new MongoId( - "5e99711486f7744bfc4af328" - ); + public static readonly MongoId MEDKIT_CAR_FIRST_AID_KIT = new MongoId("590c661e86f7741e566b646a"); + public static readonly MongoId MEDKIT_GRIZZLY_MEDICAL_KIT = new MongoId("590c657e86f77412b013051d"); + public static readonly MongoId MEDKIT_IFAK_INDIVIDUAL_FIRST_AID_KIT = new MongoId("590c678286f77426c9660122"); + public static readonly MongoId MEDKIT_SALEWA_FIRST_AID_KIT = new MongoId("544fb45d4bdc2dee738b4568"); + public static readonly MongoId MEDKIT_SANITARS_FIRST_AID_KIT = new MongoId("5e99711486f7744bfc4af328"); public static readonly MongoId MONEY_DOLLARS = new MongoId("5696686a4bdc2da3298b456a"); public static readonly MongoId MONEY_EUROS = new MongoId("569668774bdc2da2298b4568"); public static readonly MongoId MONEY_GP_COIN = new MongoId("5d235b4d86f7742e017bc88a"); public static readonly MongoId MONEY_ROUBLES = new MongoId("5449016a4bdc2d6f028b456f"); - public static readonly MongoId MOUNT_AI_AX50_34MM_SCOPE = new MongoId( - "62811f461d5df4475f46a332" - ); - public static readonly MongoId MOUNT_AI_AXMC_ADAPTER_KIT_MEDIUM_LENGTH_RAIL = new MongoId( - "628120dd308cb521f87a8fa1" - ); - public static readonly MongoId MOUNT_AI_AXMC_ADAPTER_KIT_SHORT_LENGTH_RAIL = new MongoId( - "628120d309427b40ab14e76d" - ); - public static readonly MongoId MOUNT_AI_AXMC_AT_X_TOP_RAIL = new MongoId( - "628120c21d5df4475f46a337" - ); - public static readonly MongoId MOUNT_AI_AXMC_KEYSLOT_HARRIS_BIPOD = new MongoId( - "671126a210d67adb5b08e925" - ); - public static readonly MongoId MOUNT_AIMPOINT_COMPM4PRO_LRP = new MongoId( - "5c7d55f52e221644f31bff6a" - ); - public static readonly MongoId MOUNT_AIMPOINT_COMPM4PRO_QRP2 = new MongoId( - "616584766ef05c2ce828ef57" - ); - public static readonly MongoId MOUNT_AIMPOINT_MICRO_H2_STANDARD = new MongoId( - "616554fe50224f204c1da2aa" - ); - public static readonly MongoId MOUNT_AIMPOINT_MICRO_SPACER_HIGH = new MongoId( - "58d39b0386f77443380bf13c" - ); - public static readonly MongoId MOUNT_AIMPOINT_MICRO_STANDARD = new MongoId( - "58d39d3d86f77445bb794ae7" - ); - public static readonly MongoId MOUNT_AIMPOINT_STANDARD_SPACER = new MongoId( - "5c7d560b2e22160bc12c6139" - ); + public static readonly MongoId MOUNT_AI_AX50_34MM_SCOPE = new MongoId("62811f461d5df4475f46a332"); + public static readonly MongoId MOUNT_AI_AXMC_ADAPTER_KIT_MEDIUM_LENGTH_RAIL = new MongoId("628120dd308cb521f87a8fa1"); + public static readonly MongoId MOUNT_AI_AXMC_ADAPTER_KIT_SHORT_LENGTH_RAIL = new MongoId("628120d309427b40ab14e76d"); + public static readonly MongoId MOUNT_AI_AXMC_AT_X_TOP_RAIL = new MongoId("628120c21d5df4475f46a337"); + public static readonly MongoId MOUNT_AI_AXMC_KEYSLOT_HARRIS_BIPOD = new MongoId("671126a210d67adb5b08e925"); + public static readonly MongoId MOUNT_AIMPOINT_COMPM4PRO_LRP = new MongoId("5c7d55f52e221644f31bff6a"); + public static readonly MongoId MOUNT_AIMPOINT_COMPM4PRO_QRP2 = new MongoId("616584766ef05c2ce828ef57"); + public static readonly MongoId MOUNT_AIMPOINT_MICRO_H2_STANDARD = new MongoId("616554fe50224f204c1da2aa"); + public static readonly MongoId MOUNT_AIMPOINT_MICRO_SPACER_HIGH = new MongoId("58d39b0386f77443380bf13c"); + public static readonly MongoId MOUNT_AIMPOINT_MICRO_STANDARD = new MongoId("58d39d3d86f77445bb794ae7"); + public static readonly MongoId MOUNT_AIMPOINT_STANDARD_SPACER = new MongoId("5c7d560b2e22160bc12c6139"); public static readonly MongoId MOUNT_AK_ZENIT_B12 = new MongoId("57ffaea724597779f52b3a4d"); public static readonly MongoId MOUNT_AKS74U_ZENIT_B18 = new MongoId("57ffb0062459777a045af529"); - public static readonly MongoId MOUNT_ALEXANDER_ARMS_10_INCH_RAIL = new MongoId( - "5b30bc285acfc47a8608615d" - ); - public static readonly MongoId MOUNT_ALEXANDER_ARMS_3_INCH_RAIL = new MongoId( - "5b30bc165acfc40016387293" - ); - public static readonly MongoId MOUNT_ANPVS14_NOROTOS_DUAL_DOVETAIL = new MongoId( - "5a16b93dfcdbcbcae6687261" - ); - public static readonly MongoId MOUNT_ARMASIGHT_VULCAN_UNIVERSAL_BASE = new MongoId( - "5b3b6dc75acfc47a8773fb1e" - ); - public static readonly MongoId MOUNT_ARMASIGHT_ZEUS_UNIVERSAL_BASE = new MongoId( - "63fc449f5bd61c6cf3784a88" - ); - public static readonly MongoId MOUNT_AXION_KOBRA_DOVETAIL = new MongoId( - "591ee00d86f774592f7b841e" - ); - public static readonly MongoId MOUNT_BENELLI_M3_SUPER_90_UPPER_RECEIVER_TOP_RAIL = new MongoId( - "625ed7c64d9b6612df732146" - ); - public static readonly MongoId MOUNT_BT_QD_NAR_MOUNT_FOR_AIMPOINT_ACRO = new MongoId( - "615d8d878004cc50514c3233" - ); - public static readonly MongoId MOUNT_BURRIS_ARPEPR_30MM_RING_SCOPE = new MongoId( - "5b2389515acfc4771e1be0c0" - ); - public static readonly MongoId MOUNT_BURRIS_FASTFIRE_WEAVER_BASE = new MongoId( - "577d128124597739d65d0e56" - ); - public static readonly MongoId MOUNT_CNC_GUNS_KEYMOD_2_INCH_RAIL = new MongoId( - "623c2f652febb22c2777d8d7" - ); - public static readonly MongoId MOUNT_CNC_GUNS_KEYMOD_4_INCH_RAIL = new MongoId( - "623c2f4242aee3103f1c44b7" - ); - public static readonly MongoId MOUNT_CORVUS_DEFENSIO_KEYMOD_18_INCH_RAIL_SECTION = new MongoId( - "67111094d1758189fc0bd223" - ); - public static readonly MongoId MOUNT_CORVUS_DEFENSIO_KEYMOD_68_INCH_RAIL_SECTION = new MongoId( - "6711109e723c2733410161eb" - ); - public static readonly MongoId MOUNT_CUSTOM_GUNS_HANDGUARD_RAIL = new MongoId( - "6086b5392535c57a13424d70" - ); + public static readonly MongoId MOUNT_ALEXANDER_ARMS_10_INCH_RAIL = new MongoId("5b30bc285acfc47a8608615d"); + public static readonly MongoId MOUNT_ALEXANDER_ARMS_3_INCH_RAIL = new MongoId("5b30bc165acfc40016387293"); + public static readonly MongoId MOUNT_ANPVS14_NOROTOS_DUAL_DOVETAIL = new MongoId("5a16b93dfcdbcbcae6687261"); + public static readonly MongoId MOUNT_ARMASIGHT_VULCAN_UNIVERSAL_BASE = new MongoId("5b3b6dc75acfc47a8773fb1e"); + public static readonly MongoId MOUNT_ARMASIGHT_ZEUS_UNIVERSAL_BASE = new MongoId("63fc449f5bd61c6cf3784a88"); + public static readonly MongoId MOUNT_AXION_KOBRA_DOVETAIL = new MongoId("591ee00d86f774592f7b841e"); + public static readonly MongoId MOUNT_BENELLI_M3_SUPER_90_UPPER_RECEIVER_TOP_RAIL = new MongoId("625ed7c64d9b6612df732146"); + public static readonly MongoId MOUNT_BT_QD_NAR_MOUNT_FOR_AIMPOINT_ACRO = new MongoId("615d8d878004cc50514c3233"); + public static readonly MongoId MOUNT_BURRIS_ARPEPR_30MM_RING_SCOPE = new MongoId("5b2389515acfc4771e1be0c0"); + public static readonly MongoId MOUNT_BURRIS_FASTFIRE_WEAVER_BASE = new MongoId("577d128124597739d65d0e56"); + public static readonly MongoId MOUNT_CNC_GUNS_KEYMOD_2_INCH_RAIL = new MongoId("623c2f652febb22c2777d8d7"); + public static readonly MongoId MOUNT_CNC_GUNS_KEYMOD_4_INCH_RAIL = new MongoId("623c2f4242aee3103f1c44b7"); + public static readonly MongoId MOUNT_CORVUS_DEFENSIO_KEYMOD_18_INCH_RAIL_SECTION = new MongoId("67111094d1758189fc0bd223"); + public static readonly MongoId MOUNT_CORVUS_DEFENSIO_KEYMOD_68_INCH_RAIL_SECTION = new MongoId("6711109e723c2733410161eb"); + public static readonly MongoId MOUNT_CUSTOM_GUNS_HANDGUARD_RAIL = new MongoId("6086b5392535c57a13424d70"); public static readonly MongoId MOUNT_CYCLONE_SHAKHIN = new MongoId("67641a851b2899700609901a"); - public static readonly MongoId MOUNT_DANIEL_DEFENSE_25MM_ACCESSORY_RING = new MongoId( - "6267c6396b642f77f56f5c1c" - ); - public static readonly MongoId MOUNT_DELTAPOINT_CROSS_SLOT_MOUNT_BASE = new MongoId( - "58d2664f86f7747fec5834f6" - ); - public static readonly MongoId MOUNT_DELTATEK_SPRUT_MOUNT_FOR_PUMPACTION_SHOTGUNS = new MongoId( - "55d48ebc4bdc2d8c2f8b456c" - ); - public static readonly MongoId MOUNT_ETMI019_SHOTGUN_RAIL = new MongoId( - "5dfe14f30b92095fd441edaf" - ); - public static readonly MongoId MOUNT_FN_FIVESEVEN_MK2_RMR = new MongoId( - "5d7b6bafa4b93652786f4c76" - ); - public static readonly MongoId MOUNT_FN_P90_EFFEN_90_RECEIVER_RAIL = new MongoId( - "5cc7012ae4a949001252b43e" - ); - public static readonly MongoId MOUNT_FN_P90_UPPER_RECEIVER_SIDE_RAIL = new MongoId( - "5cc70146e4a949000d73bf6b" - ); - public static readonly MongoId MOUNT_FN_P90_UPPER_RECEIVER_TOP_RAIL = new MongoId( - "5cc7015ae4a949001152b4c6" - ); - public static readonly MongoId MOUNT_FN_SCAR_BOTTOM_RAIL = new MongoId( - "61816df1d3a39d50044c139e" - ); - public static readonly MongoId MOUNT_FN_SCAR_KINETIC_MREX_65_MLOK_RAIL = new MongoId( - "619666f4af1f5202c57a952d" - ); - public static readonly MongoId MOUNT_FN_SCAR_KINETIC_MREX_65_MLOK_RAIL_FDE = new MongoId( - "66ffc6ceb7ff397142017c3a" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_LOWER_RAIL = new MongoId( - "66ffc72082d36dec82030c1f" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_LOWER_RAIL_FDE = new MongoId( - "66ffc903fe9b382596065304" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_SIDE_RAILS = new MongoId( - "66ffe6c36f11538c7d0581e3" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_SIDE_RAILS_FDE = new MongoId( - "66ffe7bab8da88805e07a03e" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_MRE_XL_RAIL_EXTENSION = new MongoId( - "66ffe2fbab3336cc0106382b" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_MRE_XL_RAIL_EXTENSION_FDE = new MongoId( - "66ffe5edfe9b38259606530d" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_RAIL_ELIMINATION_PANELS = new MongoId( - "66ffe66a20771d839f0fb4a9" - ); - public static readonly MongoId MOUNT_FN_SCAR_PMM_RAIL_ELIMINATION_PANELS_FDE = new MongoId( - "66ffe6916f11538c7d0581e1" - ); - public static readonly MongoId MOUNT_FN_SCAR_PWS_SRX_RAIL_EXTENSION = new MongoId( - "61965d9058ef8c428c287e0d" - ); - public static readonly MongoId MOUNT_FN_SCAR_SIDE_RAILS = new MongoId( - "61816dfa6ef05c2ce828f1ad" - ); - public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD = new MongoId( - "66ffe811f5d758d71101e89a" - ); - public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD_EXTENDER = new MongoId( - "66ffea456be19fd81e0ef742" - ); - public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD_EXTENDER_PATRIOT_BROWN = - new MongoId("66ffeab4ab3336cc01063833"); - public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD_PATRIOT_BROWN = - new MongoId("66ffea06132225f0fe061394"); - public static readonly MongoId MOUNT_GBRS_AIMPOINT_HYDRA_MOUNT_KIT_BLACK = new MongoId( - "65392f611406374f82152ba5" - ); - public static readonly MongoId MOUNT_GBRS_AIMPOINT_HYDRA_MOUNT_KIT_FDE = new MongoId( - "653931da5db71d30ab1d6296" - ); - public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_30MM_RING_SCOPE = new MongoId( - "618b9643526131765025ab35" - ); - public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_30MM_RING_SCOPE_MOUNT_DDC = - new MongoId("618bab21526131765025ab3f"); - public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_TOP_RING_CAP = new MongoId( - "618b9671d14d6d5ab879c5ea" - ); - public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_TOP_RING_CAP_DDC = new MongoId( - "618ba91477b82356f91ae0e8" - ); - public static readonly MongoId MOUNT_GLOCK_AIMTECH_MOUNT_BASE = new MongoId( - "5a7ad4af51dfba0013379717" - ); - public static readonly MongoId MOUNT_GLOCK_AIMTECH_TIGER_SHARK_SIGHT = new MongoId( - "5a7ad55551dfba0015068f42" - ); - public static readonly MongoId MOUNT_GLOCK_TANGODOWN_AAM01_ACRO_MOUNT_BASE = new MongoId( - "615d8da4d3a39d50044c10e8" - ); - public static readonly MongoId MOUNT_HARTMAN_LENOK_70MM_RAIL = new MongoId( - "65434a4e4e3a01736a6c9706" - ); - public static readonly MongoId MOUNT_HENSOLDT_RIS_TOP_RAIL = new MongoId( - "622efdf8ec80d870d349b4e5" - ); - public static readonly MongoId MOUNT_HEXAGON_MEDIUM_LENGTH_RAIL = new MongoId( - "5b800ebc86f774394e230a90" - ); - public static readonly MongoId MOUNT_HEXAGON_MEDIUM_LENGTH_RAIL_ANODIZED_RED = new MongoId( - "5b8403a086f7747ff856f4e2" - ); - public static readonly MongoId MOUNT_HEXAGON_SHORT_LENGTH_RAIL = new MongoId( - "5b800ed086f7747baf6e2f9e" - ); - public static readonly MongoId MOUNT_HEXAGON_SHORT_LENGTH_RAIL_ANODIZED_RED = new MongoId( - "5b84038986f774774913b0c1" - ); - public static readonly MongoId MOUNT_HK_G36_BOTTOM_HANDGUARD_RAIL = new MongoId( - "62444cb99f47004c781903eb" - ); + public static readonly MongoId MOUNT_DANIEL_DEFENSE_25MM_ACCESSORY_RING = new MongoId("6267c6396b642f77f56f5c1c"); + public static readonly MongoId MOUNT_DELTAPOINT_CROSS_SLOT_MOUNT_BASE = new MongoId("58d2664f86f7747fec5834f6"); + public static readonly MongoId MOUNT_DELTATEK_SPRUT_MOUNT_FOR_PUMPACTION_SHOTGUNS = new MongoId("55d48ebc4bdc2d8c2f8b456c"); + public static readonly MongoId MOUNT_ETMI019_SHOTGUN_RAIL = new MongoId("5dfe14f30b92095fd441edaf"); + public static readonly MongoId MOUNT_FN_FIVESEVEN_MK2_RMR = new MongoId("5d7b6bafa4b93652786f4c76"); + public static readonly MongoId MOUNT_FN_P90_EFFEN_90_RECEIVER_RAIL = new MongoId("5cc7012ae4a949001252b43e"); + public static readonly MongoId MOUNT_FN_P90_UPPER_RECEIVER_SIDE_RAIL = new MongoId("5cc70146e4a949000d73bf6b"); + public static readonly MongoId MOUNT_FN_P90_UPPER_RECEIVER_TOP_RAIL = new MongoId("5cc7015ae4a949001152b4c6"); + public static readonly MongoId MOUNT_FN_SCAR_BOTTOM_RAIL = new MongoId("61816df1d3a39d50044c139e"); + public static readonly MongoId MOUNT_FN_SCAR_KINETIC_MREX_65_MLOK_RAIL = new MongoId("619666f4af1f5202c57a952d"); + public static readonly MongoId MOUNT_FN_SCAR_KINETIC_MREX_65_MLOK_RAIL_FDE = new MongoId("66ffc6ceb7ff397142017c3a"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_LOWER_RAIL = new MongoId("66ffc72082d36dec82030c1f"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_LOWER_RAIL_FDE = new MongoId("66ffc903fe9b382596065304"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_SIDE_RAILS = new MongoId("66ffe6c36f11538c7d0581e3"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_MLOK_SIDE_RAILS_FDE = new MongoId("66ffe7bab8da88805e07a03e"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_MRE_XL_RAIL_EXTENSION = new MongoId("66ffe2fbab3336cc0106382b"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_MRE_XL_RAIL_EXTENSION_FDE = new MongoId("66ffe5edfe9b38259606530d"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_RAIL_ELIMINATION_PANELS = new MongoId("66ffe66a20771d839f0fb4a9"); + public static readonly MongoId MOUNT_FN_SCAR_PMM_RAIL_ELIMINATION_PANELS_FDE = new MongoId("66ffe6916f11538c7d0581e1"); + public static readonly MongoId MOUNT_FN_SCAR_PWS_SRX_RAIL_EXTENSION = new MongoId("61965d9058ef8c428c287e0d"); + public static readonly MongoId MOUNT_FN_SCAR_SIDE_RAILS = new MongoId("61816dfa6ef05c2ce828f1ad"); + public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD = new MongoId("66ffe811f5d758d71101e89a"); + public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD_EXTENDER = new MongoId("66ffea456be19fd81e0ef742"); + public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD_EXTENDER_PATRIOT_BROWN = new MongoId("66ffeab4ab3336cc01063833"); + public static readonly MongoId MOUNT_FN_SCAR_VLTOR_CASVSCAR_HANDGUARD_PATRIOT_BROWN = new MongoId("66ffea06132225f0fe061394"); + public static readonly MongoId MOUNT_GBRS_AIMPOINT_HYDRA_MOUNT_KIT_BLACK = new MongoId("65392f611406374f82152ba5"); + public static readonly MongoId MOUNT_GBRS_AIMPOINT_HYDRA_MOUNT_KIT_FDE = new MongoId("653931da5db71d30ab1d6296"); + public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_30MM_RING_SCOPE = new MongoId("618b9643526131765025ab35"); + public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_30MM_RING_SCOPE_MOUNT_DDC = new MongoId("618bab21526131765025ab3f"); + public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_TOP_RING_CAP = new MongoId("618b9671d14d6d5ab879c5ea"); + public static readonly MongoId MOUNT_GEISSELE_SUPER_PRECISION_TOP_RING_CAP_DDC = new MongoId("618ba91477b82356f91ae0e8"); + public static readonly MongoId MOUNT_GLOCK_AIMTECH_MOUNT_BASE = new MongoId("5a7ad4af51dfba0013379717"); + public static readonly MongoId MOUNT_GLOCK_AIMTECH_TIGER_SHARK_SIGHT = new MongoId("5a7ad55551dfba0015068f42"); + public static readonly MongoId MOUNT_GLOCK_TANGODOWN_AAM01_ACRO_MOUNT_BASE = new MongoId("615d8da4d3a39d50044c10e8"); + public static readonly MongoId MOUNT_HARTMAN_LENOK_70MM_RAIL = new MongoId("65434a4e4e3a01736a6c9706"); + public static readonly MongoId MOUNT_HENSOLDT_RIS_TOP_RAIL = new MongoId("622efdf8ec80d870d349b4e5"); + public static readonly MongoId MOUNT_HEXAGON_MEDIUM_LENGTH_RAIL = new MongoId("5b800ebc86f774394e230a90"); + public static readonly MongoId MOUNT_HEXAGON_MEDIUM_LENGTH_RAIL_ANODIZED_RED = new MongoId("5b8403a086f7747ff856f4e2"); + public static readonly MongoId MOUNT_HEXAGON_SHORT_LENGTH_RAIL = new MongoId("5b800ed086f7747baf6e2f9e"); + public static readonly MongoId MOUNT_HEXAGON_SHORT_LENGTH_RAIL_ANODIZED_RED = new MongoId("5b84038986f774774913b0c1"); + public static readonly MongoId MOUNT_HK_G36_BOTTOM_HANDGUARD_RAIL = new MongoId("62444cb99f47004c781903eb"); public static readonly MongoId MOUNT_HK_G36_MAGWELL = new MongoId("622f02437762f55aaa68ac85"); - public static readonly MongoId MOUNT_HK_G36_OPTIC_RAIL_WITH_FLIPUP_SIGHTS = new MongoId( - "622b3d5cf9cfc87d675d2de9" - ); - public static readonly MongoId MOUNT_HK_G36_SIDE_HANDGUARD_RAIL = new MongoId( - "62444cd3674028188b052799" - ); + public static readonly MongoId MOUNT_HK_G36_OPTIC_RAIL_WITH_FLIPUP_SIGHTS = new MongoId("622b3d5cf9cfc87d675d2de9"); + public static readonly MongoId MOUNT_HK_G36_SIDE_HANDGUARD_RAIL = new MongoId("62444cd3674028188b052799"); public static readonly MongoId MOUNT_HK_G36_SIGHT = new MongoId("622b3c081b89c677a33bcda6"); - public static readonly MongoId MOUNT_HK_G36_STANAG_MAGWELL = new MongoId( - "622f039199f4ea1a4d6c9a17" - ); - public static readonly MongoId MOUNT_HK_HKEY_3_INCH_RAIL = new MongoId( - "67069d3bb29a2cd338033390" - ); - public static readonly MongoId MOUNT_HK_MP5_BT_TRIRAIL_RECEIVER = new MongoId( - "5a966ec8a2750c00171b3f36" - ); - public static readonly MongoId MOUNT_HK_MP5_MFI_HK_UNIVERSAL_LOW_PROFILE_SCOPE = new MongoId( - "5926dad986f7741f82604363" - ); - public static readonly MongoId MOUNT_HK_MP5SD_BT_TRIRAIL_RING = new MongoId( - "59c63b4486f7747afb151c1c" - ); - public static readonly MongoId MOUNT_HK_UMP_BOTTOM_HANDGUARD_RAIL = new MongoId( - "5fc53954f8b6a877a729eaeb" - ); - public static readonly MongoId MOUNT_HK_UMP_SIDE_HANDGUARD_RAIL = new MongoId( - "5fc5396e900b1d5091531e72" - ); - public static readonly MongoId MOUNT_HK_USP_45_ACP_ELITE_COMPENSATOR = new MongoId( - "619621a4de3cdf1d2614a7a7" - ); - public static readonly MongoId MOUNT_HK_USP_45_ACP_MATCH_COMPENSATOR = new MongoId( - "619624b26db0f2477964e6b0" - ); - public static readonly MongoId MOUNT_HK_USP_RAIL_ADAPTER = new MongoId( - "6196255558ef8c428c287d1c" - ); - public static readonly MongoId MOUNT_IEA_MILOPTICS_KHF_34MM_ONEPIECE_MAG = new MongoId( - "5c86592b2e2216000e69e77c" - ); - public static readonly MongoId MOUNT_JP_ENTERPRISES_FLATTOP_30MM_RING_SCOPE = new MongoId( - "5a37ca54c4a282000d72296a" - ); - public static readonly MongoId MOUNT_KAC_MWS_BIPOD_ADAPTER = new MongoId( - "676175bb48fa5c377e06fc36" - ); - public static readonly MongoId MOUNT_KAC_URX_3_3_INCH_RAIL = new MongoId( - "5d133067d7ad1a33013f95b4" - ); - public static readonly MongoId MOUNT_KIBA_ARMS_25MM_ACCESSORY_RING = new MongoId( - "57d17e212459775a1179a0f5" - ); - public static readonly MongoId MOUNT_KIBA_ARMS_SHORT_MOUNT_SIGHT_ADAPTER = new MongoId( - "5c1cdd302e221602b3137250" - ); - public static readonly MongoId MOUNT_KIBA_ARMS_SPRM_RAIL_MOUNT_FOR_PUMPACTION_SHOTGUNS = - new MongoId("55d48a634bdc2d8b2f8b456a"); - public static readonly MongoId MOUNT_KMZ_1P59_DOVETAIL = new MongoId( - "5d0a29ead7ad1a0026013f27" - ); + public static readonly MongoId MOUNT_HK_G36_STANAG_MAGWELL = new MongoId("622f039199f4ea1a4d6c9a17"); + public static readonly MongoId MOUNT_HK_HKEY_3_INCH_RAIL = new MongoId("67069d3bb29a2cd338033390"); + public static readonly MongoId MOUNT_HK_MP5_BT_TRIRAIL_RECEIVER = new MongoId("5a966ec8a2750c00171b3f36"); + public static readonly MongoId MOUNT_HK_MP5_MFI_HK_UNIVERSAL_LOW_PROFILE_SCOPE = new MongoId("5926dad986f7741f82604363"); + public static readonly MongoId MOUNT_HK_MP5SD_BT_TRIRAIL_RING = new MongoId("59c63b4486f7747afb151c1c"); + public static readonly MongoId MOUNT_HK_UMP_BOTTOM_HANDGUARD_RAIL = new MongoId("5fc53954f8b6a877a729eaeb"); + public static readonly MongoId MOUNT_HK_UMP_SIDE_HANDGUARD_RAIL = new MongoId("5fc5396e900b1d5091531e72"); + public static readonly MongoId MOUNT_HK_USP_45_ACP_ELITE_COMPENSATOR = new MongoId("619621a4de3cdf1d2614a7a7"); + public static readonly MongoId MOUNT_HK_USP_45_ACP_MATCH_COMPENSATOR = new MongoId("619624b26db0f2477964e6b0"); + public static readonly MongoId MOUNT_HK_USP_RAIL_ADAPTER = new MongoId("6196255558ef8c428c287d1c"); + public static readonly MongoId MOUNT_IEA_MILOPTICS_KHF_34MM_ONEPIECE_MAG = new MongoId("5c86592b2e2216000e69e77c"); + public static readonly MongoId MOUNT_JP_ENTERPRISES_FLATTOP_30MM_RING_SCOPE = new MongoId("5a37ca54c4a282000d72296a"); + public static readonly MongoId MOUNT_KAC_MWS_BIPOD_ADAPTER = new MongoId("676175bb48fa5c377e06fc36"); + public static readonly MongoId MOUNT_KAC_URX_3_3_INCH_RAIL = new MongoId("5d133067d7ad1a33013f95b4"); + public static readonly MongoId MOUNT_KIBA_ARMS_25MM_ACCESSORY_RING = new MongoId("57d17e212459775a1179a0f5"); + public static readonly MongoId MOUNT_KIBA_ARMS_SHORT_MOUNT_SIGHT_ADAPTER = new MongoId("5c1cdd302e221602b3137250"); + public static readonly MongoId MOUNT_KIBA_ARMS_SPRM_RAIL_MOUNT_FOR_PUMPACTION_SHOTGUNS = new MongoId("55d48a634bdc2d8b2f8b456a"); + public static readonly MongoId MOUNT_KMZ_1P59_DOVETAIL = new MongoId("5d0a29ead7ad1a0026013f27"); public static readonly MongoId MOUNT_KMZ_1P69_WEAVER = new MongoId("5d0a29fed7ad1a002769ad08"); - public static readonly MongoId MOUNT_KRISS_VECTOR_BOTTOM_RAIL = new MongoId( - "5fbb976df9986c4cff3fe5f2" - ); - public static readonly MongoId MOUNT_KRISS_VECTOR_MK5_MODULAR_RAIL = new MongoId( - "5fbb978207e8a97d1f0902d3" - ); - public static readonly MongoId MOUNT_KRISS_VECTOR_SIDE_RAIL = new MongoId( - "5fce0f9b55375d18a253eff2" - ); - public static readonly MongoId MOUNT_LARUE_LT101_QD_TACTICAL_PICATINNY_RISER = new MongoId( - "5c064c400db834001d23f468" - ); - public static readonly MongoId MOUNT_LEAPERS_UTG_25MM_RING_SCOPE = new MongoId( - "5dff77c759400025ea5150cf" - ); - public static readonly MongoId MOUNT_LEAPERS_UTG_UNIVERSAL_SHOTGUN_BARREL = new MongoId( - "6710cea62bb09af72f0e6bf8" - ); - public static readonly MongoId MOUNT_LEUPOLD_MARK_IMS_35MM_RING_SCOPE = new MongoId( - "6761759e7ee06333f108bf86" - ); - public static readonly MongoId MOUNT_LOBAEV_ARMS_30MM_SCOPE = new MongoId( - "57c69dd424597774c03b7bbc" - ); - public static readonly MongoId MOUNT_M14_AMEGA_MINI_SCOUT_MOUNT_SYSTEM = new MongoId( - "5addbfd15acfc40015621bde" - ); - public static readonly MongoId MOUNT_M14_ARMS_18_SCOPE = new MongoId( - "5addbfe15acfc4001a5fc58b" - ); - public static readonly MongoId MOUNT_M14_LEAPERS_UTG_4POINT_LOCKING_DELUXE = new MongoId( - "5addbfef5acfc400185c2857" - ); - public static readonly MongoId MOUNT_M14_SAGE_INTERNATIONAL_DCSB = new MongoId( - "5addbffe5acfc4001714dfac" - ); - public static readonly MongoId MOUNT_M14_ULTIMAK_M8_FORWARD_OPTIC = new MongoId( - "5addbfbb5acfc400194dbcf7" - ); - public static readonly MongoId MOUNT_M14_VLTOR_CASV14_RAIL_SYSTEM = new MongoId( - "5addc00b5acfc4001669f144" - ); - public static readonly MongoId MOUNT_M1911A1_NCSTAR_TRIGGER_GUARD = new MongoId( - "5ef369b08cef260c0642acaf" - ); - public static readonly MongoId MOUNT_M1911A1_WEIGAND_WEIGATINNY_RAIL = new MongoId( - "5ef5d994dfbc9f3c660ded95" - ); - public static readonly MongoId MOUNT_M1A_SOCOM_16_UPPER_PART = new MongoId( - "5ab24ef9e5b5b00fe93c9209" - ); - public static readonly MongoId MOUNT_M700_30MM_INTEGRAL_RING_SCOPE = new MongoId( - "5bfebc5e0db834001a6694e5" - ); - public static readonly MongoId MOUNT_M700_AB_ARMS_MODX_RAIL = new MongoId( - "5cde7b43d7f00c000d36b93e" - ); - public static readonly MongoId MOUNT_M700_BADGER_ORDNANCE_SCOPE_RAIL = new MongoId( - "65f064eec4da400cbb0dc1fe" - ); - public static readonly MongoId MOUNT_M700_EXTENDED_MULTISLOT_WEAVER_RAIL_BASE = new MongoId( - "5bfebc530db834001d23eb65" - ); - public static readonly MongoId MOUNT_M700_MAGPUL_PRO_700_CHASSIS_INLINE = new MongoId( - "5cdeaca5d7f00c00b61c4b70" - ); - public static readonly MongoId MOUNT_M870_LEAPERS_UTG_PRO_MTU028SG_RAIL = new MongoId( - "5a7893c1c585673f2b5c374d" - ); - public static readonly MongoId MOUNT_M870_MESA_TACTICAL_MAGAZINE_CLAMP = new MongoId( - "5a789261c5856700186c65d3" - ); - public static readonly MongoId MOUNT_M870_XS_SHOTRAIL_RAIL_WITH_GHOST_RING_REAR_SIGHT = - new MongoId("5a78948ec5856700177b1124"); - public static readonly MongoId MOUNT_MAGPUL_MLOK_093_INCH_RAIL = new MongoId( - "669a6a4a525be1d2d004b8eb" - ); - public static readonly MongoId MOUNT_MAGPUL_MLOK_25_INCH_RAIL = new MongoId( - "5b7be47f5acfc400170e2dd2" - ); - public static readonly MongoId MOUNT_MAGPUL_MLOK_41_INCH_RAIL = new MongoId( - "5b7be4895acfc400170e2dd5" - ); - public static readonly MongoId MOUNT_MAGPUL_MLOK_BIPOD = new MongoId( - "671126b049e181972e0681fa" - ); - public static readonly MongoId MOUNT_MAGPUL_MLOK_CANTILEVER = new MongoId( - "6269220d70b6c02e665f2635" - ); - public static readonly MongoId MOUNT_MAGPUL_MLOK_OFFSET_LIGHT = new MongoId( - "6269545d0e57f218e4548ca2" - ); - public static readonly MongoId MOUNT_MOSIN_RIFLE_AIM_SPORTS_MNG_RAIL = new MongoId( - "5bc5a372d4351e44f824d17f" - ); - public static readonly MongoId MOUNT_MOSIN_RIFLE_AIM_SPORTS_TRIRAIL = new MongoId( - "5bbdb811d4351e45020113c7" - ); - public static readonly MongoId MOUNT_MOSIN_RIFLE_ARBALET_PATRIOT_KW_RAIL = new MongoId( - "5d024f5cd7ad1a04a067e91a" - ); - public static readonly MongoId MOUNT_MOSIN_RIFLE_KOCHETOV = new MongoId( - "5b3f7bf05acfc433000ecf6b" - ); - public static readonly MongoId MOUNT_MOSSBERG_590A1_TACTICAL_RAIL = new MongoId( - "5eeb2ff5ea4f8b73c827350b" - ); - public static readonly MongoId MOUNT_MP133153_TAKTIKA_TULA_12003_STOCK_ADAPTER = new MongoId( - "5bfe7fb30db8340018089fed" - ); - public static readonly MongoId MOUNT_MP155_ULTIMA_SHORT_RAIL = new MongoId( - "607ea812232e5a31c233d53c" - ); - public static readonly MongoId MOUNT_MP155_ULTIMA_TOP_RAIL = new MongoId( - "60785ce5132d4d12c81fd918" - ); + public static readonly MongoId MOUNT_KRISS_VECTOR_BOTTOM_RAIL = new MongoId("5fbb976df9986c4cff3fe5f2"); + public static readonly MongoId MOUNT_KRISS_VECTOR_MK5_MODULAR_RAIL = new MongoId("5fbb978207e8a97d1f0902d3"); + public static readonly MongoId MOUNT_KRISS_VECTOR_SIDE_RAIL = new MongoId("5fce0f9b55375d18a253eff2"); + public static readonly MongoId MOUNT_LARUE_LT101_QD_TACTICAL_PICATINNY_RISER = new MongoId("5c064c400db834001d23f468"); + public static readonly MongoId MOUNT_LEAPERS_UTG_25MM_RING_SCOPE = new MongoId("5dff77c759400025ea5150cf"); + public static readonly MongoId MOUNT_LEAPERS_UTG_UNIVERSAL_SHOTGUN_BARREL = new MongoId("6710cea62bb09af72f0e6bf8"); + public static readonly MongoId MOUNT_LEUPOLD_MARK_IMS_35MM_RING_SCOPE = new MongoId("6761759e7ee06333f108bf86"); + public static readonly MongoId MOUNT_LOBAEV_ARMS_30MM_SCOPE = new MongoId("57c69dd424597774c03b7bbc"); + public static readonly MongoId MOUNT_M14_AMEGA_MINI_SCOUT_MOUNT_SYSTEM = new MongoId("5addbfd15acfc40015621bde"); + public static readonly MongoId MOUNT_M14_ARMS_18_SCOPE = new MongoId("5addbfe15acfc4001a5fc58b"); + public static readonly MongoId MOUNT_M14_LEAPERS_UTG_4POINT_LOCKING_DELUXE = new MongoId("5addbfef5acfc400185c2857"); + public static readonly MongoId MOUNT_M14_SAGE_INTERNATIONAL_DCSB = new MongoId("5addbffe5acfc4001714dfac"); + public static readonly MongoId MOUNT_M14_ULTIMAK_M8_FORWARD_OPTIC = new MongoId("5addbfbb5acfc400194dbcf7"); + public static readonly MongoId MOUNT_M14_VLTOR_CASV14_RAIL_SYSTEM = new MongoId("5addc00b5acfc4001669f144"); + public static readonly MongoId MOUNT_M1911A1_NCSTAR_TRIGGER_GUARD = new MongoId("5ef369b08cef260c0642acaf"); + public static readonly MongoId MOUNT_M1911A1_WEIGAND_WEIGATINNY_RAIL = new MongoId("5ef5d994dfbc9f3c660ded95"); + public static readonly MongoId MOUNT_M1A_SOCOM_16_UPPER_PART = new MongoId("5ab24ef9e5b5b00fe93c9209"); + public static readonly MongoId MOUNT_M700_30MM_INTEGRAL_RING_SCOPE = new MongoId("5bfebc5e0db834001a6694e5"); + public static readonly MongoId MOUNT_M700_AB_ARMS_MODX_RAIL = new MongoId("5cde7b43d7f00c000d36b93e"); + public static readonly MongoId MOUNT_M700_BADGER_ORDNANCE_SCOPE_RAIL = new MongoId("65f064eec4da400cbb0dc1fe"); + public static readonly MongoId MOUNT_M700_EXTENDED_MULTISLOT_WEAVER_RAIL_BASE = new MongoId("5bfebc530db834001d23eb65"); + public static readonly MongoId MOUNT_M700_MAGPUL_PRO_700_CHASSIS_INLINE = new MongoId("5cdeaca5d7f00c00b61c4b70"); + public static readonly MongoId MOUNT_M870_LEAPERS_UTG_PRO_MTU028SG_RAIL = new MongoId("5a7893c1c585673f2b5c374d"); + public static readonly MongoId MOUNT_M870_MESA_TACTICAL_MAGAZINE_CLAMP = new MongoId("5a789261c5856700186c65d3"); + public static readonly MongoId MOUNT_M870_XS_SHOTRAIL_RAIL_WITH_GHOST_RING_REAR_SIGHT = new MongoId("5a78948ec5856700177b1124"); + public static readonly MongoId MOUNT_MAGPUL_MLOK_093_INCH_RAIL = new MongoId("669a6a4a525be1d2d004b8eb"); + public static readonly MongoId MOUNT_MAGPUL_MLOK_25_INCH_RAIL = new MongoId("5b7be47f5acfc400170e2dd2"); + public static readonly MongoId MOUNT_MAGPUL_MLOK_41_INCH_RAIL = new MongoId("5b7be4895acfc400170e2dd5"); + public static readonly MongoId MOUNT_MAGPUL_MLOK_BIPOD = new MongoId("671126b049e181972e0681fa"); + public static readonly MongoId MOUNT_MAGPUL_MLOK_CANTILEVER = new MongoId("6269220d70b6c02e665f2635"); + public static readonly MongoId MOUNT_MAGPUL_MLOK_OFFSET_LIGHT = new MongoId("6269545d0e57f218e4548ca2"); + public static readonly MongoId MOUNT_MOSIN_RIFLE_AIM_SPORTS_MNG_RAIL = new MongoId("5bc5a372d4351e44f824d17f"); + public static readonly MongoId MOUNT_MOSIN_RIFLE_AIM_SPORTS_TRIRAIL = new MongoId("5bbdb811d4351e45020113c7"); + public static readonly MongoId MOUNT_MOSIN_RIFLE_ARBALET_PATRIOT_KW_RAIL = new MongoId("5d024f5cd7ad1a04a067e91a"); + public static readonly MongoId MOUNT_MOSIN_RIFLE_KOCHETOV = new MongoId("5b3f7bf05acfc433000ecf6b"); + public static readonly MongoId MOUNT_MOSSBERG_590A1_TACTICAL_RAIL = new MongoId("5eeb2ff5ea4f8b73c827350b"); + public static readonly MongoId MOUNT_MP133153_TAKTIKA_TULA_12003_STOCK_ADAPTER = new MongoId("5bfe7fb30db8340018089fed"); + public static readonly MongoId MOUNT_MP155_ULTIMA_SHORT_RAIL = new MongoId("607ea812232e5a31c233d53c"); + public static readonly MongoId MOUNT_MP155_ULTIMA_TOP_RAIL = new MongoId("60785ce5132d4d12c81fd918"); public static readonly MongoId MOUNT_MP18_SIGHT = new MongoId("61f804acfcba9556ea304cb8"); - public static readonly MongoId MOUNT_MP443_GRACH_ZENIT_B8 = new MongoId( - "576a7c512459771e796e0e17" - ); + public static readonly MongoId MOUNT_MP443_GRACH_ZENIT_B8 = new MongoId("576a7c512459771e796e0e17"); public static readonly MongoId MOUNT_MP9_BOTTOM_RAIL = new MongoId("5de8fbf2b74cd90030650c79"); public static readonly MongoId MOUNT_MP9_SIDE_RAIL = new MongoId("5de8fc0b205ddc616a6bc51b"); - public static readonly MongoId MOUNT_MPX_GEN1_HANDGUARD_2_INCH_RAIL = new MongoId( - "58a56f8d86f774651579314c" - ); - public static readonly MongoId MOUNT_MPX_GEN1_HANDGUARD_4_INCH_RAIL = new MongoId( - "58a5c12e86f7745d585a2b9e" - ); - public static readonly MongoId MOUNT_NCSTAR_MPR45_BACKUP = new MongoId( - "5649a2464bdc2d91118b45a8" - ); - public static readonly MongoId MOUNT_NIGHTFORCE_MAGMOUNT_30MM_RING_SCOPE = new MongoId( - "5b3b99265acfc4704b4a1afb" - ); - public static readonly MongoId MOUNT_NIGHTFORCE_MAGMOUNT_34MM_RING_SCOPE = new MongoId( - "5aa66a9be5b5b0214e506e89" - ); - public static readonly MongoId MOUNT_NIGHTFORCE_MAGMOUNT_34MM_RING_SCOPE_MOUNT_WITH_RUGGEDIZED_ACCESSORY_PLATFORM = - new MongoId("5aa66c72e5b5b00016327c93"); - public static readonly MongoId MOUNT_NOROTOS_TITANIUM_ADVANCED_TACTICAL = new MongoId( - "5a16b8a9fcdbcb00165aa6ca" - ); - public static readonly MongoId MOUNT_NPZ_1P781_DOVETAIL = new MongoId( - "618a75c9a3884f56c957ca1b" - ); - public static readonly MongoId MOUNT_ODIN_WORKS_KPOD_KEYMOD_BIPOD_ADAPTER = new MongoId( - "67112695fe5c8bf33f02476d" - ); - public static readonly MongoId MOUNT_OPSCORE_PICATINNY_RAIL_ADAPTER = new MongoId( - "5a398b75c4a282000a51a266" - ); - public static readonly MongoId MOUNT_OPSCORE_SINGLE_CLAMP_RAIL_ADAPTER = new MongoId( - "5a398ab9c4a282000c5a9842" + public static readonly MongoId MOUNT_MPX_GEN1_HANDGUARD_2_INCH_RAIL = new MongoId("58a56f8d86f774651579314c"); + public static readonly MongoId MOUNT_MPX_GEN1_HANDGUARD_4_INCH_RAIL = new MongoId("58a5c12e86f7745d585a2b9e"); + public static readonly MongoId MOUNT_NCSTAR_MPR45_BACKUP = new MongoId("5649a2464bdc2d91118b45a8"); + public static readonly MongoId MOUNT_NIGHTFORCE_MAGMOUNT_30MM_RING_SCOPE = new MongoId("5b3b99265acfc4704b4a1afb"); + public static readonly MongoId MOUNT_NIGHTFORCE_MAGMOUNT_34MM_RING_SCOPE = new MongoId("5aa66a9be5b5b0214e506e89"); + public static readonly MongoId MOUNT_NIGHTFORCE_MAGMOUNT_34MM_RING_SCOPE_MOUNT_WITH_RUGGEDIZED_ACCESSORY_PLATFORM = new MongoId( + "5aa66c72e5b5b00016327c93" ); + public static readonly MongoId MOUNT_NOROTOS_TITANIUM_ADVANCED_TACTICAL = new MongoId("5a16b8a9fcdbcb00165aa6ca"); + public static readonly MongoId MOUNT_NPZ_1P781_DOVETAIL = new MongoId("618a75c9a3884f56c957ca1b"); + public static readonly MongoId MOUNT_ODIN_WORKS_KPOD_KEYMOD_BIPOD_ADAPTER = new MongoId("67112695fe5c8bf33f02476d"); + public static readonly MongoId MOUNT_OPSCORE_PICATINNY_RAIL_ADAPTER = new MongoId("5a398b75c4a282000a51a266"); + public static readonly MongoId MOUNT_OPSCORE_SINGLE_CLAMP_RAIL_ADAPTER = new MongoId("5a398ab9c4a282000c5a9842"); public static readonly MongoId MOUNT_OPSKS_DOVETAIL = new MongoId("587e08ee245977446b4410cf"); public static readonly MongoId MOUNT_OPSKS_UPPER_BAND = new MongoId("634f05a21f9f536910079b56"); - public static readonly MongoId MOUNT_ORSIS_T5000M_LONG_LENGTH_RAIL = new MongoId( - "5df35ea9c41b2312ea3334d8" - ); - public static readonly MongoId MOUNT_ORSIS_T5000M_MEDIUM_LENGTH_RAIL = new MongoId( - "5df35eb2b11454561e3923e2" - ); - public static readonly MongoId MOUNT_ORSIS_T5000M_SCOPE = new MongoId( - "5df35e970b92095fd441e4d2" - ); - public static readonly MongoId MOUNT_P226_BRIDGE_SIGHT = new MongoId( - "5b3a08b25acfc4001754880c" - ); - public static readonly MongoId MOUNT_P226_TRIJICON_RMR = new MongoId( - "5a32aa0cc4a28232996e405f" - ); - public static readonly MongoId MOUNT_PK_ZENIT_B50_16MM_TOP = new MongoId( - "6492c6dd60fdb10a020621a2" - ); - public static readonly MongoId MOUNT_PK_ZENIT_B50_66MM_TOP = new MongoId( - "6492c8bba6e68e06fb0bae87" - ); - public static readonly MongoId MOUNT_PNV10T_DOVETAIL_ADAPTER = new MongoId( - "5c0695860db834001b735461" - ); - public static readonly MongoId MOUNT_PP91_KEDR_ROTOR_43_RIS = new MongoId( - "57ee59b42459771c7b045da5" - ); - public static readonly MongoId MOUNT_PRECISION_REFLEX_HANDGUARD_BOTTOM_RAIL = new MongoId( - "6388c4ac8d895f557a0c6515" - ); - public static readonly MongoId MOUNT_PRECISION_REFLEX_HANDGUARD_LONG_TOP_RAIL = new MongoId( - "6388c5d19c00405f4717c0f0" - ); - public static readonly MongoId MOUNT_PRECISION_REFLEX_HANDGUARD_SHORT_SIDE_RAIL = new MongoId( - "6388c4478d895f557a0c6512" - ); - public static readonly MongoId MOUNT_PU_35X_RING_SCOPE = new MongoId( - "5b3f7c005acfc4704b4a1de8" - ); - public static readonly MongoId MOUNT_PVS7_WILCOX_ADAPTER = new MongoId( - "5c11046cd174af02a012e42b" - ); - public static readonly MongoId MOUNT_RECKNAGEL_ERATAC_30MM_RING_SCOPE = new MongoId( - "6171407e50224f204c1da3c5" - ); - public static readonly MongoId MOUNT_RECKNAGEL_ERATAC_34MM_RING_SCOPE = new MongoId( - "61713cc4d8e3106d9806c109" - ); - public static readonly MongoId MOUNT_RECKNAGEL_ERATAC_SUNSHADE_MOUNT_FOR_AIMPOINT_T1_SIGHTS = - new MongoId("61714b2467085e45ef140b2c"); - public static readonly MongoId MOUNT_REMINGTON_RAHG_2_INCH_RAIL = new MongoId( - "5c0102aa0db834001b734ba1" - ); - public static readonly MongoId MOUNT_REMINGTON_RAHG_4_INCH_RAIL = new MongoId( - "5c0102b20db834001d23eebc" - ); - public static readonly MongoId MOUNT_REPTILIA_ROF90_RMR_MOUNT_FOR_GEISSELE_SCOPE_MOUNTS = - new MongoId("618b9682a3884f56c957ca78"); - public static readonly MongoId MOUNT_REPTILIA_ROF90_RMR_MOUNT_FOR_GEISSELE_SCOPE_MOUNTS_DDC = - new MongoId("618ba92152ecee1505530bd3"); - public static readonly MongoId MOUNT_RFB_HANDGUARD_RAIL = new MongoId( - "5f2aa493cd375f14e15eea72" - ); - public static readonly MongoId MOUNT_RFB_QUAD_RAIL_3_INCH = new MongoId( - "676177591f08ed5e8800b7a9" - ); + public static readonly MongoId MOUNT_ORSIS_T5000M_LONG_LENGTH_RAIL = new MongoId("5df35ea9c41b2312ea3334d8"); + public static readonly MongoId MOUNT_ORSIS_T5000M_MEDIUM_LENGTH_RAIL = new MongoId("5df35eb2b11454561e3923e2"); + public static readonly MongoId MOUNT_ORSIS_T5000M_SCOPE = new MongoId("5df35e970b92095fd441e4d2"); + public static readonly MongoId MOUNT_P226_BRIDGE_SIGHT = new MongoId("5b3a08b25acfc4001754880c"); + public static readonly MongoId MOUNT_P226_TRIJICON_RMR = new MongoId("5a32aa0cc4a28232996e405f"); + public static readonly MongoId MOUNT_PK_ZENIT_B50_16MM_TOP = new MongoId("6492c6dd60fdb10a020621a2"); + public static readonly MongoId MOUNT_PK_ZENIT_B50_66MM_TOP = new MongoId("6492c8bba6e68e06fb0bae87"); + public static readonly MongoId MOUNT_PNV10T_DOVETAIL_ADAPTER = new MongoId("5c0695860db834001b735461"); + public static readonly MongoId MOUNT_PP91_KEDR_ROTOR_43_RIS = new MongoId("57ee59b42459771c7b045da5"); + public static readonly MongoId MOUNT_PRECISION_REFLEX_HANDGUARD_BOTTOM_RAIL = new MongoId("6388c4ac8d895f557a0c6515"); + public static readonly MongoId MOUNT_PRECISION_REFLEX_HANDGUARD_LONG_TOP_RAIL = new MongoId("6388c5d19c00405f4717c0f0"); + public static readonly MongoId MOUNT_PRECISION_REFLEX_HANDGUARD_SHORT_SIDE_RAIL = new MongoId("6388c4478d895f557a0c6512"); + public static readonly MongoId MOUNT_PU_35X_RING_SCOPE = new MongoId("5b3f7c005acfc4704b4a1de8"); + public static readonly MongoId MOUNT_PVS7_WILCOX_ADAPTER = new MongoId("5c11046cd174af02a012e42b"); + public static readonly MongoId MOUNT_RECKNAGEL_ERATAC_30MM_RING_SCOPE = new MongoId("6171407e50224f204c1da3c5"); + public static readonly MongoId MOUNT_RECKNAGEL_ERATAC_34MM_RING_SCOPE = new MongoId("61713cc4d8e3106d9806c109"); + public static readonly MongoId MOUNT_RECKNAGEL_ERATAC_SUNSHADE_MOUNT_FOR_AIMPOINT_T1_SIGHTS = new MongoId("61714b2467085e45ef140b2c"); + public static readonly MongoId MOUNT_REMINGTON_RAHG_2_INCH_RAIL = new MongoId("5c0102aa0db834001b734ba1"); + public static readonly MongoId MOUNT_REMINGTON_RAHG_4_INCH_RAIL = new MongoId("5c0102b20db834001d23eebc"); + public static readonly MongoId MOUNT_REPTILIA_ROF90_RMR_MOUNT_FOR_GEISSELE_SCOPE_MOUNTS = new MongoId("618b9682a3884f56c957ca78"); + public static readonly MongoId MOUNT_REPTILIA_ROF90_RMR_MOUNT_FOR_GEISSELE_SCOPE_MOUNTS_DDC = new MongoId("618ba92152ecee1505530bd3"); + public static readonly MongoId MOUNT_RFB_HANDGUARD_RAIL = new MongoId("5f2aa493cd375f14e15eea72"); + public static readonly MongoId MOUNT_RFB_QUAD_RAIL_3_INCH = new MongoId("676177591f08ed5e8800b7a9"); public static readonly MongoId MOUNT_RFB_SCOPE_RAIL = new MongoId("5f2aa49f9b44de6b1b4e68d4"); - public static readonly MongoId MOUNT_RPK16_HANDGUARD_RAIL = new MongoId( - "5beecbb80db834001d2c465e" - ); - public static readonly MongoId MOUNT_RS_REGULATE_AK303M_FULL_LENGTH_LOWER_DOVETAIL = - new MongoId("65f1b1176dbd6c5ba2082eed"); - public static readonly MongoId MOUNT_RS_REGULATE_AKR_TOP = new MongoId( - "65f1b2a5c14a07890801fc70" - ); - public static readonly MongoId MOUNT_SAG_AK_DOVETAIL_SIDE = new MongoId( - "63d114019e35b334d82302f7" - ); - public static readonly MongoId MOUNT_SAG_BIT_LOW_PROFILE_DOVETAIL_SIDE = new MongoId( - "638db77630c4240f9e06f8b6" - ); - public static readonly MongoId MOUNT_SAKO_TRG_M10_SCOPE = new MongoId( - "673cb51e093e0ea7fd0b8746" - ); - public static readonly MongoId MOUNT_SAKO_TRG_MEDIUM_LENGTH_RAIL = new MongoId( - "673dd617912f68467c0615b6" - ); - public static readonly MongoId MOUNT_SAKO_TRG_SHORT_LENGTH_RAIL = new MongoId( - "673dd5f73f92dc7e120d20a9" - ); - public static readonly MongoId MOUNT_SIG_SAUER_ALPHA4_30MM_RING_SCOPE = new MongoId( - "6567e751a715f85433025998" - ); - public static readonly MongoId MOUNT_SIG_SAUER_ROMEO_SIGHT = new MongoId( - "5b31163c5acfc400153b71cb" - ); + public static readonly MongoId MOUNT_RPK16_HANDGUARD_RAIL = new MongoId("5beecbb80db834001d2c465e"); + public static readonly MongoId MOUNT_RS_REGULATE_AK303M_FULL_LENGTH_LOWER_DOVETAIL = new MongoId("65f1b1176dbd6c5ba2082eed"); + public static readonly MongoId MOUNT_RS_REGULATE_AKR_TOP = new MongoId("65f1b2a5c14a07890801fc70"); + public static readonly MongoId MOUNT_SAG_AK_DOVETAIL_SIDE = new MongoId("63d114019e35b334d82302f7"); + public static readonly MongoId MOUNT_SAG_BIT_LOW_PROFILE_DOVETAIL_SIDE = new MongoId("638db77630c4240f9e06f8b6"); + public static readonly MongoId MOUNT_SAKO_TRG_M10_SCOPE = new MongoId("673cb51e093e0ea7fd0b8746"); + public static readonly MongoId MOUNT_SAKO_TRG_MEDIUM_LENGTH_RAIL = new MongoId("673dd617912f68467c0615b6"); + public static readonly MongoId MOUNT_SAKO_TRG_SHORT_LENGTH_RAIL = new MongoId("673dd5f73f92dc7e120d20a9"); + public static readonly MongoId MOUNT_SIG_SAUER_ALPHA4_30MM_RING_SCOPE = new MongoId("6567e751a715f85433025998"); + public static readonly MongoId MOUNT_SIG_SAUER_ROMEO_SIGHT = new MongoId("5b31163c5acfc400153b71cb"); public static readonly MongoId MOUNT_SKS_CHOATE_SCOPE = new MongoId("6415d33eda439c6a97048b5b"); - public static readonly MongoId MOUNT_SKS_LEAPERS_UTG_SOCOM_RAIL = new MongoId( - "593d1fa786f7746da62d61ac" - ); - public static readonly MongoId MOUNT_SKS_TAPCO_INTRAFUSE_CHASSIS_LOWER_RAIL = new MongoId( - "653ed19d22e1ef3d9002c328" - ); + public static readonly MongoId MOUNT_SKS_LEAPERS_UTG_SOCOM_RAIL = new MongoId("593d1fa786f7746da62d61ac"); + public static readonly MongoId MOUNT_SKS_TAPCO_INTRAFUSE_CHASSIS_LOWER_RAIL = new MongoId("653ed19d22e1ef3d9002c328"); public static readonly MongoId MOUNT_SKS_UPPER_BAND = new MongoId("634f04d82e5def262d0b30c6"); - public static readonly MongoId MOUNT_SOK12_CHAOS_TITAN_QUAD_RAIL_HANDGUARD_TOP_COVER = - new MongoId("674fe89a4472d471fb0f07d8"); - public static readonly MongoId MOUNT_SOK12_CHAOS_TITAN_RECEIVER_TOP_RAIL = new MongoId( - "674fe8b9362ea1f88b0e278d" - ); + public static readonly MongoId MOUNT_SOK12_CHAOS_TITAN_QUAD_RAIL_HANDGUARD_TOP_COVER = new MongoId("674fe89a4472d471fb0f07d8"); + public static readonly MongoId MOUNT_SOK12_CHAOS_TITAN_RECEIVER_TOP_RAIL = new MongoId("674fe8b9362ea1f88b0e278d"); public static readonly MongoId MOUNT_SR1MP_QUAD_RAIL = new MongoId("5a27bad7c4a282000b15184b"); - public static readonly MongoId MOUNT_SR1MP_SINGLE_RAIL = new MongoId( - "5a27b281c4a28200741e1e52" - ); - public static readonly MongoId MOUNT_SR1MP_SOUND_SUPPRESSOR = new MongoId( - "5a27b3d0c4a282000d721ec1" - ); - public static readonly MongoId MOUNT_SR2M_SHORT_SIDE_RAIL = new MongoId( - "62ed189fb3608410ef5a2bfc" - ); + public static readonly MongoId MOUNT_SR1MP_SINGLE_RAIL = new MongoId("5a27b281c4a28200741e1e52"); + public static readonly MongoId MOUNT_SR1MP_SOUND_SUPPRESSOR = new MongoId("5a27b3d0c4a282000d721ec1"); + public static readonly MongoId MOUNT_SR2M_SHORT_SIDE_RAIL = new MongoId("62ed189fb3608410ef5a2bfc"); public static readonly MongoId MOUNT_SR2M_SIDE_RAIL = new MongoId("62ed1921b3608410ef5a2c04"); public static readonly MongoId MOUNT_SR2M_ZENIT_B17 = new MongoId("62e281349ecd3f493f6df954"); - public static readonly MongoId MOUNT_SR3MP_DOVETAIL_SIDE_RAIL_BLACK = new MongoId( - "67069c8cee8138ed2f05ad34" - ); - public static readonly MongoId MOUNT_SR3MP_DOVETAIL_SIDE_RAIL_PLUM = new MongoId( - "67069cbbb29a2cd33803338c" - ); - public static readonly MongoId MOUNT_SR3MP_SIDE_RAILS_BLACK = new MongoId( - "67069cf1af4890b09f0006e8" - ); - public static readonly MongoId MOUNT_SR3MP_SIDE_RAILS_PLUM = new MongoId( - "67069d02ad91f3a63c0bc2b0" - ); - public static readonly MongoId MOUNT_STEYR_AUG_A3_CORVUS_DEFENSIO_RECEIVER_RAIL_MOI_30_SLOTS = - new MongoId("67110dd41ad01bb88705347b"); - public static readonly MongoId MOUNT_STEYR_AUG_A3_M1_HIGH_SIGHT = new MongoId( - "62e7c8f91cd3fde4d503d690" - ); - public static readonly MongoId MOUNT_STEYR_AUG_A3_M1_LOW_SIGHT = new MongoId( - "62ebba1fb658e07ef9082b5a" - ); - public static readonly MongoId MOUNT_STEYR_AUG_CORVUS_DEFENSIO_KEYMOD_FORWARD_ACCESSORY_RAIL = - new MongoId("6711107e1ad01bb88705347e"); - public static readonly MongoId MOUNT_STRIKE_INDUSTRIES_KEYMOD_4_INCH_RAIL = new MongoId( - "5a9d6d00a2750c5c985b5305" - ); - public static readonly MongoId MOUNT_STRIKE_INDUSTRIES_KEYMOD_6_INCH_RAIL = new MongoId( - "5a9d6d13a2750c00164f6b03" - ); - public static readonly MongoId MOUNT_STRIKE_INDUSTRIES_TRAX_BRIDGE_RAIL = new MongoId( - "5a9d6d21a2750c00137fa649" - ); - public static readonly MongoId MOUNT_SVD_CAA_DRG_L1_BARREL_MOUNT_RAIL = new MongoId( - "5e569a132642e66b0b68015c" - ); - public static readonly MongoId MOUNT_SVD_CAA_XD_RGL_RECEIVER = new MongoId( - "5e569a2e56edd02abe09f280" - ); - public static readonly MongoId MOUNT_SVD_MODERNIZATION_KIT_TOP_RAIL = new MongoId( - "5e569a0156edd02abe09f27d" - ); - public static readonly MongoId MOUNT_SVD_SAG_LOW_PROFILE_SIDE = new MongoId( - "5dff8db859400025ea5150d4" - ); + public static readonly MongoId MOUNT_SR3MP_DOVETAIL_SIDE_RAIL_BLACK = new MongoId("67069c8cee8138ed2f05ad34"); + public static readonly MongoId MOUNT_SR3MP_DOVETAIL_SIDE_RAIL_PLUM = new MongoId("67069cbbb29a2cd33803338c"); + public static readonly MongoId MOUNT_SR3MP_SIDE_RAILS_BLACK = new MongoId("67069cf1af4890b09f0006e8"); + public static readonly MongoId MOUNT_SR3MP_SIDE_RAILS_PLUM = new MongoId("67069d02ad91f3a63c0bc2b0"); + public static readonly MongoId MOUNT_STEYR_AUG_A3_CORVUS_DEFENSIO_RECEIVER_RAIL_MOI_30_SLOTS = new MongoId("67110dd41ad01bb88705347b"); + public static readonly MongoId MOUNT_STEYR_AUG_A3_M1_HIGH_SIGHT = new MongoId("62e7c8f91cd3fde4d503d690"); + public static readonly MongoId MOUNT_STEYR_AUG_A3_M1_LOW_SIGHT = new MongoId("62ebba1fb658e07ef9082b5a"); + public static readonly MongoId MOUNT_STEYR_AUG_CORVUS_DEFENSIO_KEYMOD_FORWARD_ACCESSORY_RAIL = new MongoId("6711107e1ad01bb88705347e"); + public static readonly MongoId MOUNT_STRIKE_INDUSTRIES_KEYMOD_4_INCH_RAIL = new MongoId("5a9d6d00a2750c5c985b5305"); + public static readonly MongoId MOUNT_STRIKE_INDUSTRIES_KEYMOD_6_INCH_RAIL = new MongoId("5a9d6d13a2750c00164f6b03"); + public static readonly MongoId MOUNT_STRIKE_INDUSTRIES_TRAX_BRIDGE_RAIL = new MongoId("5a9d6d21a2750c00137fa649"); + public static readonly MongoId MOUNT_SVD_CAA_DRG_L1_BARREL_MOUNT_RAIL = new MongoId("5e569a132642e66b0b68015c"); + public static readonly MongoId MOUNT_SVD_CAA_XD_RGL_RECEIVER = new MongoId("5e569a2e56edd02abe09f280"); + public static readonly MongoId MOUNT_SVD_MODERNIZATION_KIT_TOP_RAIL = new MongoId("5e569a0156edd02abe09f27d"); + public static readonly MongoId MOUNT_SVD_SAG_LOW_PROFILE_SIDE = new MongoId("5dff8db859400025ea5150d4"); public static readonly MongoId MOUNT_SVDS_UPPER_BAND = new MongoId("5c471c2d2e22164bef5d077f"); public static readonly MongoId MOUNT_SVT40_TOKAREV_PU = new MongoId("641dc35e19604f20c800be18"); - public static readonly MongoId MOUNT_TONI_SYSTEM_TACTICAL_BARREL_CLAMP = new MongoId( - "676177b09cfcc4c25b027446" - ); + public static readonly MongoId MOUNT_TONI_SYSTEM_TACTICAL_BARREL_CLAMP = new MongoId("676177b09cfcc4c25b027446"); public static readonly MongoId MOUNT_TOZ106_DOVETAIL = new MongoId("5c6162682e22160010261a2b"); - public static readonly MongoId MOUNT_TOZ106_RAIL_SCOPE = new MongoId( - "5c61627a2e22160012542c55" - ); - public static readonly MongoId MOUNT_TRIJICON_RMR_HIGH_PROFILE = new MongoId( - "5a33b652c4a28232996e407c" - ); - public static readonly MongoId MOUNT_TRIJICON_RMR_LOW_PROFILE = new MongoId( - "5a33b2c9c4a282000c5a9511" - ); - public static readonly MongoId MOUNT_TRIJICON_RMR_MOUNT_FOR_ACOG_SCOPES = new MongoId( - "5a33bab6c4a28200741e22f8" - ); - public static readonly MongoId MOUNT_TRIJICON_TA51_SIGHT = new MongoId( - "59db7eed86f77461f8380365" - ); - public static readonly MongoId MOUNT_TROY_QARS_32_INCH_RAIL = new MongoId( - "5b4736a986f774040571e998" - ); - public static readonly MongoId MOUNT_TROY_QARS_42_INCH_RAIL = new MongoId( - "5b4736b986f77405cb415c10" - ); - public static readonly MongoId MOUNT_UM_TACTICAL_UM3_PISTOL_SIGHT = new MongoId( - "5a7b4900e899ef197b331a2a" - ); - public static readonly MongoId MOUNT_UNV_DLOCIRD_SIGHT = new MongoId( - "5a1ead28fcdbcb001912fa9f" - ); - public static readonly MongoId MOUNT_UZI_HANDGUARD_RAIL = new MongoId( - "6698c8f4710a4525fe0e9e57" - ); - public static readonly MongoId MOUNT_UZI_PRO_SMG_RAIL_ADAPTER = new MongoId( - "668ea3f68117e4968b0cff4a" - ); - public static readonly MongoId MOUNT_UZI_STORMWERKZ_LOWER_HANDGUARD_RAIL = new MongoId( - "66992f7d9950f5f4cd0602a8" - ); - public static readonly MongoId MOUNT_UZI_STORMWERKZ_SCOPE = new MongoId( - "6698c90829e062525d0ad8ad" - ); - public static readonly MongoId MOUNT_VLTOR_CASV_2_INCH_RAIL = new MongoId( - "5b7be4575acfc400161d0832" - ); - public static readonly MongoId MOUNT_VLTOR_CASV_4_INCH_RAIL = new MongoId( - "5b7be4645acfc400170e2dcc" - ); - public static readonly MongoId MOUNT_VLTOR_CASV_5_INCH_RAIL = new MongoId( - "5b7be46e5acfc400170e2dcf" - ); - public static readonly MongoId MOUNT_VLTOR_CASV_KEYMOD_2_INCH_RAIL = new MongoId( - "59e0bdb186f774156f04ce82" - ); - public static readonly MongoId MOUNT_VLTOR_CASV_KEYMOD_4_INCH_RAIL = new MongoId( - "59e0be5d86f7742d48765bd2" - ); - public static readonly MongoId MOUNT_VLTOR_CASV_KEYMOD_6_INCH_RAIL = new MongoId( - "59e0bed186f774156f04ce84" - ); - public static readonly MongoId MOUNT_VOMZ_PILAD_04302_DOVETAIL = new MongoId( - "57acb6222459771ec34b5cb0" - ); + public static readonly MongoId MOUNT_TOZ106_RAIL_SCOPE = new MongoId("5c61627a2e22160012542c55"); + public static readonly MongoId MOUNT_TRIJICON_RMR_HIGH_PROFILE = new MongoId("5a33b652c4a28232996e407c"); + public static readonly MongoId MOUNT_TRIJICON_RMR_LOW_PROFILE = new MongoId("5a33b2c9c4a282000c5a9511"); + public static readonly MongoId MOUNT_TRIJICON_RMR_MOUNT_FOR_ACOG_SCOPES = new MongoId("5a33bab6c4a28200741e22f8"); + public static readonly MongoId MOUNT_TRIJICON_TA51_SIGHT = new MongoId("59db7eed86f77461f8380365"); + public static readonly MongoId MOUNT_TROY_QARS_32_INCH_RAIL = new MongoId("5b4736a986f774040571e998"); + public static readonly MongoId MOUNT_TROY_QARS_42_INCH_RAIL = new MongoId("5b4736b986f77405cb415c10"); + public static readonly MongoId MOUNT_UM_TACTICAL_UM3_PISTOL_SIGHT = new MongoId("5a7b4900e899ef197b331a2a"); + public static readonly MongoId MOUNT_UNV_DLOCIRD_SIGHT = new MongoId("5a1ead28fcdbcb001912fa9f"); + public static readonly MongoId MOUNT_UZI_HANDGUARD_RAIL = new MongoId("6698c8f4710a4525fe0e9e57"); + public static readonly MongoId MOUNT_UZI_PRO_SMG_RAIL_ADAPTER = new MongoId("668ea3f68117e4968b0cff4a"); + public static readonly MongoId MOUNT_UZI_STORMWERKZ_LOWER_HANDGUARD_RAIL = new MongoId("66992f7d9950f5f4cd0602a8"); + public static readonly MongoId MOUNT_UZI_STORMWERKZ_SCOPE = new MongoId("6698c90829e062525d0ad8ad"); + public static readonly MongoId MOUNT_VLTOR_CASV_2_INCH_RAIL = new MongoId("5b7be4575acfc400161d0832"); + public static readonly MongoId MOUNT_VLTOR_CASV_4_INCH_RAIL = new MongoId("5b7be4645acfc400170e2dcc"); + public static readonly MongoId MOUNT_VLTOR_CASV_5_INCH_RAIL = new MongoId("5b7be46e5acfc400170e2dcf"); + public static readonly MongoId MOUNT_VLTOR_CASV_KEYMOD_2_INCH_RAIL = new MongoId("59e0bdb186f774156f04ce82"); + public static readonly MongoId MOUNT_VLTOR_CASV_KEYMOD_4_INCH_RAIL = new MongoId("59e0be5d86f7742d48765bd2"); + public static readonly MongoId MOUNT_VLTOR_CASV_KEYMOD_6_INCH_RAIL = new MongoId("59e0bed186f774156f04ce84"); + public static readonly MongoId MOUNT_VOMZ_PILAD_04302_DOVETAIL = new MongoId("57acb6222459771ec34b5cb0"); public static readonly MongoId MOUNT_VPO102_ARBALET = new MongoId("609a4b4fe2ff132951242d04"); - public static readonly MongoId MOUNT_VPO215_SCOPE_RAIL = new MongoId( - "5de6558e9f98ac2bc65950fc" - ); + public static readonly MongoId MOUNT_VPO215_SCOPE_RAIL = new MongoId("5de6558e9f98ac2bc65950fc"); public static readonly MongoId MOUNT_VSSVAL_TOZ_6P29M = new MongoId("59eb7ebe86f7740b373438ce"); - public static readonly MongoId MOUNT_VSSVAL_ZENIT_B3_MOUNT_COMBO = new MongoId( - "5a9fc7e6a2750c0032157184" + public static readonly MongoId MOUNT_VSSVAL_ZENIT_B3_MOUNT_COMBO = new MongoId("5a9fc7e6a2750c0032157184"); + public static readonly MongoId MOUNT_VSSVAL_ZENIT_B3_RING = new MongoId("57a3459f245977764a01f703"); + public static readonly MongoId MOUNT_ZENIT_B13_KLASSIKA_DOVETAIL_RAIL_PLATFORM = new MongoId("5c61a40d2e2216001403158d"); + public static readonly MongoId MOUNT_ZENIT_B13V_KLASSIKA_DOVETAIL_RAIL_PLATFORM = new MongoId("5c90c3622e221601da359851"); + public static readonly MongoId MOUNT_ZENIT_KR2_OLD_GEN = new MongoId("646f6322f43d0c5d62063715"); + public static readonly MongoId MULTITOOLS_LEATHERMAN_MULTITOOL = new MongoId("544fb5454bdc2df8738b456a"); + public static readonly MongoId MUZZLECOMBO_9A91_HANDGUARD_RETAINER = new MongoId("64527a263d52156624001fd7"); + public static readonly MongoId MUZZLECOMBO_AA12_12GA_CHOKE = new MongoId("670fd1cc95c92bfc8e0bea39"); + public static readonly MongoId MUZZLECOMBO_AA12_THREAD_PROTECTOR = new MongoId("670fd0eed8d4eae4790c818a"); + public static readonly MongoId MUZZLECOMBO_AI_AXMC_THREAD_PROTECTOR = new MongoId("628120621d5df4475f46a335"); + public static readonly MongoId MUZZLECOMBO_AK_762X39_TAKTIKA_TULA_MUZZLE_ADAPTER = new MongoId("5a0abb6e1526d8000a025282"); + public static readonly MongoId MUZZLECOMBO_AK_CNC_WARRIOR_556X45_MUZZLE_DEVICE_ADAPTER = new MongoId("5e21ca18e4d47f0da15e77dd"); + public static readonly MongoId MUZZLECOMBO_AKM_762X39_KIBA_ARMS_308_MUZZLE_DEVICE_ADAPTER = new MongoId("615d8e9867085e45ef1409c6"); + public static readonly MongoId MUZZLECOMBO_ASE_UTRA_BORELOCK_THREAD_PROTECTOR = new MongoId("673f3f2f40aeca974e0b5c66"); + public static readonly MongoId MUZZLECOMBO_AWC_PSR_MUZZLE_BRAKE_PROTECTOR = new MongoId("612e0e04568c120fdd294258"); + public static readonly MongoId MUZZLECOMBO_GEMTECH_ONE_DIRECT_THREAD_MOUNT_ADAPTER = new MongoId("5c7954d52e221600106f4cc7"); + public static readonly MongoId MUZZLECOMBO_GK01_12GA_COMPENSATOR = new MongoId("5580239d4bdc2de7118b4583"); + public static readonly MongoId MUZZLECOMBO_GK02_12GA_MUZZLE_BRAKE = new MongoId("58272d7f2459774f6311ddfd"); + public static readonly MongoId MUZZLECOMBO_GLOCK_9X19_DOUBLE_DIAMOND_THREAD_PROTECTOR = new MongoId("5a6b592c8dc32e00094b97bf"); + public static readonly MongoId MUZZLECOMBO_GLOCK_9X19_LONE_WOLF_ALPHAWOLF_THREAD_PROTECTOR = new MongoId("5a6b585a8dc32e5a9c28b4f1"); + public static readonly MongoId MUZZLECOMBO_GLOCK_SAI_9X19_THREAD_PROTECTOR = new MongoId("5a6b59a08dc32e000b452fb7"); + public static readonly MongoId MUZZLECOMBO_HK_MP5_3LUG_MUZZLE_ADAPTER = new MongoId("5926e16e86f7742f5a0f7ecb"); + public static readonly MongoId MUZZLECOMBO_HK_MP5_NAVY_STYLE_3LUG_SUPPRESSOR_ADAPTER = new MongoId("5c0000c00db834001a6697fc"); + public static readonly MongoId MUZZLECOMBO_HK_USP_TACTICAL_THREAD_PROTECTOR = new MongoId("6194f1f918a3974e5e7421e4"); + public static readonly MongoId MUZZLECOMBO_KRISS_VECTOR_45_ACP_THREAD_PROTECTOR = new MongoId("5fb6548dd1409e5ca04b54f9"); + public static readonly MongoId MUZZLECOMBO_KRISS_VECTOR_9X19_THREAD_PROTECTOR = new MongoId("5fbbc34106bde7524f03cbe9"); + public static readonly MongoId MUZZLECOMBO_LANTAC_BMD_BLAST_MITIGATION_DEVICE_A3_DIRECT_THREAD_ADAPTER = new MongoId( + "5cf78496d7f00c065703d6ca" ); - public static readonly MongoId MOUNT_VSSVAL_ZENIT_B3_RING = new MongoId( - "57a3459f245977764a01f703" - ); - public static readonly MongoId MOUNT_ZENIT_B13_KLASSIKA_DOVETAIL_RAIL_PLATFORM = new MongoId( - "5c61a40d2e2216001403158d" - ); - public static readonly MongoId MOUNT_ZENIT_B13V_KLASSIKA_DOVETAIL_RAIL_PLATFORM = new MongoId( - "5c90c3622e221601da359851" - ); - public static readonly MongoId MOUNT_ZENIT_KR2_OLD_GEN = new MongoId( - "646f6322f43d0c5d62063715" - ); - public static readonly MongoId MULTITOOLS_LEATHERMAN_MULTITOOL = new MongoId( - "544fb5454bdc2df8738b456a" - ); - public static readonly MongoId MUZZLECOMBO_9A91_HANDGUARD_RETAINER = new MongoId( - "64527a263d52156624001fd7" - ); - public static readonly MongoId MUZZLECOMBO_AA12_12GA_CHOKE = new MongoId( - "670fd1cc95c92bfc8e0bea39" - ); - public static readonly MongoId MUZZLECOMBO_AA12_THREAD_PROTECTOR = new MongoId( - "670fd0eed8d4eae4790c818a" - ); - public static readonly MongoId MUZZLECOMBO_AI_AXMC_THREAD_PROTECTOR = new MongoId( - "628120621d5df4475f46a335" - ); - public static readonly MongoId MUZZLECOMBO_AK_762X39_TAKTIKA_TULA_MUZZLE_ADAPTER = new MongoId( - "5a0abb6e1526d8000a025282" - ); - public static readonly MongoId MUZZLECOMBO_AK_CNC_WARRIOR_556X45_MUZZLE_DEVICE_ADAPTER = - new MongoId("5e21ca18e4d47f0da15e77dd"); - public static readonly MongoId MUZZLECOMBO_AKM_762X39_KIBA_ARMS_308_MUZZLE_DEVICE_ADAPTER = - new MongoId("615d8e9867085e45ef1409c6"); - public static readonly MongoId MUZZLECOMBO_ASE_UTRA_BORELOCK_THREAD_PROTECTOR = new MongoId( - "673f3f2f40aeca974e0b5c66" - ); - public static readonly MongoId MUZZLECOMBO_AWC_PSR_MUZZLE_BRAKE_PROTECTOR = new MongoId( - "612e0e04568c120fdd294258" - ); - public static readonly MongoId MUZZLECOMBO_GEMTECH_ONE_DIRECT_THREAD_MOUNT_ADAPTER = - new MongoId("5c7954d52e221600106f4cc7"); - public static readonly MongoId MUZZLECOMBO_GK01_12GA_COMPENSATOR = new MongoId( - "5580239d4bdc2de7118b4583" - ); - public static readonly MongoId MUZZLECOMBO_GK02_12GA_MUZZLE_BRAKE = new MongoId( - "58272d7f2459774f6311ddfd" - ); - public static readonly MongoId MUZZLECOMBO_GLOCK_9X19_DOUBLE_DIAMOND_THREAD_PROTECTOR = - new MongoId("5a6b592c8dc32e00094b97bf"); - public static readonly MongoId MUZZLECOMBO_GLOCK_9X19_LONE_WOLF_ALPHAWOLF_THREAD_PROTECTOR = - new MongoId("5a6b585a8dc32e5a9c28b4f1"); - public static readonly MongoId MUZZLECOMBO_GLOCK_SAI_9X19_THREAD_PROTECTOR = new MongoId( - "5a6b59a08dc32e000b452fb7" - ); - public static readonly MongoId MUZZLECOMBO_HK_MP5_3LUG_MUZZLE_ADAPTER = new MongoId( - "5926e16e86f7742f5a0f7ecb" - ); - public static readonly MongoId MUZZLECOMBO_HK_MP5_NAVY_STYLE_3LUG_SUPPRESSOR_ADAPTER = - new MongoId("5c0000c00db834001a6697fc"); - public static readonly MongoId MUZZLECOMBO_HK_USP_TACTICAL_THREAD_PROTECTOR = new MongoId( - "6194f1f918a3974e5e7421e4" - ); - public static readonly MongoId MUZZLECOMBO_KRISS_VECTOR_45_ACP_THREAD_PROTECTOR = new MongoId( - "5fb6548dd1409e5ca04b54f9" - ); - public static readonly MongoId MUZZLECOMBO_KRISS_VECTOR_9X19_THREAD_PROTECTOR = new MongoId( - "5fbbc34106bde7524f03cbe9" - ); - public static readonly MongoId MUZZLECOMBO_LANTAC_BMD_BLAST_MITIGATION_DEVICE_A3_DIRECT_THREAD_ADAPTER = - new MongoId("5cf78496d7f00c065703d6ca"); - public static readonly MongoId MUZZLECOMBO_M700_STAINLESS_STEEL_THREAD_PROTECTOR = new MongoId( - "5d270ca28abbc31ee25ee821" - ); - public static readonly MongoId MUZZLECOMBO_M700_THREAD_PROTECTOR = new MongoId( - "5d270b3c8abbc3105335cfb8" - ); - public static readonly MongoId MUZZLECOMBO_M9A3_THREAD_PROTECTOR = new MongoId( - "5cadc390ae921500126a77f1" - ); - public static readonly MongoId MUZZLECOMBO_ME_CYLINDER_12GA_MUZZLE_ADAPTER = new MongoId( - "5c0111ab0db834001966914d" - ); - public static readonly MongoId MUZZLECOMBO_MOSIN_RIFLE_KIBA_ARMS_762X54R_CUSTOM_THREAD_ADAPTER = - new MongoId("5cf79389d7f00c10941a0c4d"); - public static readonly MongoId MUZZLECOMBO_MOSIN_RIFLE_TIGER_ROCK_762X51_THREAD_ADAPTER = - new MongoId("5cf79599d7f00c10875d9212"); - public static readonly MongoId MUZZLECOMBO_MOSIN_RIFLE_WEAPON_TUNING_762X39_THREAD_ADAPTER = - new MongoId("5cf67a1bd7f00c06585fb6f3"); - public static readonly MongoId MUZZLECOMBO_MP9_9X19_SOUND_SUPPRESSOR_MOUNT = new MongoId( - "5de8f237bbaf010b10528a70" - ); - public static readonly MongoId MUZZLECOMBO_MTS25512_12GA_CHOKE = new MongoId( - "619d36da53b4d42ee724fae4" - ); - public static readonly MongoId MUZZLECOMBO_P226_THREAD_PROTECTOR = new MongoId( - "587de5ba2459771c0f1e8a58" - ); - public static readonly MongoId MUZZLECOMBO_PP9101_KEDRB_THREADED_SUPPRESSOR_ADAPTER = - new MongoId("57f3c7e024597738ea4ba286"); - public static readonly MongoId MUZZLECOMBO_REMINGTON_TACTICAL_CHOKE_12GA = new MongoId( - "560838c94bdc2d77798b4569" - ); - public static readonly MongoId MUZZLECOMBO_RFB_THREAD_PROTECTOR = new MongoId( - "5f2aa4464b50c14bcf07acdb" - ); - public static readonly MongoId MUZZLECOMBO_RFB_THREAD_SPACER = new MongoId( - "5f2aa43ba9b91d26f20ae6d2" - ); - public static readonly MongoId MUZZLECOMBO_RPD_BARREL_THREAD_PROTECTOR = new MongoId( - "6513f0f5e63f29908d0ffab8" - ); - public static readonly MongoId MUZZLECOMBO_SAKO_TRG_338_LM_THREAD_PROTECTOR = new MongoId( - "673f3f5eef7545280c00f026" - ); - public static readonly MongoId MUZZLECOMBO_SIG_SAUER_TAPERLOK_762X51300_BLK_MUZZLE_ADAPTER = - new MongoId("5fbc22ccf24b94483f726483"); - public static readonly MongoId MUZZLECOMBO_SILENCERCO_HYBRID_46_DIRECT_THREAD_MOUNT_ADAPTER = - new MongoId("59bffc1f86f77435b128b872"); - public static readonly MongoId MUZZLECOMBO_SILENCERCO_OMEGA_45K_DIRECT_THREAD_MOUNT_ADAPTER = - new MongoId("5fc4b992187fea44d52edaa9"); - public static readonly MongoId MUZZLECOMBO_SILENCERCO_OMEGA_45K_PISTON_MOUNT_ADAPTER = - new MongoId("5fc4b97bab884124df0cd5e3"); - public static readonly MongoId MUZZLECOMBO_SILENCERCO_SALVO_12_CHOKE_ADAPTER = new MongoId( - "5b363dea5acfc4771e1c5e7e" - ); - public static readonly MongoId MUZZLECOMBO_SILENCERCO_SALVO_12_THREAD_ADAPTER = new MongoId( - "5b363e1b5acfc4771e1c5e80" - ); - public static readonly MongoId MUZZLECOMBO_SKS_WEAPON_TUNING_762X39_THREAD_ADAPTER = - new MongoId("5cf67cadd7f00c065a5abab7"); - public static readonly MongoId MUZZLECOMBO_SOK12_THREAD_PROTECTOR = new MongoId( - "576167ab2459773cad038c43" - ); - public static readonly MongoId MUZZLECOMBO_SR2M_9X21_HAND_STOPPER = new MongoId( - "62e2a754b6c0ee2f230cee0f" - ); - public static readonly MongoId MUZZLECOMBO_STEYR_AUG_RAT_WORX_556X45_MUZZLE_DEVICE_ADAPTER = - new MongoId("630f27f04f3f6281050b94d7"); - public static readonly MongoId MUZZLECOMBO_SVDS_ROTOR_43_THREAD_ADAPTER = new MongoId( - "5e01e9e273d8eb11426f5bc3" - ); - public static readonly MongoId MUZZLECOMBO_TROMIX_MONSTER_CLAW_12GA_MUZZLE_BRAKE = new MongoId( - "59fb137a86f7740adb646af1" - ); - public static readonly MongoId MUZZLECOMBO_UZI_9X19_3LUG_BARREL_RETAINING_NUT = new MongoId( - "6698c9ba29e062525d0ad8b1" - ); - public static readonly MongoId MUZZLECOMBO_UZI_9X19_3LUG_BARREL_THREAD_PROTECTOR = new MongoId( - "6698c9c636ba38d291017711" - ); - public static readonly MongoId MUZZLECOMBO_UZI_9X19_BARREL_RETAINING_NUT = new MongoId( - "6698c9aa36ba38d29101770f" - ); - public static readonly MongoId MUZZLECOMBO_UZI_PRO_9X19_BARREL_RETAINING_NUT = new MongoId( - "668670e3fb75ee4a5e02eb16" - ); - public static readonly MongoId MUZZLECOMBO_UZI_PRO_9X19_MASADA_THREAD_PROTECTOR = new MongoId( - "668670f52a2296a8d909963c" - ); - public static readonly MongoId MUZZLECOMBO_VPO215_THREAD_PROTECTOR = new MongoId( - "5de6556a205ddc616a6bc4f7" - ); - public static readonly MongoId NIGHTVISION_ARMASIGHT_N15_NIGHT_VISION_GOGGLES = new MongoId( - "5c066e3a0db834001b7353f0" - ); - public static readonly MongoId NIGHTVISION_L3HARRIS_ANPVS14_NIGHT_VISION_MONOCULAR = - new MongoId("57235b6f24597759bf5a30f1"); - public static readonly MongoId NIGHTVISION_L3HARRIS_GPNVG18_NIGHT_VISION_GOGGLES = new MongoId( - "5c0558060db834001b735271" - ); - public static readonly MongoId NIGHTVISION_PNV10T_NIGHT_VISION_GOGGLES = new MongoId( - "5c0696830db834001d23f5da" - ); - public static readonly MongoId NIGHTVISION_PNV57E_NIGHT_VISION_GOGGLES = new MongoId( - "67506ca81f18589016006aa6" - ); - public static readonly MongoId OPTICSCOPE_BELOMO_PSO1_4X24_SCOPE = new MongoId( - "5c82342f2e221644f31c060e" - ); - public static readonly MongoId OPTICSCOPE_BELOMO_PSO1M2_4X24_SCOPE = new MongoId( - "5c82343a2e221644f31c0611" - ); - public static readonly MongoId OPTICSCOPE_BELOMO_PSO1M21_4X24_SCOPE = new MongoId( - "576fd4ec2459777f0b518431" - ); - public static readonly MongoId OPTICSCOPE_BURRIS_FULLFIELD_TAC30_14X24_30MM_RIFLESCOPE = - new MongoId("5b2388675acfc4771e1be0be"); - public static readonly MongoId OPTICSCOPE_EOTECH_VUDU_16X24_30MM_RIFLESCOPE = new MongoId( - "5b3b99475acfc432ff4dcbee" - ); - public static readonly MongoId OPTICSCOPE_HENSOLDT_FF_416X56_34MM_RIFLESCOPE = new MongoId( - "56ea70acd2720b844b8b4594" - ); - public static readonly MongoId OPTICSCOPE_KMZ_1P59_310X_RIFLESCOPE = new MongoId( - "5d0a3a58d7ad1a669c15ca14" - ); - public static readonly MongoId OPTICSCOPE_KMZ_1P69_310X_RIFLESCOPE = new MongoId( - "5d0a3e8cd7ad1a6f6a3d35bd" - ); - public static readonly MongoId OPTICSCOPE_LEUPOLD_MARK_4_LR_6520X50_30MM_RIFLESCOPE = - new MongoId("5a37cb10c4a282329a73b4e7"); - public static readonly MongoId OPTICSCOPE_LEUPOLD_MARK_5HD_525X56MM_35MM_RIFLESCOPE_FDE = - new MongoId("676175789dcee773150c6925"); - public static readonly MongoId OPTICSCOPE_MARCH_TACTICAL_324X42_FFP_30MM_RIFLESCOPE = - new MongoId("57c5ac0824597754771e88a9"); - public static readonly MongoId OPTICSCOPE_NCSTAR_ADO_P4_SNIPER_39X42_RIFLESCOPE = new MongoId( - "5dfe6104585a0c3e995c7b82" - ); - public static readonly MongoId OPTICSCOPE_NIGHTFORCE_ATACR_735X56_34MM_RIFLESCOPE = new MongoId( - "5aa66be6e5b5b0214e506e97" - ); - public static readonly MongoId OPTICSCOPE_NIGHTFORCE_NXS_2510X24_SCOPE = new MongoId( - "544a3d0a4bdc2d1b388b4567" - ); - public static readonly MongoId OPTICSCOPE_NPZ_1P781_28X_SCOPE = new MongoId( - "618a75f0bd321d49084cd399" - ); - public static readonly MongoId OPTICSCOPE_NPZ_USP1_TYULPAN_4X_SCOPE = new MongoId( - "5cf638cbd7f00c06595bc936" + public static readonly MongoId MUZZLECOMBO_M700_STAINLESS_STEEL_THREAD_PROTECTOR = new MongoId("5d270ca28abbc31ee25ee821"); + public static readonly MongoId MUZZLECOMBO_M700_THREAD_PROTECTOR = new MongoId("5d270b3c8abbc3105335cfb8"); + public static readonly MongoId MUZZLECOMBO_M9A3_THREAD_PROTECTOR = new MongoId("5cadc390ae921500126a77f1"); + public static readonly MongoId MUZZLECOMBO_ME_CYLINDER_12GA_MUZZLE_ADAPTER = new MongoId("5c0111ab0db834001966914d"); + public static readonly MongoId MUZZLECOMBO_MOSIN_RIFLE_KIBA_ARMS_762X54R_CUSTOM_THREAD_ADAPTER = new MongoId( + "5cf79389d7f00c10941a0c4d" ); + public static readonly MongoId MUZZLECOMBO_MOSIN_RIFLE_TIGER_ROCK_762X51_THREAD_ADAPTER = new MongoId("5cf79599d7f00c10875d9212"); + public static readonly MongoId MUZZLECOMBO_MOSIN_RIFLE_WEAPON_TUNING_762X39_THREAD_ADAPTER = new MongoId("5cf67a1bd7f00c06585fb6f3"); + public static readonly MongoId MUZZLECOMBO_MP9_9X19_SOUND_SUPPRESSOR_MOUNT = new MongoId("5de8f237bbaf010b10528a70"); + public static readonly MongoId MUZZLECOMBO_MTS25512_12GA_CHOKE = new MongoId("619d36da53b4d42ee724fae4"); + public static readonly MongoId MUZZLECOMBO_P226_THREAD_PROTECTOR = new MongoId("587de5ba2459771c0f1e8a58"); + public static readonly MongoId MUZZLECOMBO_PP9101_KEDRB_THREADED_SUPPRESSOR_ADAPTER = new MongoId("57f3c7e024597738ea4ba286"); + public static readonly MongoId MUZZLECOMBO_REMINGTON_TACTICAL_CHOKE_12GA = new MongoId("560838c94bdc2d77798b4569"); + public static readonly MongoId MUZZLECOMBO_RFB_THREAD_PROTECTOR = new MongoId("5f2aa4464b50c14bcf07acdb"); + public static readonly MongoId MUZZLECOMBO_RFB_THREAD_SPACER = new MongoId("5f2aa43ba9b91d26f20ae6d2"); + public static readonly MongoId MUZZLECOMBO_RPD_BARREL_THREAD_PROTECTOR = new MongoId("6513f0f5e63f29908d0ffab8"); + public static readonly MongoId MUZZLECOMBO_SAKO_TRG_338_LM_THREAD_PROTECTOR = new MongoId("673f3f5eef7545280c00f026"); + public static readonly MongoId MUZZLECOMBO_SIG_SAUER_TAPERLOK_762X51300_BLK_MUZZLE_ADAPTER = new MongoId("5fbc22ccf24b94483f726483"); + public static readonly MongoId MUZZLECOMBO_SILENCERCO_HYBRID_46_DIRECT_THREAD_MOUNT_ADAPTER = new MongoId("59bffc1f86f77435b128b872"); + public static readonly MongoId MUZZLECOMBO_SILENCERCO_OMEGA_45K_DIRECT_THREAD_MOUNT_ADAPTER = new MongoId("5fc4b992187fea44d52edaa9"); + public static readonly MongoId MUZZLECOMBO_SILENCERCO_OMEGA_45K_PISTON_MOUNT_ADAPTER = new MongoId("5fc4b97bab884124df0cd5e3"); + public static readonly MongoId MUZZLECOMBO_SILENCERCO_SALVO_12_CHOKE_ADAPTER = new MongoId("5b363dea5acfc4771e1c5e7e"); + public static readonly MongoId MUZZLECOMBO_SILENCERCO_SALVO_12_THREAD_ADAPTER = new MongoId("5b363e1b5acfc4771e1c5e80"); + public static readonly MongoId MUZZLECOMBO_SKS_WEAPON_TUNING_762X39_THREAD_ADAPTER = new MongoId("5cf67cadd7f00c065a5abab7"); + public static readonly MongoId MUZZLECOMBO_SOK12_THREAD_PROTECTOR = new MongoId("576167ab2459773cad038c43"); + public static readonly MongoId MUZZLECOMBO_SR2M_9X21_HAND_STOPPER = new MongoId("62e2a754b6c0ee2f230cee0f"); + public static readonly MongoId MUZZLECOMBO_STEYR_AUG_RAT_WORX_556X45_MUZZLE_DEVICE_ADAPTER = new MongoId("630f27f04f3f6281050b94d7"); + public static readonly MongoId MUZZLECOMBO_SVDS_ROTOR_43_THREAD_ADAPTER = new MongoId("5e01e9e273d8eb11426f5bc3"); + public static readonly MongoId MUZZLECOMBO_TROMIX_MONSTER_CLAW_12GA_MUZZLE_BRAKE = new MongoId("59fb137a86f7740adb646af1"); + public static readonly MongoId MUZZLECOMBO_UZI_9X19_3LUG_BARREL_RETAINING_NUT = new MongoId("6698c9ba29e062525d0ad8b1"); + public static readonly MongoId MUZZLECOMBO_UZI_9X19_3LUG_BARREL_THREAD_PROTECTOR = new MongoId("6698c9c636ba38d291017711"); + public static readonly MongoId MUZZLECOMBO_UZI_9X19_BARREL_RETAINING_NUT = new MongoId("6698c9aa36ba38d29101770f"); + public static readonly MongoId MUZZLECOMBO_UZI_PRO_9X19_BARREL_RETAINING_NUT = new MongoId("668670e3fb75ee4a5e02eb16"); + public static readonly MongoId MUZZLECOMBO_UZI_PRO_9X19_MASADA_THREAD_PROTECTOR = new MongoId("668670f52a2296a8d909963c"); + public static readonly MongoId MUZZLECOMBO_VPO215_THREAD_PROTECTOR = new MongoId("5de6556a205ddc616a6bc4f7"); + public static readonly MongoId NIGHTVISION_ARMASIGHT_N15_NIGHT_VISION_GOGGLES = new MongoId("5c066e3a0db834001b7353f0"); + public static readonly MongoId NIGHTVISION_L3HARRIS_ANPVS14_NIGHT_VISION_MONOCULAR = new MongoId("57235b6f24597759bf5a30f1"); + public static readonly MongoId NIGHTVISION_L3HARRIS_GPNVG18_NIGHT_VISION_GOGGLES = new MongoId("5c0558060db834001b735271"); + public static readonly MongoId NIGHTVISION_PNV10T_NIGHT_VISION_GOGGLES = new MongoId("5c0696830db834001d23f5da"); + public static readonly MongoId NIGHTVISION_PNV57E_NIGHT_VISION_GOGGLES = new MongoId("67506ca81f18589016006aa6"); + public static readonly MongoId OPTICSCOPE_BELOMO_PSO1_4X24_SCOPE = new MongoId("5c82342f2e221644f31c060e"); + public static readonly MongoId OPTICSCOPE_BELOMO_PSO1M2_4X24_SCOPE = new MongoId("5c82343a2e221644f31c0611"); + public static readonly MongoId OPTICSCOPE_BELOMO_PSO1M21_4X24_SCOPE = new MongoId("576fd4ec2459777f0b518431"); + public static readonly MongoId OPTICSCOPE_BURRIS_FULLFIELD_TAC30_14X24_30MM_RIFLESCOPE = new MongoId("5b2388675acfc4771e1be0be"); + public static readonly MongoId OPTICSCOPE_EOTECH_VUDU_16X24_30MM_RIFLESCOPE = new MongoId("5b3b99475acfc432ff4dcbee"); + public static readonly MongoId OPTICSCOPE_HENSOLDT_FF_416X56_34MM_RIFLESCOPE = new MongoId("56ea70acd2720b844b8b4594"); + public static readonly MongoId OPTICSCOPE_KMZ_1P59_310X_RIFLESCOPE = new MongoId("5d0a3a58d7ad1a669c15ca14"); + public static readonly MongoId OPTICSCOPE_KMZ_1P69_310X_RIFLESCOPE = new MongoId("5d0a3e8cd7ad1a6f6a3d35bd"); + public static readonly MongoId OPTICSCOPE_LEUPOLD_MARK_4_LR_6520X50_30MM_RIFLESCOPE = new MongoId("5a37cb10c4a282329a73b4e7"); + public static readonly MongoId OPTICSCOPE_LEUPOLD_MARK_5HD_525X56MM_35MM_RIFLESCOPE_FDE = new MongoId("676175789dcee773150c6925"); + public static readonly MongoId OPTICSCOPE_MARCH_TACTICAL_324X42_FFP_30MM_RIFLESCOPE = new MongoId("57c5ac0824597754771e88a9"); + public static readonly MongoId OPTICSCOPE_NCSTAR_ADO_P4_SNIPER_39X42_RIFLESCOPE = new MongoId("5dfe6104585a0c3e995c7b82"); + public static readonly MongoId OPTICSCOPE_NIGHTFORCE_ATACR_735X56_34MM_RIFLESCOPE = new MongoId("5aa66be6e5b5b0214e506e97"); + public static readonly MongoId OPTICSCOPE_NIGHTFORCE_NXS_2510X24_SCOPE = new MongoId("544a3d0a4bdc2d1b388b4567"); + public static readonly MongoId OPTICSCOPE_NPZ_1P781_28X_SCOPE = new MongoId("618a75f0bd321d49084cd399"); + public static readonly MongoId OPTICSCOPE_NPZ_USP1_TYULPAN_4X_SCOPE = new MongoId("5cf638cbd7f00c06595bc936"); public static readonly MongoId OPTICSCOPE_PAG17_SCOPE = new MongoId("5d53f4b7a4b936793d58c780"); - public static readonly MongoId OPTICSCOPE_PU_35X_RIFLESCOPE = new MongoId( - "5b3f7c1c5acfc40dc5296b1d" - ); - public static readonly MongoId OPTICSCOPE_SCHMIDT_BENDER_PM_II_18X24_30MM_RIFLESCOPE = - new MongoId("617151c1d92c473c770214ab"); - public static readonly MongoId OPTICSCOPE_SCHMIDT_BENDER_PM_II_320X50_34MM_RIFLESCOPE = - new MongoId("61714eec290d254f5e6b2ffc"); - public static readonly MongoId OPTICSCOPE_SCHMIDT_BENDER_PM_II_525X56_34MM_RIFLESCOPE = - new MongoId("62850c28da09541f43158cca"); - public static readonly MongoId OPTICSCOPE_SIG_SAUER_TANGO6T_16X24_30MM_RIFLESCOPE = new MongoId( - "6567e7681265c8a131069b0f" - ); - public static readonly MongoId OPTICSCOPE_VOMZ_PILAD_4X32_254MM_RIFLESCOPE = new MongoId( - "5dff772da3651922b360bf91" - ); - public static readonly MongoId OPTICSCOPE_VORTEX_RAZOR_HD_GEN2_16X24_30MM_RIFLESCOPE = - new MongoId("618ba27d9008e4636a67f61d"); + public static readonly MongoId OPTICSCOPE_PU_35X_RIFLESCOPE = new MongoId("5b3f7c1c5acfc40dc5296b1d"); + public static readonly MongoId OPTICSCOPE_SCHMIDT_BENDER_PM_II_18X24_30MM_RIFLESCOPE = new MongoId("617151c1d92c473c770214ab"); + public static readonly MongoId OPTICSCOPE_SCHMIDT_BENDER_PM_II_320X50_34MM_RIFLESCOPE = new MongoId("61714eec290d254f5e6b2ffc"); + public static readonly MongoId OPTICSCOPE_SCHMIDT_BENDER_PM_II_525X56_34MM_RIFLESCOPE = new MongoId("62850c28da09541f43158cca"); + public static readonly MongoId OPTICSCOPE_SIG_SAUER_TANGO6T_16X24_30MM_RIFLESCOPE = new MongoId("6567e7681265c8a131069b0f"); + public static readonly MongoId OPTICSCOPE_VOMZ_PILAD_4X32_254MM_RIFLESCOPE = new MongoId("5dff772da3651922b360bf91"); + public static readonly MongoId OPTICSCOPE_VORTEX_RAZOR_HD_GEN2_16X24_30MM_RIFLESCOPE = new MongoId("618ba27d9008e4636a67f61d"); public static readonly MongoId PISTOL_20X1MM_TOY_GUN = new MongoId("66015072e9f84d5680039678"); - public static readonly MongoId PISTOL_BERETTA_M9A3_9X19 = new MongoId( - "5cadc190ae921500103bb3b6" - ); - public static readonly MongoId PISTOL_COLT_M1911A1_45_ACP = new MongoId( - "5e81c3cbac2bb513793cdc75" - ); - public static readonly MongoId PISTOL_COLT_M45A1_45_ACP = new MongoId( - "5f36a0e5fbf956000b716b65" - ); - public static readonly MongoId PISTOL_FN_FIVESEVEN_MK2_57X28 = new MongoId( - "5d3eb3b0a4b93615055e84d2" - ); - public static readonly MongoId PISTOL_FN_FIVESEVEN_MK2_57X28_PISTOL_FDE = new MongoId( - "5d67abc1a4b93614ec50137f" - ); + public static readonly MongoId PISTOL_BERETTA_M9A3_9X19 = new MongoId("5cadc190ae921500103bb3b6"); + public static readonly MongoId PISTOL_COLT_M1911A1_45_ACP = new MongoId("5e81c3cbac2bb513793cdc75"); + public static readonly MongoId PISTOL_COLT_M45A1_45_ACP = new MongoId("5f36a0e5fbf956000b716b65"); + public static readonly MongoId PISTOL_FN_FIVESEVEN_MK2_57X28 = new MongoId("5d3eb3b0a4b93615055e84d2"); + public static readonly MongoId PISTOL_FN_FIVESEVEN_MK2_57X28_PISTOL_FDE = new MongoId("5d67abc1a4b93614ec50137f"); public static readonly MongoId PISTOL_GLOCK_17_9X19 = new MongoId("5a7ae0c351dfba0017554310"); - public static readonly MongoId PISTOL_GLOCK_18C_9X19_MACHINE = new MongoId( - "5b1fa9b25acfc40018633c01" - ); + public static readonly MongoId PISTOL_GLOCK_18C_9X19_MACHINE = new MongoId("5b1fa9b25acfc40018633c01"); public static readonly MongoId PISTOL_GLOCK_19X_9X19 = new MongoId("63088377b5cd696784087147"); public static readonly MongoId PISTOL_HK_USP_45_ACP = new MongoId("6193a720f8ee7e52e42109ed"); - public static readonly MongoId PISTOL_LEBEDEV_PL15_9X19 = new MongoId( - "602a9740da11d6478d5a06dc" - ); - public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L5_357 = new MongoId( - "669fa409933e898cce0c2166" - ); - public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L5_50_AE = new MongoId( - "669fa3f88abd2662d80eee77" - ); - public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L6_50_AE = new MongoId( - "669fa39b48fc9f8db6035a0c" - ); - public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L6_50_AE_PISTOL_WTS = - new MongoId("669fa3d876116c89840b1217"); - public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_MK_XIX_50_AE = new MongoId( - "668fe5a998b5ad715703ddd6" - ); - public static readonly MongoId PISTOL_MAKAROV_PM_9X18PM = new MongoId( - "5448bd6b4bdc2dfc2f8b4569" - ); - public static readonly MongoId PISTOL_MAKAROV_PM_T_9X18PM = new MongoId( - "579204f224597773d619e051" - ); - public static readonly MongoId PISTOL_PB_9X18PM_SILENCED = new MongoId( - "56e0598dd2720bb5668b45a6" - ); - public static readonly MongoId PISTOL_SERDYUKOV_SR1MP_GYURZA_9X21 = new MongoId( - "59f98b4986f7746f546d2cef" - ); + public static readonly MongoId PISTOL_LEBEDEV_PL15_9X19 = new MongoId("602a9740da11d6478d5a06dc"); + public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L5_357 = new MongoId("669fa409933e898cce0c2166"); + public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L5_50_AE = new MongoId("669fa3f88abd2662d80eee77"); + public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L6_50_AE = new MongoId("669fa39b48fc9f8db6035a0c"); + public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_L6_50_AE_PISTOL_WTS = new MongoId("669fa3d876116c89840b1217"); + public static readonly MongoId PISTOL_MAGNUM_RESEARCH_DESERT_EAGLE_MK_XIX_50_AE = new MongoId("668fe5a998b5ad715703ddd6"); + public static readonly MongoId PISTOL_MAKAROV_PM_9X18PM = new MongoId("5448bd6b4bdc2dfc2f8b4569"); + public static readonly MongoId PISTOL_MAKAROV_PM_T_9X18PM = new MongoId("579204f224597773d619e051"); + public static readonly MongoId PISTOL_PB_9X18PM_SILENCED = new MongoId("56e0598dd2720bb5668b45a6"); + public static readonly MongoId PISTOL_SERDYUKOV_SR1MP_GYURZA_9X21 = new MongoId("59f98b4986f7746f546d2cef"); public static readonly MongoId PISTOL_SIG_P226R_9X19 = new MongoId("56d59856d2720bd8418b456a"); - public static readonly MongoId PISTOL_STECHKIN_APB_9X18PM_SILENCED_MACHINE = new MongoId( - "5abccb7dd8ce87001773e277" - ); - public static readonly MongoId PISTOL_STECHKIN_APS_9X18PM_MACHINE = new MongoId( - "5a17f98cfcdbcb0980087290" - ); + public static readonly MongoId PISTOL_STECHKIN_APB_9X18PM_SILENCED_MACHINE = new MongoId("5abccb7dd8ce87001773e277"); + public static readonly MongoId PISTOL_STECHKIN_APS_9X18PM_MACHINE = new MongoId("5a17f98cfcdbcb0980087290"); public static readonly MongoId PISTOL_TT33_762X25_TT = new MongoId("571a12c42459771f627b58a0"); - public static readonly MongoId PISTOL_TT33_762X25_TT_PISTOL_GOLDEN = new MongoId( - "5b3b713c5acfc4330140bd8d" - ); - public static readonly MongoId PISTOL_YARYGIN_MP443_GRACH_9X19 = new MongoId( - "576a581d2459771e7b1bc4f1" - ); - public static readonly MongoId PISTOLGRIP_9A91_PISTOL_GRIP = new MongoId( - "6450f21a3d52156624001fcf" - ); - public static readonly MongoId PISTOLGRIP_AK_AEROKNOX_SCORPIUS_PISTOL_GRIP = new MongoId( - "5f6341043ada5942720e2dc5" - ); - public static readonly MongoId PISTOLGRIP_AK_CUSTOM_ARMS_AGS74_PRO_SNIPER_KIT_PISTOL_GRIP = - new MongoId("6087e663132d4d12c81fd96b"); - public static readonly MongoId PISTOLGRIP_AK_CUSTOM_GUNS_CG101_ARTYPE_PISTOL_GRIP_ADAPTER = - new MongoId("648ae3e356c6310a830fc291"); - public static readonly MongoId PISTOLGRIP_AK_FAB_DEFENSE_AGR47_PISTOL_GRIP_FDE = new MongoId( - "623c3be0484b5003161840dc" - ); - public static readonly MongoId PISTOLGRIP_AK_KGB_MG47_PISTOL_GRIP = new MongoId( - "5cf54404d7f00c108840b2ef" - ); - public static readonly MongoId PISTOLGRIP_AK_KGB_MG47_PISTOL_GRIP_ANODIZED_RED = new MongoId( - "5e2192a498a36665e8337386" - ); - public static readonly MongoId PISTOLGRIP_AK_MAGPUL_MOE_PISTOL_GRIP_BLACK = new MongoId( - "5b30ac585acfc433000eb79c" - ); - public static readonly MongoId PISTOLGRIP_AK_MISSION_FIRST_TACTICAL_ENGAGE_AK47_PISTOL_GRIP = - new MongoId("63f4da90f31d4a33b87bd054"); - public static readonly MongoId PISTOLGRIP_AK_MOLOT_BAKELITE_PISTOL_GRIP = new MongoId( - "59e6318286f77444dd62c4cc" - ); - public static readonly MongoId PISTOLGRIP_AK_PUFGUN_SGM2_PISTOL_GRIP = new MongoId( - "651580dc71a4f10aec4b6056" - ); - public static readonly MongoId PISTOLGRIP_AK_STRIKE_INDUSTRIES_ENHANCED_PISTOL_GRIP_BLACK = - new MongoId("5cf50850d7f00c056e24104c"); - public static readonly MongoId PISTOLGRIP_AK_STRIKE_INDUSTRIES_ENHANCED_PISTOL_GRIP_FDE = - new MongoId("5cf508bfd7f00c056e24104e"); - public static readonly MongoId PISTOLGRIP_AK_TANGODOWN_BATTLE_GRIP_PISTOL_GRIP = new MongoId( - "628a664bccaab13006640e47" - ); - public static readonly MongoId PISTOLGRIP_AK_TANGODOWN_BATTLE_GRIP_PISTOL_GRIP_FDE = - new MongoId("628c9ab845c59e5b80768a81"); - public static readonly MongoId PISTOLGRIP_AK_TAPCO_SAWSTYLE_PISTOL_GRIP_BLACK = new MongoId( - "5947f92f86f77427344a76b1" - ); - public static readonly MongoId PISTOLGRIP_AK_TAPCO_SAWSTYLE_PISTOL_GRIP_FDE = new MongoId( - "5947fa2486f77425b47c1a9b" - ); - public static readonly MongoId PISTOLGRIP_AK_US_PALM_PISTOL_GRIP = new MongoId( - "5c6bf4aa2e2216001219b0ae" - ); - public static readonly MongoId PISTOLGRIP_AK_ZENIT_RK3_PISTOL_GRIP = new MongoId( - "5649ae4a4bdc2d1b2b8b4588" - ); - public static readonly MongoId PISTOLGRIP_AK12_PISTOL_GRIP = new MongoId( - "5beec8ea0db834001a6f9dbf" - ); - public static readonly MongoId PISTOLGRIP_AK74_BAKELITE_PISTOL_GRIP = new MongoId( - "5649ad3f4bdc2df8348b4585" - ); - public static readonly MongoId PISTOLGRIP_AK74_POLYMER_PISTOL_GRIP = new MongoId( - "5649ade84bdc2d1b2b8b4587" - ); - public static readonly MongoId PISTOLGRIP_AKM_BAKELITE_PISTOL_GRIP = new MongoId( - "59e62cc886f77440d40b52a1" - ); - public static readonly MongoId PISTOLGRIP_AKM_WOODEN_PISTOL_GRIP = new MongoId( - "5a0071d486f77404e23a12b2" - ); - public static readonly MongoId PISTOLGRIP_AKS74U_BAKELITE_PISTOL_GRIP = new MongoId( - "57e3dba62459770f0c32322b" - ); - public static readonly MongoId PISTOLGRIP_APS_BAKELITE_SIDEPIECES = new MongoId( - "5a17fc70fcdbcb0176308b3d" - ); - public static readonly MongoId PISTOLGRIP_AR15_AEROKNOX_ORION_PISTOL_GRIP = new MongoId( - "63f5feead259b42f0b4d6d0f" - ); - public static readonly MongoId PISTOLGRIP_AR15_COLT_A2_PISTOL_GRIP = new MongoId( - "55d4b9964bdc2d1d4e8b456e" - ); - public static readonly MongoId PISTOLGRIP_AR15_DAMAGE_INDUSTRIES_ECS_PISTOL_GRIP_FDE = - new MongoId("571659bb2459771fb2755a12"); - public static readonly MongoId PISTOLGRIP_AR15_DLG_TACTICAL_DLG123_PISTOL_GRIP = new MongoId( - "602e71bd53a60014f9705bfa" - ); - public static readonly MongoId PISTOLGRIP_AR15_F1_FIREARMS_SKELETONIZED_STYLE_1_PISTOL_GRIP = - new MongoId("6113c3586c780c1e710c90bc"); - public static readonly MongoId PISTOLGRIP_AR15_F1_FIREARMS_SKELETONIZED_STYLE_2_PC_PISTOL_GRIP = - new MongoId("6113cc78d3a39d50044c065a"); - public static readonly MongoId PISTOLGRIP_AR15_F1_FIREARMS_SKELETONIZED_STYLE_2_PISTOL_GRIP = - new MongoId("6113cce3d92c473c770200c7"); - public static readonly MongoId PISTOLGRIP_AR15_HERA_ARMS_HG15_PISTOL_GRIP = new MongoId( - "5cc9bcaed7f00c011c04e179" - ); - public static readonly MongoId PISTOLGRIP_AR15_HK_BATTLE_GRIP_BEAVERTAIL_PISTOL_GRIP = - new MongoId("5bb20e0ed4351e3bac1212dc"); - public static readonly MongoId PISTOLGRIP_AR15_HK_BATTLE_GRIP_BEAVERTAIL_PISTOL_GRIP_RAL_8000 = - new MongoId("6193dcd0f8ee7e52e4210a28"); - public static readonly MongoId PISTOLGRIP_AR15_HK_BATTLE_GRIP_PISTOL_GRIP = new MongoId( - "5bb20e18d4351e00320205d5" - ); - public static readonly MongoId PISTOLGRIP_AR15_HK_ERGO_PSG1_STYLE_PISTOL_GRIP = new MongoId( - "5d025cc1d7ad1a53845279ef" - ); - public static readonly MongoId PISTOLGRIP_AR15_HK_V2_PISTOL_GRIP = new MongoId( - "5c6d7b3d2e221600114c9b7d" - ); - public static readonly MongoId PISTOLGRIP_AR15_MAGPUL_MIAD_PISTOL_GRIP_FDE = new MongoId( - "5a339805c4a2826c6e06d73d" - ); - public static readonly MongoId PISTOLGRIP_AR15_MAGPUL_MOE_PISTOL_GRIP_BLACK = new MongoId( - "55802f5d4bdc2dac148b458f" - ); - public static readonly MongoId PISTOLGRIP_AR15_MAGPUL_MOE_PISTOL_GRIP_FDE = new MongoId( - "5d15cf3bd7ad1a67e71518b2" - ); - public static readonly MongoId PISTOLGRIP_AR15_NAROH_ARMS_GRALS_PISTOL_GRIP = new MongoId( - "59db3a1d86f77429e05b4e92" - ); - public static readonly MongoId PISTOLGRIP_AR15_SIG_SAUER_REDUCED_ANGLE_PISTOL_GRIP_COYOTE_TAN = - new MongoId("652911675ae2ae97b80fdf3c"); - public static readonly MongoId PISTOLGRIP_AR15_STARK_AR_RIFLE_GRIP_BLACK = new MongoId( - "59db3acc86f7742a2c4ab912" - ); - public static readonly MongoId PISTOLGRIP_AR15_STARK_AR_RIFLE_GRIP_FDE = new MongoId( - "59db3b0886f77429d72fb895" - ); - public static readonly MongoId PISTOLGRIP_AR15_TACTICAL_DYNAMICS_HEXGRIP_PISTOL_GRIP = - new MongoId("615d8faecabb9b7ad90f4d5d"); - public static readonly MongoId PISTOLGRIP_AR15_TACTICAL_DYNAMICS_SKELETONIZED_PISTOL_GRIP = - new MongoId("5b07db875acfc40dc528a5f6"); - public static readonly MongoId PISTOLGRIP_AS_VAL_PISTOL_GRIP_BLACK = new MongoId( - "6565b91666492762f5029c0b" - ); - public static readonly MongoId PISTOLGRIP_AS_VAL_PISTOL_GRIP_PLUM = new MongoId( - "57c44fa82459772d2d75e415" - ); - public static readonly MongoId PISTOLGRIP_AS_VAL_ROTOR_43_PISTOL_GRIP_WITH_BUFFER_TUBE = - new MongoId("5a69a2ed8dc32e000d46d1f1"); - public static readonly MongoId PISTOLGRIP_BENELLI_M3_TELESCOPIC_STOCK_PISTOL_GRIP = new MongoId( - "6259c3d8012d6678ec38eeb8" - ); - public static readonly MongoId PISTOLGRIP_CHIAPPA_RHINO_PLASTIC_PISTOL_GRIP = new MongoId( - "619f4ab2d25cbd424731fb95" - ); - public static readonly MongoId PISTOLGRIP_CHIAPPA_RHINO_WOODEN_PISTOL_GRIP = new MongoId( - "619f4bffd25cbd424731fb97" - ); - public static readonly MongoId PISTOLGRIP_DESERT_EAGLE_HOGUE_RUBBER_GRIP = new MongoId( - "668fe5d42a0f85eea407cc16" - ); - public static readonly MongoId PISTOLGRIP_DESERT_EAGLE_HOGUE_RUBBER_GRIP_WITH_FINGER_GROOVES = - new MongoId("66a0da76b6f47fcfeb025e96"); - public static readonly MongoId PISTOLGRIP_GLOCK_PACHMAYR_TACTICAL_GRIP_GLOVE = new MongoId( - "5a7b4960e899ef197b331a2d" - ); - public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_BLACK = new MongoId( - "57c55efc2459772d2c6271e7" - ); - public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_FDE = new MongoId( - "57af48872459771f0b2ebf11" - ); - public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_GHILLIE_EARTH = - new MongoId("57c55f092459772d291a8463"); - public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_GHILLIE_GREEN = - new MongoId("57c55f112459772d28133310"); - public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_OLIVE_DRAB = new MongoId( - "57c55f172459772d27602381" - ); - public static readonly MongoId PISTOLGRIP_KS23M_PISTOL_GRIP = new MongoId( - "5e848d99865c0f329958c83b" - ); - public static readonly MongoId PISTOLGRIP_M14_SAGE_INTERNATIONAL_M14ALCS_MOD0_PISTOL_GRIP = - new MongoId("5addc7db5acfc4001669f279"); - public static readonly MongoId PISTOLGRIP_M1911_KIBA_ARMS_GENEBURN_CUSTOM_SIDE_GRIPS = - new MongoId("626a9cb151cb5849f6002890"); - public static readonly MongoId PISTOLGRIP_M1911_PACHMAYR_AMERICAN_LEGEND_GRIP_423 = new MongoId( - "5ef366938cef260c0642acad" - ); - public static readonly MongoId PISTOLGRIP_M1911A1_SIDE_GRIPS = new MongoId( - "5e81c6bf763d9f754677beff" - ); - public static readonly MongoId PISTOLGRIP_M45A1_MILTAC_GVT_G10_SIDE_GRIPS = new MongoId( - "5f3e778efcd9b651187d7201" - ); - public static readonly MongoId PISTOLGRIP_M60E4_PISTOL_GRIP = new MongoId( - "660125bf1d087a96c60a54db" - ); - public static readonly MongoId PISTOLGRIP_M60E4_TRIGGER_GROUP = new MongoId( - "6601257f1347bc1a5f0f4db6" - ); - public static readonly MongoId PISTOLGRIP_M60E6_PISTOL_GRIP = new MongoId( - "66152060a031cbb5570e3466" - ); - public static readonly MongoId PISTOLGRIP_M60E6_PISTOL_GRIP_FDE = new MongoId( - "6615211ca031cbb5570e346d" - ); - public static readonly MongoId PISTOLGRIP_M60E6_TRIGGER_GROUP = new MongoId( - "6615208aa031cbb5570e346a" - ); - public static readonly MongoId PISTOLGRIP_M60E6_TRIGGER_GROUP_FDE = new MongoId( - "66152153a031cbb5570e346f" - ); - public static readonly MongoId PISTOLGRIP_M700_MAGPUL_PRO_700_PISTOL_GRIP = new MongoId( - "5cdeac5cd7f00c000f261694" - ); - public static readonly MongoId PISTOLGRIP_M870_FAB_DEFENSE_AGR870_PISTOL_GRIP = new MongoId( - "5bfe86a20db834001d23e8f7" - ); - public static readonly MongoId PISTOLGRIP_M9A3_POLYMER_SIDE_GRIPS = new MongoId( - "5cadc431ae921500113bb8d5" - ); - public static readonly MongoId PISTOLGRIP_MCX_PISTOL_GRIP = new MongoId( - "5fbcbd6c187fea44d52eda14" - ); - public static readonly MongoId PISTOLGRIP_MDR_PISTOL_GRIP_BLACK = new MongoId( - "5dcbd6dddbd3d91b3e5468de" - ); - public static readonly MongoId PISTOLGRIP_MDR_PISTOL_GRIP_FDE = new MongoId( - "5c48a2c22e221602b313fb6c" - ); - public static readonly MongoId PISTOLGRIP_MOSIN_RIFLE_TACFIRE_PISTOL_GRIP = new MongoId( - "5bbde41ed4351e003562b038" - ); - public static readonly MongoId PISTOLGRIP_MP155_ULTIMA_PISTOL_GRIP = new MongoId( - "606eef46232e5a31c233d500" - ); - public static readonly MongoId PISTOLGRIP_MP443_GRACH_POLYMER_PISTOL_GRIP = new MongoId( - "576a63cd2459771e796e0e11" - ); - public static readonly MongoId PISTOLGRIP_MPX_PISTOL_GRIP = new MongoId( - "5894a51286f77426d13baf02" - ); - public static readonly MongoId PISTOLGRIP_ORSIS_T5000M_PISTOL_GRIP = new MongoId( - "5df38a5fb74cd90030650cb6" - ); - public static readonly MongoId PISTOLGRIP_P226_AXELSON_TACTICAL_MK25_PISTOL_GRIP = new MongoId( - "5bffec120db834001c38f5fa" - ); - public static readonly MongoId PISTOLGRIP_P226_COMBAT_PISTOL_GRIP_FDE = new MongoId( - "57c9a89124597704ee6faec1" - ); - public static readonly MongoId PISTOLGRIP_P226_EMPEROR_SCORPION_PISTOL_GRIP = new MongoId( - "5c0006470db834001a6697fe" - ); - public static readonly MongoId PISTOLGRIP_P226_HOGUE_G10_CHAIN_LINK_PISTOL_GRIP = new MongoId( - "5bffef760db8340019668fe4" - ); - public static readonly MongoId PISTOLGRIP_P226_HOGUE_RUBBERIZED_PISTOL_GRIP = new MongoId( - "5b39ffbd5acfc47a8773fb06" - ); - public static readonly MongoId PISTOLGRIP_P226_POLYMER_PISTOL_GRIP_BLACK = new MongoId( - "56d5a2bbd2720bb8418b456a" - ); - public static readonly MongoId PISTOLGRIP_P226_STAINLESS_ELITE_WOODEN_PISTOL_GRIP = new MongoId( - "5c00076d0db834001d23ee1f" - ); - public static readonly MongoId PISTOLGRIP_PB_BAKELITE_SIDE_GRIPS = new MongoId( - "56e05a6ed2720bd0748b4567" - ); - public static readonly MongoId PISTOLGRIP_PK_PISTOL_GRIP = new MongoId( - "646371779f5f0ea59a04c204" - ); - public static readonly MongoId PISTOLGRIP_PK_PISTOL_GRIP_BLACK = new MongoId( - "64cbad529f7cf7f75c077fd5" - ); - public static readonly MongoId PISTOLGRIP_PM_BAKELITE_GRIP = new MongoId( - "6374a7e7417239a7bf00f042" - ); - public static readonly MongoId PISTOLGRIP_PM_FAB_DEFENSE_PMG_PISTOL_GRIP = new MongoId( - "637784c5f7b3f4ac1a0d1a9a" - ); - public static readonly MongoId PISTOLGRIP_PM_FAB_DEFENSE_PMG_PISTOL_GRIP_OLIVE_DRAB = - new MongoId("648afce7ec6bb25b2608defb"); - public static readonly MongoId PISTOLGRIP_PM_PMLASER_GRIP_WITH_LASER_SIGHT = new MongoId( - "661f8995c341ea101e0d33e8" - ); - public static readonly MongoId PISTOLGRIP_PM_TACTIC_KIT_PISTOL_GRIP = new MongoId( - "637b6d610aef6cfc5e02dd14" - ); - public static readonly MongoId PISTOLGRIP_PP1901_VITYAZ_PISTOL_GRIP = new MongoId( - "5998517986f7746017232f7e" - ); - public static readonly MongoId PISTOLGRIP_PP91_KEDR_POLYMER_PISTOL_GRIP = new MongoId( - "57d152ec245977144076ccdf" - ); - public static readonly MongoId PISTOLGRIP_RPD_WOODEN_PISTOL_GRIP = new MongoId( - "6513f13a8cb24472490ee32f" - ); - public static readonly MongoId PISTOLGRIP_RSH12_PISTOL_GRIP = new MongoId( - "633ec8e4025b096d320a3b1e" - ); - public static readonly MongoId PISTOLGRIP_SA58_FAB_DEFENSE_AGFAL_PISTOL_GRIP = new MongoId( - "5b7d679f5acfc4001a5c4024" - ); - public static readonly MongoId PISTOLGRIP_SA58_PISTOL_GRIP = new MongoId( - "5b7d678a5acfc4001a5c4022" - ); - public static readonly MongoId PISTOLGRIP_SA58_SAWSTYLE_PISTOL_GRIP_BLACK = new MongoId( - "5b099b965acfc400186331e6" - ); - public static readonly MongoId PISTOLGRIP_SKS_TAPCO_INTRAFUSE_SAWSTYLE_PISTOL_GRIP = - new MongoId("5afd7e445acfc4001637e35a"); - public static readonly MongoId PISTOLGRIP_SKSVZ58_FAB_DEFENSE_AG58_PISTOL_GRIP = new MongoId( - "5d023784d7ad1a049d4aa7f2" - ); - public static readonly MongoId PISTOLGRIP_SR2M_PISTOL_GRIP_BLACK = new MongoId( - "637ba29bf7ca6372bf2613db" - ); - public static readonly MongoId PISTOLGRIP_SR2M_PISTOL_GRIP_PLUM = new MongoId( - "637b9c37b7e3bc41b21ce71a" - ); - public static readonly MongoId PISTOLGRIP_SVDS_LYNX_ARMS_AKSERIES_PISTOL_GRIP_ADAPTER = - new MongoId("6516b129609aaf354b34b3a8"); - public static readonly MongoId PISTOLGRIP_SVDS_PISTOL_GRIP = new MongoId( - "5c471be12e221602b66cd9ac" - ); - public static readonly MongoId PISTOLGRIP_TOZ106_002_PISTOL_GRIP = new MongoId( - "5a38eecdc4a282329a73b512" - ); - public static readonly MongoId PISTOLGRIP_TT_HOGUELIKE_RUBBER_GRIP = new MongoId( - "5c0684e50db834002a12585a" - ); - public static readonly MongoId PISTOLGRIP_TT_ORNATED_SIDE_GRIPS = new MongoId( - "5b3cadf35acfc400194776a0" - ); - public static readonly MongoId PISTOLGRIP_TT_PMLASER_TT206_SIDE_GRIPS_WITH_LASER_SIGHT = - new MongoId("5bffcf7a0db83400232fea79"); - public static readonly MongoId PISTOLGRIP_TT_RAZOR_ARMS_RUBBER_GRIP = new MongoId( - "5c079ec50db834001966a706" - ); - public static readonly MongoId PISTOLGRIP_TT_SIDE_GRIPS = new MongoId( - "571a282c2459771fb2755a69" - ); - public static readonly MongoId PISTOLGRIP_UZI_PISTOL_GRIP_COVER = new MongoId( - "669946c157df3e2b4e0a0dc5" - ); - public static readonly MongoId PLANTINGKITS_TRIPWIRE_INSTALLATION_KIT = new MongoId( - "666b11055a706400b717cfa5" - ); + public static readonly MongoId PISTOL_TT33_762X25_TT_PISTOL_GOLDEN = new MongoId("5b3b713c5acfc4330140bd8d"); + public static readonly MongoId PISTOL_YARYGIN_MP443_GRACH_9X19 = new MongoId("576a581d2459771e7b1bc4f1"); + public static readonly MongoId PISTOLGRIP_9A91_PISTOL_GRIP = new MongoId("6450f21a3d52156624001fcf"); + public static readonly MongoId PISTOLGRIP_AK_AEROKNOX_SCORPIUS_PISTOL_GRIP = new MongoId("5f6341043ada5942720e2dc5"); + public static readonly MongoId PISTOLGRIP_AK_CUSTOM_ARMS_AGS74_PRO_SNIPER_KIT_PISTOL_GRIP = new MongoId("6087e663132d4d12c81fd96b"); + public static readonly MongoId PISTOLGRIP_AK_CUSTOM_GUNS_CG101_ARTYPE_PISTOL_GRIP_ADAPTER = new MongoId("648ae3e356c6310a830fc291"); + public static readonly MongoId PISTOLGRIP_AK_FAB_DEFENSE_AGR47_PISTOL_GRIP_FDE = new MongoId("623c3be0484b5003161840dc"); + public static readonly MongoId PISTOLGRIP_AK_KGB_MG47_PISTOL_GRIP = new MongoId("5cf54404d7f00c108840b2ef"); + public static readonly MongoId PISTOLGRIP_AK_KGB_MG47_PISTOL_GRIP_ANODIZED_RED = new MongoId("5e2192a498a36665e8337386"); + public static readonly MongoId PISTOLGRIP_AK_MAGPUL_MOE_PISTOL_GRIP_BLACK = new MongoId("5b30ac585acfc433000eb79c"); + public static readonly MongoId PISTOLGRIP_AK_MISSION_FIRST_TACTICAL_ENGAGE_AK47_PISTOL_GRIP = new MongoId("63f4da90f31d4a33b87bd054"); + public static readonly MongoId PISTOLGRIP_AK_MOLOT_BAKELITE_PISTOL_GRIP = new MongoId("59e6318286f77444dd62c4cc"); + public static readonly MongoId PISTOLGRIP_AK_PUFGUN_SGM2_PISTOL_GRIP = new MongoId("651580dc71a4f10aec4b6056"); + public static readonly MongoId PISTOLGRIP_AK_STRIKE_INDUSTRIES_ENHANCED_PISTOL_GRIP_BLACK = new MongoId("5cf50850d7f00c056e24104c"); + public static readonly MongoId PISTOLGRIP_AK_STRIKE_INDUSTRIES_ENHANCED_PISTOL_GRIP_FDE = new MongoId("5cf508bfd7f00c056e24104e"); + public static readonly MongoId PISTOLGRIP_AK_TANGODOWN_BATTLE_GRIP_PISTOL_GRIP = new MongoId("628a664bccaab13006640e47"); + public static readonly MongoId PISTOLGRIP_AK_TANGODOWN_BATTLE_GRIP_PISTOL_GRIP_FDE = new MongoId("628c9ab845c59e5b80768a81"); + public static readonly MongoId PISTOLGRIP_AK_TAPCO_SAWSTYLE_PISTOL_GRIP_BLACK = new MongoId("5947f92f86f77427344a76b1"); + public static readonly MongoId PISTOLGRIP_AK_TAPCO_SAWSTYLE_PISTOL_GRIP_FDE = new MongoId("5947fa2486f77425b47c1a9b"); + public static readonly MongoId PISTOLGRIP_AK_US_PALM_PISTOL_GRIP = new MongoId("5c6bf4aa2e2216001219b0ae"); + public static readonly MongoId PISTOLGRIP_AK_ZENIT_RK3_PISTOL_GRIP = new MongoId("5649ae4a4bdc2d1b2b8b4588"); + public static readonly MongoId PISTOLGRIP_AK12_PISTOL_GRIP = new MongoId("5beec8ea0db834001a6f9dbf"); + public static readonly MongoId PISTOLGRIP_AK74_BAKELITE_PISTOL_GRIP = new MongoId("5649ad3f4bdc2df8348b4585"); + public static readonly MongoId PISTOLGRIP_AK74_POLYMER_PISTOL_GRIP = new MongoId("5649ade84bdc2d1b2b8b4587"); + public static readonly MongoId PISTOLGRIP_AKM_BAKELITE_PISTOL_GRIP = new MongoId("59e62cc886f77440d40b52a1"); + public static readonly MongoId PISTOLGRIP_AKM_WOODEN_PISTOL_GRIP = new MongoId("5a0071d486f77404e23a12b2"); + public static readonly MongoId PISTOLGRIP_AKS74U_BAKELITE_PISTOL_GRIP = new MongoId("57e3dba62459770f0c32322b"); + public static readonly MongoId PISTOLGRIP_APS_BAKELITE_SIDEPIECES = new MongoId("5a17fc70fcdbcb0176308b3d"); + public static readonly MongoId PISTOLGRIP_AR15_AEROKNOX_ORION_PISTOL_GRIP = new MongoId("63f5feead259b42f0b4d6d0f"); + public static readonly MongoId PISTOLGRIP_AR15_COLT_A2_PISTOL_GRIP = new MongoId("55d4b9964bdc2d1d4e8b456e"); + public static readonly MongoId PISTOLGRIP_AR15_DAMAGE_INDUSTRIES_ECS_PISTOL_GRIP_FDE = new MongoId("571659bb2459771fb2755a12"); + public static readonly MongoId PISTOLGRIP_AR15_DLG_TACTICAL_DLG123_PISTOL_GRIP = new MongoId("602e71bd53a60014f9705bfa"); + public static readonly MongoId PISTOLGRIP_AR15_F1_FIREARMS_SKELETONIZED_STYLE_1_PISTOL_GRIP = new MongoId("6113c3586c780c1e710c90bc"); + public static readonly MongoId PISTOLGRIP_AR15_F1_FIREARMS_SKELETONIZED_STYLE_2_PC_PISTOL_GRIP = new MongoId( + "6113cc78d3a39d50044c065a" + ); + public static readonly MongoId PISTOLGRIP_AR15_F1_FIREARMS_SKELETONIZED_STYLE_2_PISTOL_GRIP = new MongoId("6113cce3d92c473c770200c7"); + public static readonly MongoId PISTOLGRIP_AR15_HERA_ARMS_HG15_PISTOL_GRIP = new MongoId("5cc9bcaed7f00c011c04e179"); + public static readonly MongoId PISTOLGRIP_AR15_HK_BATTLE_GRIP_BEAVERTAIL_PISTOL_GRIP = new MongoId("5bb20e0ed4351e3bac1212dc"); + public static readonly MongoId PISTOLGRIP_AR15_HK_BATTLE_GRIP_BEAVERTAIL_PISTOL_GRIP_RAL_8000 = new MongoId("6193dcd0f8ee7e52e4210a28"); + public static readonly MongoId PISTOLGRIP_AR15_HK_BATTLE_GRIP_PISTOL_GRIP = new MongoId("5bb20e18d4351e00320205d5"); + public static readonly MongoId PISTOLGRIP_AR15_HK_ERGO_PSG1_STYLE_PISTOL_GRIP = new MongoId("5d025cc1d7ad1a53845279ef"); + public static readonly MongoId PISTOLGRIP_AR15_HK_V2_PISTOL_GRIP = new MongoId("5c6d7b3d2e221600114c9b7d"); + public static readonly MongoId PISTOLGRIP_AR15_MAGPUL_MIAD_PISTOL_GRIP_FDE = new MongoId("5a339805c4a2826c6e06d73d"); + public static readonly MongoId PISTOLGRIP_AR15_MAGPUL_MOE_PISTOL_GRIP_BLACK = new MongoId("55802f5d4bdc2dac148b458f"); + public static readonly MongoId PISTOLGRIP_AR15_MAGPUL_MOE_PISTOL_GRIP_FDE = new MongoId("5d15cf3bd7ad1a67e71518b2"); + public static readonly MongoId PISTOLGRIP_AR15_NAROH_ARMS_GRALS_PISTOL_GRIP = new MongoId("59db3a1d86f77429e05b4e92"); + public static readonly MongoId PISTOLGRIP_AR15_SIG_SAUER_REDUCED_ANGLE_PISTOL_GRIP_COYOTE_TAN = new MongoId("652911675ae2ae97b80fdf3c"); + public static readonly MongoId PISTOLGRIP_AR15_STARK_AR_RIFLE_GRIP_BLACK = new MongoId("59db3acc86f7742a2c4ab912"); + public static readonly MongoId PISTOLGRIP_AR15_STARK_AR_RIFLE_GRIP_FDE = new MongoId("59db3b0886f77429d72fb895"); + public static readonly MongoId PISTOLGRIP_AR15_TACTICAL_DYNAMICS_HEXGRIP_PISTOL_GRIP = new MongoId("615d8faecabb9b7ad90f4d5d"); + public static readonly MongoId PISTOLGRIP_AR15_TACTICAL_DYNAMICS_SKELETONIZED_PISTOL_GRIP = new MongoId("5b07db875acfc40dc528a5f6"); + public static readonly MongoId PISTOLGRIP_AS_VAL_PISTOL_GRIP_BLACK = new MongoId("6565b91666492762f5029c0b"); + public static readonly MongoId PISTOLGRIP_AS_VAL_PISTOL_GRIP_PLUM = new MongoId("57c44fa82459772d2d75e415"); + public static readonly MongoId PISTOLGRIP_AS_VAL_ROTOR_43_PISTOL_GRIP_WITH_BUFFER_TUBE = new MongoId("5a69a2ed8dc32e000d46d1f1"); + public static readonly MongoId PISTOLGRIP_BENELLI_M3_TELESCOPIC_STOCK_PISTOL_GRIP = new MongoId("6259c3d8012d6678ec38eeb8"); + public static readonly MongoId PISTOLGRIP_CHIAPPA_RHINO_PLASTIC_PISTOL_GRIP = new MongoId("619f4ab2d25cbd424731fb95"); + public static readonly MongoId PISTOLGRIP_CHIAPPA_RHINO_WOODEN_PISTOL_GRIP = new MongoId("619f4bffd25cbd424731fb97"); + public static readonly MongoId PISTOLGRIP_DESERT_EAGLE_HOGUE_RUBBER_GRIP = new MongoId("668fe5d42a0f85eea407cc16"); + public static readonly MongoId PISTOLGRIP_DESERT_EAGLE_HOGUE_RUBBER_GRIP_WITH_FINGER_GROOVES = new MongoId("66a0da76b6f47fcfeb025e96"); + public static readonly MongoId PISTOLGRIP_GLOCK_PACHMAYR_TACTICAL_GRIP_GLOVE = new MongoId("5a7b4960e899ef197b331a2d"); + public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_BLACK = new MongoId("57c55efc2459772d2c6271e7"); + public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_FDE = new MongoId("57af48872459771f0b2ebf11"); + public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_GHILLIE_EARTH = new MongoId("57c55f092459772d291a8463"); + public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_GHILLIE_GREEN = new MongoId("57c55f112459772d28133310"); + public static readonly MongoId PISTOLGRIP_HOGUE_OVERMOLDED_RUBBER_GRIP_OLIVE_DRAB = new MongoId("57c55f172459772d27602381"); + public static readonly MongoId PISTOLGRIP_KS23M_PISTOL_GRIP = new MongoId("5e848d99865c0f329958c83b"); + public static readonly MongoId PISTOLGRIP_M14_SAGE_INTERNATIONAL_M14ALCS_MOD0_PISTOL_GRIP = new MongoId("5addc7db5acfc4001669f279"); + public static readonly MongoId PISTOLGRIP_M1911_KIBA_ARMS_GENEBURN_CUSTOM_SIDE_GRIPS = new MongoId("626a9cb151cb5849f6002890"); + public static readonly MongoId PISTOLGRIP_M1911_PACHMAYR_AMERICAN_LEGEND_GRIP_423 = new MongoId("5ef366938cef260c0642acad"); + public static readonly MongoId PISTOLGRIP_M1911A1_SIDE_GRIPS = new MongoId("5e81c6bf763d9f754677beff"); + public static readonly MongoId PISTOLGRIP_M45A1_MILTAC_GVT_G10_SIDE_GRIPS = new MongoId("5f3e778efcd9b651187d7201"); + public static readonly MongoId PISTOLGRIP_M60E4_PISTOL_GRIP = new MongoId("660125bf1d087a96c60a54db"); + public static readonly MongoId PISTOLGRIP_M60E4_TRIGGER_GROUP = new MongoId("6601257f1347bc1a5f0f4db6"); + public static readonly MongoId PISTOLGRIP_M60E6_PISTOL_GRIP = new MongoId("66152060a031cbb5570e3466"); + public static readonly MongoId PISTOLGRIP_M60E6_PISTOL_GRIP_FDE = new MongoId("6615211ca031cbb5570e346d"); + public static readonly MongoId PISTOLGRIP_M60E6_TRIGGER_GROUP = new MongoId("6615208aa031cbb5570e346a"); + public static readonly MongoId PISTOLGRIP_M60E6_TRIGGER_GROUP_FDE = new MongoId("66152153a031cbb5570e346f"); + public static readonly MongoId PISTOLGRIP_M700_MAGPUL_PRO_700_PISTOL_GRIP = new MongoId("5cdeac5cd7f00c000f261694"); + public static readonly MongoId PISTOLGRIP_M870_FAB_DEFENSE_AGR870_PISTOL_GRIP = new MongoId("5bfe86a20db834001d23e8f7"); + public static readonly MongoId PISTOLGRIP_M9A3_POLYMER_SIDE_GRIPS = new MongoId("5cadc431ae921500113bb8d5"); + public static readonly MongoId PISTOLGRIP_MCX_PISTOL_GRIP = new MongoId("5fbcbd6c187fea44d52eda14"); + public static readonly MongoId PISTOLGRIP_MDR_PISTOL_GRIP_BLACK = new MongoId("5dcbd6dddbd3d91b3e5468de"); + public static readonly MongoId PISTOLGRIP_MDR_PISTOL_GRIP_FDE = new MongoId("5c48a2c22e221602b313fb6c"); + public static readonly MongoId PISTOLGRIP_MOSIN_RIFLE_TACFIRE_PISTOL_GRIP = new MongoId("5bbde41ed4351e003562b038"); + public static readonly MongoId PISTOLGRIP_MP155_ULTIMA_PISTOL_GRIP = new MongoId("606eef46232e5a31c233d500"); + public static readonly MongoId PISTOLGRIP_MP443_GRACH_POLYMER_PISTOL_GRIP = new MongoId("576a63cd2459771e796e0e11"); + public static readonly MongoId PISTOLGRIP_MPX_PISTOL_GRIP = new MongoId("5894a51286f77426d13baf02"); + public static readonly MongoId PISTOLGRIP_ORSIS_T5000M_PISTOL_GRIP = new MongoId("5df38a5fb74cd90030650cb6"); + public static readonly MongoId PISTOLGRIP_P226_AXELSON_TACTICAL_MK25_PISTOL_GRIP = new MongoId("5bffec120db834001c38f5fa"); + public static readonly MongoId PISTOLGRIP_P226_COMBAT_PISTOL_GRIP_FDE = new MongoId("57c9a89124597704ee6faec1"); + public static readonly MongoId PISTOLGRIP_P226_EMPEROR_SCORPION_PISTOL_GRIP = new MongoId("5c0006470db834001a6697fe"); + public static readonly MongoId PISTOLGRIP_P226_HOGUE_G10_CHAIN_LINK_PISTOL_GRIP = new MongoId("5bffef760db8340019668fe4"); + public static readonly MongoId PISTOLGRIP_P226_HOGUE_RUBBERIZED_PISTOL_GRIP = new MongoId("5b39ffbd5acfc47a8773fb06"); + public static readonly MongoId PISTOLGRIP_P226_POLYMER_PISTOL_GRIP_BLACK = new MongoId("56d5a2bbd2720bb8418b456a"); + public static readonly MongoId PISTOLGRIP_P226_STAINLESS_ELITE_WOODEN_PISTOL_GRIP = new MongoId("5c00076d0db834001d23ee1f"); + public static readonly MongoId PISTOLGRIP_PB_BAKELITE_SIDE_GRIPS = new MongoId("56e05a6ed2720bd0748b4567"); + public static readonly MongoId PISTOLGRIP_PK_PISTOL_GRIP = new MongoId("646371779f5f0ea59a04c204"); + public static readonly MongoId PISTOLGRIP_PK_PISTOL_GRIP_BLACK = new MongoId("64cbad529f7cf7f75c077fd5"); + public static readonly MongoId PISTOLGRIP_PM_BAKELITE_GRIP = new MongoId("6374a7e7417239a7bf00f042"); + public static readonly MongoId PISTOLGRIP_PM_FAB_DEFENSE_PMG_PISTOL_GRIP = new MongoId("637784c5f7b3f4ac1a0d1a9a"); + public static readonly MongoId PISTOLGRIP_PM_FAB_DEFENSE_PMG_PISTOL_GRIP_OLIVE_DRAB = new MongoId("648afce7ec6bb25b2608defb"); + public static readonly MongoId PISTOLGRIP_PM_PMLASER_GRIP_WITH_LASER_SIGHT = new MongoId("661f8995c341ea101e0d33e8"); + public static readonly MongoId PISTOLGRIP_PM_TACTIC_KIT_PISTOL_GRIP = new MongoId("637b6d610aef6cfc5e02dd14"); + public static readonly MongoId PISTOLGRIP_PP1901_VITYAZ_PISTOL_GRIP = new MongoId("5998517986f7746017232f7e"); + public static readonly MongoId PISTOLGRIP_PP91_KEDR_POLYMER_PISTOL_GRIP = new MongoId("57d152ec245977144076ccdf"); + public static readonly MongoId PISTOLGRIP_RPD_WOODEN_PISTOL_GRIP = new MongoId("6513f13a8cb24472490ee32f"); + public static readonly MongoId PISTOLGRIP_RSH12_PISTOL_GRIP = new MongoId("633ec8e4025b096d320a3b1e"); + public static readonly MongoId PISTOLGRIP_SA58_FAB_DEFENSE_AGFAL_PISTOL_GRIP = new MongoId("5b7d679f5acfc4001a5c4024"); + public static readonly MongoId PISTOLGRIP_SA58_PISTOL_GRIP = new MongoId("5b7d678a5acfc4001a5c4022"); + public static readonly MongoId PISTOLGRIP_SA58_SAWSTYLE_PISTOL_GRIP_BLACK = new MongoId("5b099b965acfc400186331e6"); + public static readonly MongoId PISTOLGRIP_SKS_TAPCO_INTRAFUSE_SAWSTYLE_PISTOL_GRIP = new MongoId("5afd7e445acfc4001637e35a"); + public static readonly MongoId PISTOLGRIP_SKSVZ58_FAB_DEFENSE_AG58_PISTOL_GRIP = new MongoId("5d023784d7ad1a049d4aa7f2"); + public static readonly MongoId PISTOLGRIP_SR2M_PISTOL_GRIP_BLACK = new MongoId("637ba29bf7ca6372bf2613db"); + public static readonly MongoId PISTOLGRIP_SR2M_PISTOL_GRIP_PLUM = new MongoId("637b9c37b7e3bc41b21ce71a"); + public static readonly MongoId PISTOLGRIP_SVDS_LYNX_ARMS_AKSERIES_PISTOL_GRIP_ADAPTER = new MongoId("6516b129609aaf354b34b3a8"); + public static readonly MongoId PISTOLGRIP_SVDS_PISTOL_GRIP = new MongoId("5c471be12e221602b66cd9ac"); + public static readonly MongoId PISTOLGRIP_TOZ106_002_PISTOL_GRIP = new MongoId("5a38eecdc4a282329a73b512"); + public static readonly MongoId PISTOLGRIP_TT_HOGUELIKE_RUBBER_GRIP = new MongoId("5c0684e50db834002a12585a"); + public static readonly MongoId PISTOLGRIP_TT_ORNATED_SIDE_GRIPS = new MongoId("5b3cadf35acfc400194776a0"); + public static readonly MongoId PISTOLGRIP_TT_PMLASER_TT206_SIDE_GRIPS_WITH_LASER_SIGHT = new MongoId("5bffcf7a0db83400232fea79"); + public static readonly MongoId PISTOLGRIP_TT_RAZOR_ARMS_RUBBER_GRIP = new MongoId("5c079ec50db834001966a706"); + public static readonly MongoId PISTOLGRIP_TT_SIDE_GRIPS = new MongoId("571a282c2459771fb2755a69"); + public static readonly MongoId PISTOLGRIP_UZI_PISTOL_GRIP_COVER = new MongoId("669946c157df3e2b4e0a0dc5"); + public static readonly MongoId PLANTINGKITS_TRIPWIRE_INSTALLATION_KIT = new MongoId("666b11055a706400b717cfa5"); public static readonly MongoId POCKETS_1X3 = new MongoId("60c7272c204bc17802313365"); public static readonly MongoId POCKETS_1X4 = new MongoId("557ffd194bdc2d28148b457f"); public static readonly MongoId POCKETS_1X4_SPECIAL = new MongoId("627a4e6b255f7527fb05a0f6"); public static readonly MongoId POCKETS_1X4_TUE = new MongoId("65e080be269cbd5c5005e529"); public static readonly MongoId POCKETS_2X3 = new MongoId("64cbd95a29b9b4283e216ff5"); public static readonly MongoId POCKETS_LARGE = new MongoId("5af99e9186f7747c447120b8"); - public static readonly MongoId QUEST_ACCOUNTANTS_JOURNAL = new MongoId( - "638cbb0f7f97256fac16167a" - ); - public static readonly MongoId QUEST_ACCOUNTANTS_NOTES = new MongoId( - "63a943cead5cc12f22161ff7" - ); + public static readonly MongoId QUEST_ACCOUNTANTS_JOURNAL = new MongoId("638cbb0f7f97256fac16167a"); + public static readonly MongoId QUEST_ACCOUNTANTS_NOTES = new MongoId("63a943cead5cc12f22161ff7"); public static readonly MongoId QUEST_AG_GUITAR_PICK = new MongoId("638df4cc7b560b03794a18d2"); public static readonly MongoId QUEST_AK50_BARREL = new MongoId("683ed6aed885538c4102d8c8"); public static readonly MongoId QUEST_AK50_DUST_COVER = new MongoId("683ed6c2e4b1dd7ec4069dc8"); - public static readonly MongoId QUEST_AK50_HANDGUARD_WITH_GAS_BLOCK = new MongoId( - "683ed6ccd9a096739b0c9228" - ); - public static readonly MongoId QUEST_ARENA_POSTER_BISON = new MongoId( - "664a5775f3d3570fba06be64" - ); - public static readonly MongoId QUEST_ARENA_POSTER_EASY_MONEY = new MongoId( - "664b69e8e1238e506d3630af" - ); - public static readonly MongoId QUEST_ARENA_POSTER_KILLA = new MongoId( - "664b69c5a082271bc46c4e11" - ); + public static readonly MongoId QUEST_AK50_HANDGUARD_WITH_GAS_BLOCK = new MongoId("683ed6ccd9a096739b0c9228"); + public static readonly MongoId QUEST_ARENA_POSTER_BISON = new MongoId("664a5775f3d3570fba06be64"); + public static readonly MongoId QUEST_ARENA_POSTER_EASY_MONEY = new MongoId("664b69e8e1238e506d3630af"); + public static readonly MongoId QUEST_ARENA_POSTER_KILLA = new MongoId("664b69c5a082271bc46c4e11"); public static readonly MongoId QUEST_BANK_CASE = new MongoId("590dde5786f77405e71908b2"); public static readonly MongoId QUEST_BATTERED_DIARY = new MongoId("666073159916667083033cb9"); public static readonly MongoId QUEST_BLOOD_SAMPLE = new MongoId("5a687e7886f7740c4a5133fb"); - public static readonly MongoId QUEST_BLOOD_SAMPLE_NF2024 = new MongoId( - "66a0f0926fee20fa70036da6" - ); - public static readonly MongoId QUEST_BOTTLE_OF_LE_JEAN_WINE = new MongoId( - "6582bd252b50c61c565828e2" - ); - public static readonly MongoId QUEST_BOX_WITH_UPGRADED_TOOLS = new MongoId( - "675f80d4fe1b59cf490d3527" - ); - public static readonly MongoId QUEST_BTR_QUEST_ELECTRONIC_JAMMING_DEVICE = new MongoId( - "67499d4deca8acb2d206163b" - ); - public static readonly MongoId QUEST_CADASTRAL_REGISTRY_RECORDS = new MongoId( - "657acb2ac900be5902191ac9" - ); + public static readonly MongoId QUEST_BLOOD_SAMPLE_NF2024 = new MongoId("66a0f0926fee20fa70036da6"); + public static readonly MongoId QUEST_BOTTLE_OF_LE_JEAN_WINE = new MongoId("6582bd252b50c61c565828e2"); + public static readonly MongoId QUEST_BOX_WITH_UPGRADED_TOOLS = new MongoId("675f80d4fe1b59cf490d3527"); + public static readonly MongoId QUEST_BTR_QUEST_ELECTRONIC_JAMMING_DEVICE = new MongoId("67499d4deca8acb2d206163b"); + public static readonly MongoId QUEST_CADASTRAL_REGISTRY_RECORDS = new MongoId("657acb2ac900be5902191ac9"); public static readonly MongoId QUEST_CARBON_CASE = new MongoId("5910922b86f7747d96753483"); public static readonly MongoId QUEST_CARGO_FOR_PRAPOR = new MongoId("67499adbeca8acb2d2061634"); - public static readonly MongoId QUEST_CASE_FROM_SAFETY_DEPOSIT_BOX = new MongoId( - "590de5d986f77417a4293192" - ); - public static readonly MongoId QUEST_CASE_WITH_PRECISION_TOOLS = new MongoId( - "66b22630a6b4e5ec7c02cdb7" - ); + public static readonly MongoId QUEST_CASE_FROM_SAFETY_DEPOSIT_BOX = new MongoId("590de5d986f77417a4293192"); + public static readonly MongoId QUEST_CASE_WITH_PRECISION_TOOLS = new MongoId("66b22630a6b4e5ec7c02cdb7"); public static readonly MongoId QUEST_CHEFS_DIARY = new MongoId("64f69b4267e11a7c6206e010"); public static readonly MongoId QUEST_CHEMCONT_SAMPLES = new MongoId("63927b29c115f907b14700b9"); - public static readonly MongoId QUEST_CHEMICAL_CONTAINER = new MongoId( - "66a0e523e749756c920d02d0" - ); - public static readonly MongoId QUEST_CHEMICAL_CONTAINER_1 = new MongoId( - "5b43237186f7742f3a4ab252" - ); - public static readonly MongoId QUEST_CHEMICAL_CONTAINER_2 = new MongoId( - "5b4c81a086f77417d26be63f" - ); - public static readonly MongoId QUEST_CHEMICAL_CONTAINER_3 = new MongoId( - "5b4c81bd86f77418a75ae159" - ); + public static readonly MongoId QUEST_CHEMICAL_CONTAINER = new MongoId("66a0e523e749756c920d02d0"); + public static readonly MongoId QUEST_CHEMICAL_CONTAINER_1 = new MongoId("5b43237186f7742f3a4ab252"); + public static readonly MongoId QUEST_CHEMICAL_CONTAINER_2 = new MongoId("5b4c81a086f77417d26be63f"); + public static readonly MongoId QUEST_CHEMICAL_CONTAINER_3 = new MongoId("5b4c81bd86f77418a75ae159"); public static readonly MongoId QUEST_CHEMICAL_SAMPLE = new MongoId("669fac549b0ce3feae01a137"); - public static readonly MongoId QUEST_CLOTHES_DESIGN_HANDBOOK_PART_1 = new MongoId( - "5ae9a3f586f7740aab00e4e6" - ); - public static readonly MongoId QUEST_CLOTHES_DESIGN_HANDBOOK_PART_2 = new MongoId( - "5ae9a4fc86f7746e381e1753" - ); - public static readonly MongoId QUEST_CONTAINER_WITH_SUSPICIOUS_SUBSTANCE = new MongoId( - "679b98e429acd1f2f60985a3" - ); - public static readonly MongoId QUEST_DELIVERY_CREW_REPORT = new MongoId( - "675f7b168d28a25ec7007dbb" - ); - public static readonly MongoId QUEST_EASY_MONEY_POSTER_PACK = new MongoId( - "664b69f3a082271bc46c4e13" - ); - public static readonly MongoId QUEST_ENCRYPTED_MESSAGE = new MongoId( - "5d3ec50586f774183a607442" - ); - public static readonly MongoId QUEST_FLASH_DRIVE_WITH_FAKE_INFO = new MongoId( - "5c12301c86f77419522ba7e4" - ); - public static readonly MongoId QUEST_FLASHDRIVE_CAR_SERVICE = new MongoId( - "638cbb3ba63f1b49be6a300e" - ); - public static readonly MongoId QUEST_FLASHDRIVE_TERRAGROUP_EMPLOYEE = new MongoId( - "5eff135be0d3331e9d282b7b" - ); - public static readonly MongoId QUEST_FLASHDRIVE_WATCHING_YOU = new MongoId( - "638e9d5536b3b72c944e2fc7" - ); - public static readonly MongoId QUEST_FLASHDRIVE_WET_JOB_PT_4 = new MongoId( - "5a29357286f77409c705e025" - ); + public static readonly MongoId QUEST_CLOTHES_DESIGN_HANDBOOK_PART_1 = new MongoId("5ae9a3f586f7740aab00e4e6"); + public static readonly MongoId QUEST_CLOTHES_DESIGN_HANDBOOK_PART_2 = new MongoId("5ae9a4fc86f7746e381e1753"); + public static readonly MongoId QUEST_CONTAINER_WITH_SUSPICIOUS_SUBSTANCE = new MongoId("679b98e429acd1f2f60985a3"); + public static readonly MongoId QUEST_DELIVERY_CREW_REPORT = new MongoId("675f7b168d28a25ec7007dbb"); + public static readonly MongoId QUEST_EASY_MONEY_POSTER_PACK = new MongoId("664b69f3a082271bc46c4e13"); + public static readonly MongoId QUEST_ENCRYPTED_MESSAGE = new MongoId("5d3ec50586f774183a607442"); + public static readonly MongoId QUEST_FLASH_DRIVE_WITH_FAKE_INFO = new MongoId("5c12301c86f77419522ba7e4"); + public static readonly MongoId QUEST_FLASHDRIVE_CAR_SERVICE = new MongoId("638cbb3ba63f1b49be6a300e"); + public static readonly MongoId QUEST_FLASHDRIVE_TERRAGROUP_EMPLOYEE = new MongoId("5eff135be0d3331e9d282b7b"); + public static readonly MongoId QUEST_FLASHDRIVE_WATCHING_YOU = new MongoId("638e9d5536b3b72c944e2fc7"); + public static readonly MongoId QUEST_FLASHDRIVE_WET_JOB_PT_4 = new MongoId("5a29357286f77409c705e025"); public static readonly MongoId QUEST_GAMING_MAGAZINE = new MongoId("667a8ef464eea5fdef0db135"); - public static readonly MongoId QUEST_GOLDEN_ZIBBO_LIGHTER = new MongoId( - "5939a00786f7742fe8132936" - ); - public static readonly MongoId QUEST_GOSHAN_CARGO_MANIFESTS = new MongoId( - "5ae9a0dd86f7742e5f454a05" - ); + public static readonly MongoId QUEST_GOLDEN_ZIBBO_LIGHTER = new MongoId("5939a00786f7742fe8132936"); + public static readonly MongoId QUEST_GOSHAN_CARGO_MANIFESTS = new MongoId("5ae9a0dd86f7742e5f454a05"); public static readonly MongoId QUEST_HARD_DRIVE = new MongoId("661666458c2aa9cb1602503b"); - public static readonly MongoId QUEST_HARD_DRIVE_TERRAGROUP_SCIENTIST = new MongoId( - "6575a6ca8778e96ded05a802" - ); + public static readonly MongoId QUEST_HARD_DRIVE_TERRAGROUP_SCIENTIST = new MongoId("6575a6ca8778e96ded05a802"); public static readonly MongoId QUEST_HDD_SURVEILLANCE = new MongoId("638dfc803083a019d447768e"); public static readonly MongoId QUEST_HDD_TOP_SECRET = new MongoId("628393620d8524273e7eb028"); public static readonly MongoId QUEST_HDD_UNUSED = new MongoId("66760b3deb51b08bd40c2b08"); public static readonly MongoId QUEST_HDD_WET_JOB = new MongoId("5a29276886f77435ed1b117c"); public static readonly MongoId QUEST_HOUSING_JOURNAL = new MongoId("638e0057ab150a5f56238960"); - public static readonly MongoId QUEST_IDEA_CARGO_MANIFESTS = new MongoId( - "5ae9a1b886f77404c8537c62" - ); - public static readonly MongoId QUEST_INCRIMINATING_LETTER = new MongoId( - "67499d0eeca8acb2d2061639" - ); - public static readonly MongoId QUEST_INFECTED_BLOOD_SAMPLE = new MongoId( - "6707cc67cc1667e49e0f7232" - ); - public static readonly MongoId QUEST_INFORMANT_JOURNAL = new MongoId( - "63989ced706b793c7d60cfef" - ); + public static readonly MongoId QUEST_IDEA_CARGO_MANIFESTS = new MongoId("5ae9a1b886f77404c8537c62"); + public static readonly MongoId QUEST_INCRIMINATING_LETTER = new MongoId("67499d0eeca8acb2d2061639"); + public static readonly MongoId QUEST_INFECTED_BLOOD_SAMPLE = new MongoId("6707cc67cc1667e49e0f7232"); + public static readonly MongoId QUEST_INFORMANT_JOURNAL = new MongoId("63989ced706b793c7d60cfef"); public static readonly MongoId QUEST_JOURNAL = new MongoId("64f07f7726cfa02c506f8ac0"); - public static readonly MongoId QUEST_KEY_TO_THE_CLOSED_PREMISES_OF_THE_HEALTH_RESORT = - new MongoId("5a0448bc86f774736f14efa8"); - public static readonly MongoId QUEST_KNOSSOS_SENIOR_MANAGERS_DIARY = new MongoId( - "679b9a1a4e4ed4b3b40ae5c2" - ); - public static readonly MongoId QUEST_KOSA_UAV_ELECTRONIC_JAMMING_DEVICE = new MongoId( - "67499b9b909d2013670a5029" - ); + public static readonly MongoId QUEST_KEY_TO_THE_CLOSED_PREMISES_OF_THE_HEALTH_RESORT = new MongoId("5a0448bc86f774736f14efa8"); + public static readonly MongoId QUEST_KNOSSOS_SENIOR_MANAGERS_DIARY = new MongoId("679b9a1a4e4ed4b3b40ae5c2"); + public static readonly MongoId QUEST_KOSA_UAV_ELECTRONIC_JAMMING_DEVICE = new MongoId("67499b9b909d2013670a5029"); public static readonly MongoId QUEST_LAB_JOURNAL = new MongoId("66c0b39ca1f68fcc1d0c0cc3"); - public static readonly MongoId QUEST_LEDX_SKIN_TRANSILLUMINATOR_US_VERSION = new MongoId( - "666879d498b97e3a8f09f1ae" - ); + public static readonly MongoId QUEST_LEDX_SKIN_TRANSILLUMINATOR_US_VERSION = new MongoId("666879d498b97e3a8f09f1ae"); public static readonly MongoId QUEST_LETTER_GOT_MAIL = new MongoId("638cbc68a63f1b49be6a3010"); public static readonly MongoId QUEST_LETTER_HERMIT = new MongoId("61904c9df62c89219a56e034"); - public static readonly MongoId QUEST_LETTER_POSTMAN_PAT = new MongoId( - "591093bb86f7747caa7bb2ee" - ); - public static readonly MongoId QUEST_LETTER_TERRAGROUP = new MongoId( - "5939e9b286f77462a709572c" - ); - public static readonly MongoId QUEST_LIGHTKEEPER_BTR_QUEST_RPG_AMMO_CASE = new MongoId( - "67499d2c69a58fceba104a43" - ); - public static readonly MongoId QUEST_LIGHTKEEPER_INTEL = new MongoId( - "6398a072e301557ae24cec92" - ); - public static readonly MongoId QUEST_LIGHTKEEPER_INTEL_2 = new MongoId( - "638e0752ab150a5f56238962" - ); - public static readonly MongoId QUEST_LIGHTKEEPER_INTEL_2_FORGED = new MongoId( - "638e06c4b8bac37a110ed56d" - ); - public static readonly MongoId QUEST_LIGHTKEEPER_INTEL_FORGED = new MongoId( - "6398a0861c712b1e1d4dadf1" - ); - public static readonly MongoId QUEST_LIGHTKEEPERS_CASE = new MongoId( - "67499b3eeca8acb2d2061636" - ); - public static readonly MongoId QUEST_MARKED_OPHTHALMOSCOPE = new MongoId( - "5efdaf6de6a30218ed211a48" - ); - public static readonly MongoId QUEST_MBT_INTEGRATED_NAVIGATION_SYSTEM = new MongoId( - "60c080eb991ac167ad1c3ad4" - ); + public static readonly MongoId QUEST_LETTER_POSTMAN_PAT = new MongoId("591093bb86f7747caa7bb2ee"); + public static readonly MongoId QUEST_LETTER_TERRAGROUP = new MongoId("5939e9b286f77462a709572c"); + public static readonly MongoId QUEST_LIGHTKEEPER_BTR_QUEST_RPG_AMMO_CASE = new MongoId("67499d2c69a58fceba104a43"); + public static readonly MongoId QUEST_LIGHTKEEPER_INTEL = new MongoId("6398a072e301557ae24cec92"); + public static readonly MongoId QUEST_LIGHTKEEPER_INTEL_2 = new MongoId("638e0752ab150a5f56238962"); + public static readonly MongoId QUEST_LIGHTKEEPER_INTEL_2_FORGED = new MongoId("638e06c4b8bac37a110ed56d"); + public static readonly MongoId QUEST_LIGHTKEEPER_INTEL_FORGED = new MongoId("6398a0861c712b1e1d4dadf1"); + public static readonly MongoId QUEST_LIGHTKEEPERS_CASE = new MongoId("67499b3eeca8acb2d2061636"); + public static readonly MongoId QUEST_MARKED_OPHTHALMOSCOPE = new MongoId("5efdaf6de6a30218ed211a48"); + public static readonly MongoId QUEST_MBT_INTEGRATED_NAVIGATION_SYSTEM = new MongoId("60c080eb991ac167ad1c3ad4"); public static readonly MongoId QUEST_MEDICAL_RECORD = new MongoId("6393262086e646067c176aa2"); public static readonly MongoId QUEST_MEDICAL_RECORD_1 = new MongoId("608c22a003292f4ba43f8a1a"); public static readonly MongoId QUEST_MEDICAL_RECORD_2 = new MongoId("60a3b5b05f84d429b732e934"); - public static readonly MongoId QUEST_MILITARY_DOCUMENTS_1 = new MongoId( - "60915994c49cf53e4772cc38" - ); - public static readonly MongoId QUEST_MILITARY_DOCUMENTS_2 = new MongoId( - "60a3b6359c427533db36cf84" - ); - public static readonly MongoId QUEST_MILITARY_DOCUMENTS_3 = new MongoId( - "60a3b65c27adf161da7b6e14" - ); - public static readonly MongoId QUEST_MOTOR_CONTROLLER_1 = new MongoId( - "5af04c0b86f774138708f78e" - ); - public static readonly MongoId QUEST_MOTOR_CONTROLLER_2 = new MongoId( - "5b4c72b386f7745b453af9c0" - ); - public static readonly MongoId QUEST_MOTOR_CONTROLLER_3 = new MongoId( - "5b4c72c686f77462ac37e907" - ); - public static readonly MongoId QUEST_NOTE_FOR_THERAPIST = new MongoId( - "5ae9a34d86f7740aab00e4de" - ); - public static readonly MongoId QUEST_OLI_CARGO_MANIFESTS = new MongoId( - "5ae9a18586f7746e381e16a3" - ); - public static readonly MongoId QUEST_OLI_CARGO_ROUTE_DOCUMENTS = new MongoId( - "5ae9a25386f7746dd946e6d9" - ); - public static readonly MongoId QUEST_PACKAGE_FOR_PRAPOR = new MongoId( - "67499a9669a58fceba104a41" - ); - public static readonly MongoId QUEST_PACKAGE_OF_GRAPHICS_CARDS = new MongoId( - "5ac620eb86f7743a8e6e0da0" - ); - public static readonly MongoId QUEST_PARAMEDICS_GPHONE_X = new MongoId( - "64f09c02b63b74469b6c149f" - ); + public static readonly MongoId QUEST_MILITARY_DOCUMENTS_1 = new MongoId("60915994c49cf53e4772cc38"); + public static readonly MongoId QUEST_MILITARY_DOCUMENTS_2 = new MongoId("60a3b6359c427533db36cf84"); + public static readonly MongoId QUEST_MILITARY_DOCUMENTS_3 = new MongoId("60a3b65c27adf161da7b6e14"); + public static readonly MongoId QUEST_MOTOR_CONTROLLER_1 = new MongoId("5af04c0b86f774138708f78e"); + public static readonly MongoId QUEST_MOTOR_CONTROLLER_2 = new MongoId("5b4c72b386f7745b453af9c0"); + public static readonly MongoId QUEST_MOTOR_CONTROLLER_3 = new MongoId("5b4c72c686f77462ac37e907"); + public static readonly MongoId QUEST_NOTE_FOR_THERAPIST = new MongoId("5ae9a34d86f7740aab00e4de"); + public static readonly MongoId QUEST_OLI_CARGO_MANIFESTS = new MongoId("5ae9a18586f7746e381e16a3"); + public static readonly MongoId QUEST_OLI_CARGO_ROUTE_DOCUMENTS = new MongoId("5ae9a25386f7746dd946e6d9"); + public static readonly MongoId QUEST_PACKAGE_FOR_PRAPOR = new MongoId("67499a9669a58fceba104a41"); + public static readonly MongoId QUEST_PACKAGE_OF_GRAPHICS_CARDS = new MongoId("5ac620eb86f7743a8e6e0da0"); + public static readonly MongoId QUEST_PARAMEDICS_GPHONE_X = new MongoId("64f09c02b63b74469b6c149f"); public static readonly MongoId QUEST_PHOTO_ALBUM = new MongoId("5d357d6b86f7745b606e3508"); public static readonly MongoId QUEST_PICTURE_1 = new MongoId("64e73909cd54ef0580746af3"); public static readonly MongoId QUEST_PICTURE_10 = new MongoId("64e74a534d49d23b2c39d31b"); @@ -9084,2046 +3751,875 @@ public static class ItemTpl public static readonly MongoId QUEST_PICTURE_8 = new MongoId("64e74a44c2b4f829615ec334"); public static readonly MongoId QUEST_PICTURE_9 = new MongoId("64e74a4baac4cd0a7264ecdd"); public static readonly MongoId QUEST_PILOT_LOGBOOK = new MongoId("66c0b90c8398582e4b0c2e27"); - public static readonly MongoId QUEST_PUMPING_STATION_OPERATION_REPORT = new MongoId( - "619268ad78f4fa33f173dbe5" - ); - public static readonly MongoId QUEST_RADIO_TRANSMITTER_BODY = new MongoId( - "6399f54b0a36db13c823ad21" - ); + public static readonly MongoId QUEST_PUMPING_STATION_OPERATION_REPORT = new MongoId("619268ad78f4fa33f173dbe5"); + public static readonly MongoId QUEST_RADIO_TRANSMITTER_BODY = new MongoId("6399f54b0a36db13c823ad21"); public static readonly MongoId QUEST_RECRUITERS_NOTES = new MongoId("67f3fd9bdb1fbd5add090f96"); public static readonly MongoId QUEST_REF_DIRT = new MongoId("664fce7a90294949fe2d81cb"); public static readonly MongoId QUEST_SECRET_COMPONENT = new MongoId("64f5b4f71a5f313cb144c06c"); - public static readonly MongoId QUEST_SECURE_FLASH_DRIVE = new MongoId( - "59f9ddae86f77407ab46e047" - ); - public static readonly MongoId QUEST_SECURE_FLASH_DRIVE_V3 = new MongoId( - "6331bb0d1aa9f42b804997a6" - ); - public static readonly MongoId QUEST_SECURE_FOLDER_0013 = new MongoId( - "5939e5a786f77461f11c0098" - ); - public static readonly MongoId QUEST_SECURE_FOLDER_0022 = new MongoId( - "591092ef86f7747bb8703422" - ); - public static readonly MongoId QUEST_SECURE_FOLDER_0031 = new MongoId( - "5938188786f77474f723e87f" - ); - public static readonly MongoId QUEST_SECURE_FOLDER_0048 = new MongoId( - "593965cf86f774087a77e1b6" - ); - public static readonly MongoId QUEST_SECURE_FOLDER_0052 = new MongoId( - "5938878586f7741b797c562f" - ); - public static readonly MongoId QUEST_SECURE_FOLDER_0060 = new MongoId( - "5a6860d886f77411cd3a9e47" - ); + public static readonly MongoId QUEST_SECURE_FLASH_DRIVE = new MongoId("59f9ddae86f77407ab46e047"); + public static readonly MongoId QUEST_SECURE_FLASH_DRIVE_V3 = new MongoId("6331bb0d1aa9f42b804997a6"); + public static readonly MongoId QUEST_SECURE_FOLDER_0013 = new MongoId("5939e5a786f77461f11c0098"); + public static readonly MongoId QUEST_SECURE_FOLDER_0022 = new MongoId("591092ef86f7747bb8703422"); + public static readonly MongoId QUEST_SECURE_FOLDER_0031 = new MongoId("5938188786f77474f723e87f"); + public static readonly MongoId QUEST_SECURE_FOLDER_0048 = new MongoId("593965cf86f774087a77e1b6"); + public static readonly MongoId QUEST_SECURE_FOLDER_0052 = new MongoId("5938878586f7741b797c562f"); + public static readonly MongoId QUEST_SECURE_FOLDER_0060 = new MongoId("5a6860d886f77411cd3a9e47"); public static readonly MongoId QUEST_SECURED_TAPE = new MongoId("6398a4cfb5992f573c6562b3"); - public static readonly MongoId QUEST_SINGLEAXIS_FIBER_OPTIC_GYROSCOPE_1 = new MongoId( - "5af04e0a86f7743a532b79e2" - ); - public static readonly MongoId QUEST_SINGLEAXIS_FIBER_OPTIC_GYROSCOPE_2 = new MongoId( - "5b4c72fb86f7745cef1cffc5" - ); - public static readonly MongoId QUEST_SKIER_AND_PEACEKEEPER_CORRESPONDENCE = new MongoId( - "6614238e0d240a5f5d0f679d" - ); + public static readonly MongoId QUEST_SINGLEAXIS_FIBER_OPTIC_GYROSCOPE_1 = new MongoId("5af04e0a86f7743a532b79e2"); + public static readonly MongoId QUEST_SINGLEAXIS_FIBER_OPTIC_GYROSCOPE_2 = new MongoId("5b4c72fb86f7745cef1cffc5"); + public static readonly MongoId QUEST_SKIER_AND_PEACEKEEPER_CORRESPONDENCE = new MongoId("6614238e0d240a5f5d0f679d"); public static readonly MongoId QUEST_SKIERS_WALLET = new MongoId("675f7f224076a741a3061568"); - public static readonly MongoId QUEST_SLAUGHTER_VIDEOTAPE = new MongoId( - "679b998180a165f7a40b4c2c" - ); - public static readonly MongoId QUEST_SLIDERKEY_SECURE_FLASH_DRIVE = new MongoId( - "590c62a386f77412b0130255" - ); - public static readonly MongoId QUEST_STOLEN_MILITARY_DOCUMENTS = new MongoId( - "61a00bcb177fb945751bbe6a" - ); - public static readonly MongoId QUEST_STOLEN_WEAPON_CASE = new MongoId( - "671a406a6d315b526708f103" - ); - public static readonly MongoId QUEST_SURGERY_KIT_MARKED_WITH_A_BLUE_SYMBOL = new MongoId( - "5efdafc1e70b5e33f86de058" - ); - public static readonly MongoId QUEST_SYRINGE_WITH_A_CHEMICAL = new MongoId( - "593a87af86f774122f54a951" - ); - public static readonly MongoId QUEST_T90M_COMMANDER_CONTROL_PANEL = new MongoId( - "609267a2bb3f46069c3e6c7d" - ); - public static readonly MongoId QUEST_TARKOV_CITY_SOUVENIR_KEY = new MongoId( - "66687bc89111279d600b5062" - ); - public static readonly MongoId QUEST_TERRAGROUP_SHIPMENT_REPORT = new MongoId( - "675f7acc4076a741a3061566" - ); + public static readonly MongoId QUEST_SLAUGHTER_VIDEOTAPE = new MongoId("679b998180a165f7a40b4c2c"); + public static readonly MongoId QUEST_SLIDERKEY_SECURE_FLASH_DRIVE = new MongoId("590c62a386f77412b0130255"); + public static readonly MongoId QUEST_STOLEN_MILITARY_DOCUMENTS = new MongoId("61a00bcb177fb945751bbe6a"); + public static readonly MongoId QUEST_STOLEN_WEAPON_CASE = new MongoId("671a406a6d315b526708f103"); + public static readonly MongoId QUEST_SURGERY_KIT_MARKED_WITH_A_BLUE_SYMBOL = new MongoId("5efdafc1e70b5e33f86de058"); + public static readonly MongoId QUEST_SYRINGE_WITH_A_CHEMICAL = new MongoId("593a87af86f774122f54a951"); + public static readonly MongoId QUEST_T90M_COMMANDER_CONTROL_PANEL = new MongoId("609267a2bb3f46069c3e6c7d"); + public static readonly MongoId QUEST_TARKOV_CITY_SOUVENIR_KEY = new MongoId("66687bc89111279d600b5062"); + public static readonly MongoId QUEST_TERRAGROUP_SHIPMENT_REPORT = new MongoId("675f7acc4076a741a3061566"); public static readonly MongoId QUEST_TEST_KEY = new MongoId("5a043f2c86f7741aa57b5145"); public static readonly MongoId QUEST_TGVI24_SAMPLE = new MongoId("6707cd70aab679420007e018"); public static readonly MongoId QUEST_TOUGHBOOK_CARGO = new MongoId("5a29284f86f77463ef3db363"); - public static readonly MongoId QUEST_TOUGHBOOK_SEASIDE_VACATION = new MongoId( - "619252352be33f26043400a7" - ); - public static readonly MongoId QUEST_TRUE_VACCINE_RECIPE = new MongoId( - "6707d1f9571b50abc703b651" - ); + public static readonly MongoId QUEST_TOUGHBOOK_SEASIDE_VACATION = new MongoId("619252352be33f26043400a7"); + public static readonly MongoId QUEST_TRUE_VACCINE_RECIPE = new MongoId("6707d1f9571b50abc703b651"); public static readonly MongoId QUEST_UAV_SAS_DISK_1 = new MongoId("5a294d7c86f7740651337cf9"); public static readonly MongoId QUEST_UAV_SAS_DISK_2 = new MongoId("5a294d8486f774068638cd93"); public static readonly MongoId QUEST_UNHEARD_LAPTOP = new MongoId("661421c7c1f2f548c50ee649"); public static readonly MongoId QUEST_UNHEARD_LAPTOP_2 = new MongoId("661423200d240a5f5d0f679b"); public static readonly MongoId QUEST_UNHEARD_PHONE = new MongoId("6614217b6d9d5abcad0ff098"); public static readonly MongoId QUEST_UNHEARD_PHONE_2 = new MongoId("6614230055afee107f05e998"); - public static readonly MongoId QUEST_VACCINE_SAMPLE_IV = new MongoId( - "6707cf827d279daad80fa95f" - ); + public static readonly MongoId QUEST_VACCINE_SAMPLE_IV = new MongoId("6707cf827d279daad80fa95f"); public static readonly MongoId QUEST_VO_SIGNED_DIARY = new MongoId("6707cef3571b50abc703b64f"); - public static readonly MongoId QUEST_VPX_FLASH_STORAGE_MODULE_MARKED_GROUP_3 = new MongoId( - "679b9aa490622daf9708da73" - ); + public static readonly MongoId QUEST_VPX_FLASH_STORAGE_MODULE_MARKED_GROUP_3 = new MongoId("679b9aa490622daf9708da73"); public static readonly MongoId QUEST_WATCH_BRONZE = new MongoId("5937fd0086f7742bf33fc198"); public static readonly MongoId QUEST_WATCH_GOLD = new MongoId("590de92486f77423d9312a33"); public static readonly MongoId QUEST_WATCH_SILVER = new MongoId("5937fc6786f7742cab753590"); - public static readonly MongoId QUEST_WATER_PUMP_OPERATION_DATA = new MongoId( - "619268de2be33f2604340159" + public static readonly MongoId QUEST_WATER_PUMP_OPERATION_DATA = new MongoId("619268de2be33f2604340159"); + public static readonly MongoId RADIOTRANSMITTER_DIGITAL_SECURE_DSP_RADIO_TRANSMITTER = new MongoId("62e910aaf957f2915e0a5e36"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_BLUE_OPEN = new MongoId("665730fa4de4820934746c48"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_BP_SEASON0_OPEN = new MongoId("67cad3226bf74131800752b7"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_GREEN_OPEN = new MongoId("6658876e146af22739040fad"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_VIOLET_OPEN = new MongoId("6658291eefd94e2d665b14a4"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JEWELRYCRATE_BLUE_OPEN = new MongoId("66573310a1657263d816a139"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JEWELRYCRATE_GREEN_OPEN = new MongoId("665886abdaadd1069736c539"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JEWELRYCRATE_VIOLET_OPEN = new MongoId("665829a6efd94e2d665b14a8"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JUNKCRATE_BLUE_OPEN = new MongoId("665732f4464c4b4ba4670fa9"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JUNKCRATE_GREEN_OPEN = new MongoId("6658892e6e007c6f33662002"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JUNKCRATE_VIOLET_OPEN = new MongoId("66582972ac60f009f270d2aa"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_WEAPONCRATE_BLUE_OPEN = new MongoId("665732e7ac60f009f270d1ef"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_WEAPONCRATE_GREEN_OPEN = new MongoId("665888282c4a1b73af576b77"); + public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_WEAPONCRATE_VIOLET_OPEN = new MongoId("665829424de4820934746ce6"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_01 = new MongoId("64897ffc3656831810043165"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_02 = new MongoId("64898e9db18e646e992aba47"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_03 = new MongoId("648990314b4d2b31b63a46fc"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_04 = new MongoId("648996987063b903ff4b8561"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_05 = new MongoId("6489981f7063b903ff4b8565"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_06 = new MongoId("64899a35fc093676bb0f57e3"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_07 = new MongoId("64899ec0a236de328b12db52"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_08 = new MongoId("64899f4189de40533661a0c0"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_09 = new MongoId("6489a0a4fc493c59d15fec05"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_10 = new MongoId("6489a233a236de328b12db56"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_11 = new MongoId("6489a344fc493c59d15fec0f"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_12 = new MongoId("6489a7d87063b903ff4b85cc"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_13 = new MongoId("6489a97645f9ca4ba51c4dd0"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_14 = new MongoId("6489aa584b6fc03d00374e59"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_15 = new MongoId("6489ab9645f9ca4ba51c4dd7"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_16 = new MongoId("6489b2b131a2135f0d7d0fcb"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_17 = new MongoId("6489b73cebac5a4a1b73cab7"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_18 = new MongoId("6489b88bcf0cd80b7e749069"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_19 = new MongoId("6489b91dd0c36c0a4925c4b4"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_20 = new MongoId("6489b99eebac5a4a1b73cabc"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_21 = new MongoId("6489ba157c07471efa3e03b4"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_22 = new MongoId("6489ba92a74e43447b64d5e2"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_23 = new MongoId("6489bbd6d0c36c0a4925c4b8"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_24 = new MongoId("6489bd7b79295b4f753d486a"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_25 = new MongoId("6489bed4a53c8c047c3dc361"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_26 = new MongoId("6489bfa844d98e01bc4c420e"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_27 = new MongoId("6489c03c8bc5233fdc78e788"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_28 = new MongoId("6489c0508bc5233fdc78e78c"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_29 = new MongoId("6489c0df7c07471efa3e03b8"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_30 = new MongoId("6489c0f731a2135f0d7d0fd5"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_31 = new MongoId("6489c12f8bc5233fdc78e790"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_32 = new MongoId("6489c164a53c8c047c3dc365"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_33 = new MongoId("6489c200cf0cd80b7e74906d"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_34 = new MongoId("6489c2aad0c36c0a4925c4bc"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_35 = new MongoId("6489c30331a2135f0d7d0fd9"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_36 = new MongoId("6489c46eebac5a4a1b73cac0"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_37 = new MongoId("6489c5cb44d98e01bc4c4212"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_38 = new MongoId("6489c65cd0c36c0a4925c4c0"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_39 = new MongoId("6489c753a74e43447b64d5e6"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_40 = new MongoId("6489c80e7c07471efa3e03bc"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_41 = new MongoId("6489c8a1a53c8c047c3dc369"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_42 = new MongoId("6489c8dba53c8c047c3dc36d"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_43 = new MongoId("6489c99f7c07471efa3e03c0"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_44 = new MongoId("6489ca66d0c36c0a4925c4c4"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_45 = new MongoId("6489cad98bc5233fdc78e794"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_46 = new MongoId("6489cb4fa74e43447b64d5ea"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_47 = new MongoId("6489cc4379295b4f753d486e"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_48 = new MongoId("6489cca131a2135f0d7d0fdd"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_49 = new MongoId("6489d812cf0cd80b7e749071"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_50 = new MongoId("6489d89debac5a4a1b73caf7"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_CONTRABAND_FAKE = new MongoId("674098588466ebb03408b210"); + public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_CONTRABAND_MAIN = new MongoId("674078c4a9c9adf0450d59f9"); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_LATAM_DROPS_2025_COMMON = new MongoId( + "67b70e43f753cf9f7a0a07a6" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_LATAM_DROPS_2025_EPIC = new MongoId( + "67b72c64f753cf9f7a0a07aa" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_LATAM_DROPS_2025_RARE = new MongoId( + "67b72271e5673725070b0456" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_COMMON = new MongoId( + "6694f4101ae1778e310f4f8e" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_COMMON_PLUS_1 = new MongoId( + "66a3896972c8e72507028806" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_COMMON_PLUS_2 = new MongoId( + "66a3896de45f71bf1009e45a" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_EPIC = new MongoId( + "6694f423909d2322a8073151" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_EPIC_PLUS_1 = new MongoId( + "66a389c0705adefa710cdeaa" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_EPIC_PLUS_2 = new MongoId( + "66a389c60982fc7e4c091c51" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_RARE = new MongoId( + "6694f418c74d8a180f0f78c0" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_RARE_PLUS_1 = new MongoId( + "66a3898c1df2a447cc0d3c35" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_RARE_PLUS_2 = new MongoId( + "66a3898f0982fc7e4c091c4d" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY0 = new MongoId( + "676a93c51888885b4e008b18" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY1 = new MongoId( + "676a95041888885b4e008b36" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY2 = new MongoId( + "676a98d7b4ba2f4afa04c704" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY3 = new MongoId( + "676a9a5c744595610f0ed501" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY4 = new MongoId( + "676a9b15b4ba2f4afa04c7ad" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY5 = new MongoId( + "676a9b1afe1fc45172014d32" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY6 = new MongoId( + "676a9bc6744595610f0ed52e" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY0 = new MongoId( + "676aa104fe1fc45172014da3" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY1 = new MongoId( + "676aa29243000db5340061b5" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY2 = new MongoId( + "676aa30ffe1fc45172014dce" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY3 = new MongoId( + "676aa37ff90b6f429601afb5" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY4 = new MongoId( + "676aa3cf7a232aa5c70bda8d" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY5 = new MongoId( + "676aa3fc20a7cc6f4309e078" + ); + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY6 = new MongoId( + "676aa450fe1fc45172014df2" ); - public static readonly MongoId RADIOTRANSMITTER_DIGITAL_SECURE_DSP_RADIO_TRANSMITTER = - new MongoId("62e910aaf957f2915e0a5e36"); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_BLUE_OPEN = new MongoId( - "665730fa4de4820934746c48" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY0 = new MongoId( + "676a9da81888885b4e008c51" ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_BP_SEASON0_OPEN = - new MongoId("67cad3226bf74131800752b7"); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_GREEN_OPEN = new MongoId( - "6658876e146af22739040fad" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY1 = new MongoId( + "676a9e46744595610f0ed53f" ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_GEARCRATE_VIOLET_OPEN = new MongoId( - "6658291eefd94e2d665b14a4" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY2 = new MongoId( + "676a9f03744595610f0ed55f" ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JEWELRYCRATE_BLUE_OPEN = new MongoId( - "66573310a1657263d816a139" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY3 = new MongoId( + "676a9fc7a65670a58c084c9e" ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JEWELRYCRATE_GREEN_OPEN = new MongoId( - "665886abdaadd1069736c539" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY4 = new MongoId( + "676aa016744595610f0ed563" ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JEWELRYCRATE_VIOLET_OPEN = new MongoId( - "665829a6efd94e2d665b14a8" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY5 = new MongoId( + "676aa025fe1fc45172014d9f" ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JUNKCRATE_BLUE_OPEN = new MongoId( - "665732f4464c4b4ba4670fa9" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JUNKCRATE_GREEN_OPEN = new MongoId( - "6658892e6e007c6f33662002" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_JUNKCRATE_VIOLET_OPEN = new MongoId( - "66582972ac60f009f270d2aa" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_WEAPONCRATE_BLUE_OPEN = new MongoId( - "665732e7ac60f009f270d1ef" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_WEAPONCRATE_GREEN_OPEN = new MongoId( - "665888282c4a1b73af576b77" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_ARENA_WEAPONCRATE_VIOLET_OPEN = new MongoId( - "665829424de4820934746ce6" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_01 = new MongoId( - "64897ffc3656831810043165" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_02 = new MongoId( - "64898e9db18e646e992aba47" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_03 = new MongoId( - "648990314b4d2b31b63a46fc" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_04 = new MongoId( - "648996987063b903ff4b8561" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_05 = new MongoId( - "6489981f7063b903ff4b8565" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_06 = new MongoId( - "64899a35fc093676bb0f57e3" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_07 = new MongoId( - "64899ec0a236de328b12db52" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_08 = new MongoId( - "64899f4189de40533661a0c0" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_09 = new MongoId( - "6489a0a4fc493c59d15fec05" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_10 = new MongoId( - "6489a233a236de328b12db56" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_11 = new MongoId( - "6489a344fc493c59d15fec0f" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_12 = new MongoId( - "6489a7d87063b903ff4b85cc" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_13 = new MongoId( - "6489a97645f9ca4ba51c4dd0" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_14 = new MongoId( - "6489aa584b6fc03d00374e59" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_15 = new MongoId( - "6489ab9645f9ca4ba51c4dd7" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_16 = new MongoId( - "6489b2b131a2135f0d7d0fcb" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_17 = new MongoId( - "6489b73cebac5a4a1b73cab7" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_18 = new MongoId( - "6489b88bcf0cd80b7e749069" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_19 = new MongoId( - "6489b91dd0c36c0a4925c4b4" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_20 = new MongoId( - "6489b99eebac5a4a1b73cabc" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_21 = new MongoId( - "6489ba157c07471efa3e03b4" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_22 = new MongoId( - "6489ba92a74e43447b64d5e2" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_23 = new MongoId( - "6489bbd6d0c36c0a4925c4b8" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_24 = new MongoId( - "6489bd7b79295b4f753d486a" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_25 = new MongoId( - "6489bed4a53c8c047c3dc361" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_26 = new MongoId( - "6489bfa844d98e01bc4c420e" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_27 = new MongoId( - "6489c03c8bc5233fdc78e788" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_28 = new MongoId( - "6489c0508bc5233fdc78e78c" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_29 = new MongoId( - "6489c0df7c07471efa3e03b8" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_30 = new MongoId( - "6489c0f731a2135f0d7d0fd5" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_31 = new MongoId( - "6489c12f8bc5233fdc78e790" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_32 = new MongoId( - "6489c164a53c8c047c3dc365" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_33 = new MongoId( - "6489c200cf0cd80b7e74906d" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_34 = new MongoId( - "6489c2aad0c36c0a4925c4bc" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_35 = new MongoId( - "6489c30331a2135f0d7d0fd9" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_36 = new MongoId( - "6489c46eebac5a4a1b73cac0" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_37 = new MongoId( - "6489c5cb44d98e01bc4c4212" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_38 = new MongoId( - "6489c65cd0c36c0a4925c4c0" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_39 = new MongoId( - "6489c753a74e43447b64d5e6" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_40 = new MongoId( - "6489c80e7c07471efa3e03bc" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_41 = new MongoId( - "6489c8a1a53c8c047c3dc369" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_42 = new MongoId( - "6489c8dba53c8c047c3dc36d" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_43 = new MongoId( - "6489c99f7c07471efa3e03c0" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_44 = new MongoId( - "6489ca66d0c36c0a4925c4c4" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_45 = new MongoId( - "6489cad98bc5233fdc78e794" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_46 = new MongoId( - "6489cb4fa74e43447b64d5ea" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_47 = new MongoId( - "6489cc4379295b4f753d486e" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_48 = new MongoId( - "6489cca131a2135f0d7d0fdd" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_49 = new MongoId( - "6489d812cf0cd80b7e749071" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_AIRDROP_50 = new MongoId( - "6489d89debac5a4a1b73caf7" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_CONTRABAND_FAKE = - new MongoId("674098588466ebb03408b210"); - public static readonly MongoId RANDOMLOOTCONTAINER_EVENT_CONTAINER_CONTRABAND_MAIN = - new MongoId("674078c4a9c9adf0450d59f9"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_LATAM_DROPS_2025_COMMON = - new MongoId("67b70e43f753cf9f7a0a07a6"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_LATAM_DROPS_2025_EPIC = - new MongoId("67b72c64f753cf9f7a0a07aa"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_LATAM_DROPS_2025_RARE = - new MongoId("67b72271e5673725070b0456"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_COMMON = - new MongoId("6694f4101ae1778e310f4f8e"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_COMMON_PLUS_1 = - new MongoId("66a3896972c8e72507028806"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_COMMON_PLUS_2 = - new MongoId("66a3896de45f71bf1009e45a"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_EPIC = - new MongoId("6694f423909d2322a8073151"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_EPIC_PLUS_1 = - new MongoId("66a389c0705adefa710cdeaa"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_EPIC_PLUS_2 = - new MongoId("66a389c60982fc7e4c091c51"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_RARE = - new MongoId("6694f418c74d8a180f0f78c0"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_RARE_PLUS_1 = - new MongoId("66a3898c1df2a447cc0d3c35"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_SUMMER_DROPS_2024_RARE_PLUS_2 = - new MongoId("66a3898f0982fc7e4c091c4d"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY0 = - new MongoId("676a93c51888885b4e008b18"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY1 = - new MongoId("676a95041888885b4e008b36"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY2 = - new MongoId("676a98d7b4ba2f4afa04c704"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY3 = - new MongoId("676a9a5c744595610f0ed501"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY4 = - new MongoId("676a9b15b4ba2f4afa04c7ad"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY5 = - new MongoId("676a9b1afe1fc45172014d32"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_COMMON_DAY6 = - new MongoId("676a9bc6744595610f0ed52e"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY0 = - new MongoId("676aa104fe1fc45172014da3"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY1 = - new MongoId("676aa29243000db5340061b5"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY2 = - new MongoId("676aa30ffe1fc45172014dce"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY3 = - new MongoId("676aa37ff90b6f429601afb5"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY4 = - new MongoId("676aa3cf7a232aa5c70bda8d"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY5 = - new MongoId("676aa3fc20a7cc6f4309e078"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_EPIC_DAY6 = - new MongoId("676aa450fe1fc45172014df2"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY0 = - new MongoId("676a9da81888885b4e008c51"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY1 = - new MongoId("676a9e46744595610f0ed53f"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY2 = - new MongoId("676a9f03744595610f0ed55f"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY3 = - new MongoId("676a9fc7a65670a58c084c9e"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY4 = - new MongoId("676aa016744595610f0ed563"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY5 = - new MongoId("676aa025fe1fc45172014d9f"); - public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY6 = - new MongoId("676aa0f11888885b4e008c8b"); - public static readonly MongoId RANDOMLOOTCONTAINER_NEW_YEAR_GIFT_BIG = new MongoId( - "63a897c6b1ff6e29734fcc95" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_NEW_YEAR_GIFT_MEDIUM = new MongoId( - "63a898a328e385334e0640a5" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_NEW_YEAR_GIFT_SMALL = new MongoId( - "63a8970d7108f713591149f5" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_PUMPKIN_RAND_LOOT_CONTAINER = new MongoId( - "634959225289190e5e773b3b" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_RAND_LOOT_CONTAINER_TWITCH_EVENT = - new MongoId("66aa3a180d6ecb50a21a4e1a"); - public static readonly MongoId RANDOMLOOTCONTAINER_RAND_LOOT_CONTAINER_TWITCH_EVENT_PLUS_1 = - new MongoId("66aa3a31efb1b8119f0196c7"); - public static readonly MongoId RANDOMLOOTCONTAINER_RAND_LOOT_CONTAINER_TWITCH_EVENT_PLUS_2 = - new MongoId("66aa3a3800b2c42adb07d13e"); - public static readonly MongoId RANDOMLOOTCONTAINER_RANDOM_LOOT_CONTAINER = new MongoId( - "62f10b79e7ee985f386b2f47" - ); - public static readonly MongoId RANDOMLOOTCONTAINER_RANDOM_LOOT_QUEST_CONTAINER = new MongoId( - "633ffb5d419dbf4bea7004c6" - ); - public static readonly MongoId RANGEFINDER_VORTEX_RANGER_1500 = new MongoId( - "61605e13ffa6e502ac5e7eef" - ); - public static readonly MongoId RECEIVER_AI_AXMC_338_LM_CHASSIS = new MongoId( - "6281204f308cb521f87a8f9b" + public static readonly MongoId RANDOMLOOTCONTAINER_ITEM_CONTAINER_EVENT_TWITCH_WINTER_DROPS_2025_RARE_DAY6 = new MongoId( + "676aa0f11888885b4e008c8b" ); + public static readonly MongoId RANDOMLOOTCONTAINER_NEW_YEAR_GIFT_BIG = new MongoId("63a897c6b1ff6e29734fcc95"); + public static readonly MongoId RANDOMLOOTCONTAINER_NEW_YEAR_GIFT_MEDIUM = new MongoId("63a898a328e385334e0640a5"); + public static readonly MongoId RANDOMLOOTCONTAINER_NEW_YEAR_GIFT_SMALL = new MongoId("63a8970d7108f713591149f5"); + public static readonly MongoId RANDOMLOOTCONTAINER_PUMPKIN_RAND_LOOT_CONTAINER = new MongoId("634959225289190e5e773b3b"); + public static readonly MongoId RANDOMLOOTCONTAINER_RAND_LOOT_CONTAINER_TWITCH_EVENT = new MongoId("66aa3a180d6ecb50a21a4e1a"); + public static readonly MongoId RANDOMLOOTCONTAINER_RAND_LOOT_CONTAINER_TWITCH_EVENT_PLUS_1 = new MongoId("66aa3a31efb1b8119f0196c7"); + public static readonly MongoId RANDOMLOOTCONTAINER_RAND_LOOT_CONTAINER_TWITCH_EVENT_PLUS_2 = new MongoId("66aa3a3800b2c42adb07d13e"); + public static readonly MongoId RANDOMLOOTCONTAINER_RANDOM_LOOT_CONTAINER = new MongoId("62f10b79e7ee985f386b2f47"); + public static readonly MongoId RANDOMLOOTCONTAINER_RANDOM_LOOT_QUEST_CONTAINER = new MongoId("633ffb5d419dbf4bea7004c6"); + public static readonly MongoId RANGEFINDER_VORTEX_RANGER_1500 = new MongoId("61605e13ffa6e502ac5e7eef"); + public static readonly MongoId RECEIVER_AI_AXMC_338_LM_CHASSIS = new MongoId("6281204f308cb521f87a8f9b"); public static readonly MongoId RECEIVER_AI_AXMC_UPPER = new MongoId("62811fbf09427b40ab14e767"); - public static readonly MongoId RECEIVER_AK_AKADEMIA_BASTION_DUST_COVER = new MongoId( - "5d2c76ed48f03532f2136169" - ); - public static readonly MongoId RECEIVER_AK_FAB_DEFENSE_PDC_DUST_COVER = new MongoId( - "5d2c770c48f0354b4a07c100" - ); - public static readonly MongoId RECEIVER_AK_TWS_DOG_LEG_RAIL_DUST_COVER = new MongoId( - "5d2c772c48f0355d95672c25" - ); - public static readonly MongoId RECEIVER_AK_ZENIT_B33_DUST_COVER = new MongoId( - "5649af884bdc2d1b2b8b4589" - ); - public static readonly MongoId RECEIVER_AK12_RAILED_DUST_COVER = new MongoId( - "649ec2f3961514b22506b111" - ); - public static readonly MongoId RECEIVER_AK50_DUST_COVER = new MongoId( - "67d416e19bd76ef20f0e743b" - ); - public static readonly MongoId RECEIVER_AK545_RAILED_DUST_COVER = new MongoId( - "628b9be6cff66b70c002b14c" - ); - public static readonly MongoId RECEIVER_AK74_DUST_COVER = new MongoId( - "5649af094bdc2df8348b4586" - ); - public static readonly MongoId RECEIVER_AK74M_DUST_COVER = new MongoId( - "5ac50da15acfc4001718d287" - ); - public static readonly MongoId RECEIVER_AKM_DUST_COVER = new MongoId( - "59d6507c86f7741b846413a2" - ); - public static readonly MongoId RECEIVER_AKS74U_DUST_COVER = new MongoId( - "57dc334d245977597164366f" - ); - public static readonly MongoId RECEIVER_AKS74U_LEGAL_ARSENAL_PILGRIM_RAILED_DUST_COVER = - new MongoId("655cb6b5d680a544f30607fa"); - public static readonly MongoId RECEIVER_AKS74UB_DUST_COVER = new MongoId( - "5839a7742459773cf9693481" - ); - public static readonly MongoId RECEIVER_AR15_ADAR_215_556X45_UPPER = new MongoId( - "5c0e2f26d174af02a9625114" - ); - public static readonly MongoId RECEIVER_AR15_AEROKNOX_AX15_556X45_UPPER = new MongoId( - "63f5ed14534b2c3d5479a677" - ); - public static readonly MongoId RECEIVER_AR15_NOVESKE_GEN3_556X45_UPPER = new MongoId( - "5c07a8770db8340023300450" - ); - public static readonly MongoId RECEIVER_AR15_VLTOR_MUR1S_556X45_UPPER = new MongoId( - "59bfe68886f7746004266202" - ); - public static readonly MongoId RECEIVER_AS_VAL_DUST_COVER = new MongoId( - "57c44f4f2459772d2c627113" - ); - public static readonly MongoId RECEIVER_DESERT_EAGLE_L5_357_PISTOL_SLIDE = new MongoId( - "669fa5127a09bc295603b499" - ); - public static readonly MongoId RECEIVER_DESERT_EAGLE_L5_50_AE_PISTOL_SLIDE = new MongoId( - "669fa5019aa2a422600442f6" - ); - public static readonly MongoId RECEIVER_DESERT_EAGLE_L6_PISTOL_SLIDE = new MongoId( - "669fa4d97a09bc295603b496" - ); - public static readonly MongoId RECEIVER_DESERT_EAGLE_L6_PISTOL_SLIDE_WTS = new MongoId( - "669fa5271bd4416eaa09b3ce" - ); - public static readonly MongoId RECEIVER_DESERT_EAGLE_MK_XIX_PISTOL_SLIDE = new MongoId( - "668fe60b56984d93550462c6" - ); - public static readonly MongoId RECEIVER_DO_NOT_USEAI_AXMC_762X51MM_CHASSIS = new MongoId( - "628120415631d45211793c99" - ); - public static readonly MongoId RECEIVER_FAL_STANDARD_DUST_COVER = new MongoId( - "5b7d6c105acfc40015109a5f" - ); - public static readonly MongoId RECEIVER_FN_FIVESEVEN_MK2_PISTOL_SLIDE = new MongoId( - "5d3eb44aa4b93650d64e4979" - ); - public static readonly MongoId RECEIVER_FN_P90_57X28_UPPER = new MongoId( - "5cc70102e4a949035e43ba74" - ); - public static readonly MongoId RECEIVER_FN_P90_EFFEN_90_57X28_UPPER = new MongoId( - "5cc700ede4a949033c734315" - ); - public static readonly MongoId RECEIVER_FN_PS90_57X28_UPPER = new MongoId( - "5cf7acfcd7f00c1084477cf2" - ); - public static readonly MongoId RECEIVER_FN_SCARH_762X51_UPPER = new MongoId( - "6165adcdd3a39d50044c120f" - ); - public static readonly MongoId RECEIVER_FN_SCARH_762X51_UPPER_RECEIVER_FDE = new MongoId( - "6165aeedfaa1272e431521e3" - ); - public static readonly MongoId RECEIVER_FN_SCARL_556X45_UPPER = new MongoId( - "618405198004cc50514c3594" - ); - public static readonly MongoId RECEIVER_FN_SCARL_556X45_UPPER_RECEIVER_FDE = new MongoId( - "618426d96c780c1e710c9b9f" - ); - public static readonly MongoId RECEIVER_GLOCK_17_MOS_PISTOL_SLIDE = new MongoId( - "615d8dbd290d254f5e6b2ed6" - ); - public static readonly MongoId RECEIVER_GLOCK_17_PISTOL_SLIDE = new MongoId( - "5a6f5e048dc32e00094b97da" - ); - public static readonly MongoId RECEIVER_GLOCK_18C_PISTOL_SLIDE = new MongoId( - "5b1faa0f5acfc40dc528aeb5" - ); - public static readonly MongoId RECEIVER_GLOCK_19X_PISTOL_SLIDE = new MongoId( - "63075cc5962d0247b029dc2a" - ); - public static readonly MongoId RECEIVER_GLOCK_LONE_WOLF_ALPHAWOLF_CUSTOM_PISTOL_SLIDE = - new MongoId("5a7033908dc32e000a311392"); - public static readonly MongoId RECEIVER_GLOCK_LONE_WOLF_ALPHAWOLF_PISTOL_SLIDE = new MongoId( - "5a702d198dc32e000b452fc3" - ); - public static readonly MongoId RECEIVER_GLOCK_MOTO_CUT_PISTOL_SLIDE = new MongoId( - "5a9685b1a2750c0032157104" - ); - public static readonly MongoId RECEIVER_GLOCK_POLYMER80_PS9_PISTOL_SLIDE = new MongoId( - "5a7afa25e899ef00135e31b0" - ); - public static readonly MongoId RECEIVER_GLOCK_VIPER_CUT_PISTOL_SLIDE = new MongoId( - "5a6f5f078dc32e00094b97dd" - ); - public static readonly MongoId RECEIVER_GLOCK_ZEV_TECH_HEX_GEN3_RMR_PISTOL_SLIDE = new MongoId( - "5a71e22f8dc32e00094b97f4" - ); - public static readonly MongoId RECEIVER_GLOCK_ZEV_TECH_HEX_SPARTAN_RMR_PISTOL_SLIDE = - new MongoId("5a71e4f48dc32e001207fb26"); - public static readonly MongoId RECEIVER_HK_416A5_556X45_UPPER = new MongoId( - "5bb20d53d4351e4502010a69" - ); - public static readonly MongoId RECEIVER_HK_G28_762X51_UPPER = new MongoId( - "61713a8fd92c473c770214a4" - ); - public static readonly MongoId RECEIVER_HK_MP5_9X19_UPPER = new MongoId( - "5926c0df86f77462f647f764" - ); - public static readonly MongoId RECEIVER_HK_MP5K_9X19_UPPER = new MongoId( - "5d2f261548f03576f500e7b7" - ); - public static readonly MongoId RECEIVER_HK_MP5SD_9X19_UPPER = new MongoId( - "5926f2e086f7745aae644231" - ); - public static readonly MongoId RECEIVER_HK_USP_45_ACP_PISTOL_SLIDE = new MongoId( - "6193d382ed0429009f543e65" - ); - public static readonly MongoId RECEIVER_HK_USP_ELITE_45_ACP_PISTOL_SLIDE = new MongoId( - "6194f5d418a3974e5e7421ef" - ); - public static readonly MongoId RECEIVER_HK_USP_EXPERT_45_ACP_PISTOL_SLIDE = new MongoId( - "6194f5722d2c397d6600348f" - ); - public static readonly MongoId RECEIVER_HK_USP_MATCH_45_ACP_PISTOL_SLIDE = new MongoId( - "6194f5a318a3974e5e7421eb" - ); - public static readonly MongoId RECEIVER_HK_USP_TACTICAL_45_ACP_PISTOL_SLIDE = new MongoId( - "6194f41f9fb0c665d5490e75" - ); - public static readonly MongoId RECEIVER_M1911A1_PISTOL_SLIDE = new MongoId( - "5e81edc13397a21db957f6a1" - ); - public static readonly MongoId RECEIVER_M45A1_PISTOL_SLIDE = new MongoId( - "5f3e7823ddc4f03b010e2045" - ); - public static readonly MongoId RECEIVER_M4A1_556X45_UPPER = new MongoId( - "55d355e64bdc2d962f8b4569" - ); - public static readonly MongoId RECEIVER_M9A3_PISTOL_SLIDE = new MongoId( - "5cadc55cae921500103bb3be" - ); - public static readonly MongoId RECEIVER_MCX_GEN1_300_BLK_UPPER = new MongoId( - "5fbcc3e4d6fa9c00c571bb58" - ); - public static readonly MongoId RECEIVER_MCXSPEAR_68X51_UPPER = new MongoId( - "6529119424cbe3c74a05e5bb" - ); - public static readonly MongoId RECEIVER_MK18_338_LM_UPPER = new MongoId( - "5fc278107283c4046c581489" - ); - public static readonly MongoId RECEIVER_MK47_RESOLUTE_762X39_UPPER = new MongoId( - "606587a88900dc2d9a55b659" - ); - public static readonly MongoId RECEIVER_MOLOT_ARMS_AKMTYPE_DUST_COVER = new MongoId( - "59e6449086f7746c9f75e822" - ); - public static readonly MongoId RECEIVER_MP9_9X19_UPPER = new MongoId( - "5e0090f7e9dc277128008b93" - ); - public static readonly MongoId RECEIVER_MP9N_9X19_UPPER = new MongoId( - "5de8e67c4a9f347bc92edbd7" - ); - public static readonly MongoId RECEIVER_MPX_GEN1_9X19_UPPER = new MongoId( - "5894a5b586f77426d2590767" - ); - public static readonly MongoId RECEIVER_OPSKS_DUST_COVER = new MongoId( - "634f06262e5def262d0b30ca" - ); - public static readonly MongoId RECEIVER_P226_AXELSON_TACTICAL_MK25_PISTOL_SLIDE = new MongoId( - "5bffe7c50db834001d23ece1" - ); - public static readonly MongoId RECEIVER_P226_EMPEROR_SCORPION_PISTOL_SLIDE = new MongoId( - "5c010a700db834001d23ef5d" - ); - public static readonly MongoId RECEIVER_P226_LEGION_FULL_SIZE_PISTOL_SLIDE = new MongoId( - "5c0125fc0db834001a669aa3" - ); - public static readonly MongoId RECEIVER_P226_STAINLESS_ELITE_PISTOL_SLIDE = new MongoId( - "5c0009510db834001966907f" - ); - public static readonly MongoId RECEIVER_P226R_MK25_PISTOL_SLIDE = new MongoId( - "56d5a407d2720bb3418b456b" - ); - public static readonly MongoId RECEIVER_PL15_PISTOL_SLIDE = new MongoId( - "60228924961b8d75ee233c32" - ); - public static readonly MongoId RECEIVER_PM_PISTOL_SLIDE = new MongoId( - "6374a822e629013b9c0645c8" - ); - public static readonly MongoId RECEIVER_PP1901_VITYAZ_DUST_COVER = new MongoId( - "59985a8086f77414ec448d1a" - ); - public static readonly MongoId RECEIVER_PP1901_VITYAZSN_DUST_COVER = new MongoId( - "59985a6c86f77414ec448d17" - ); - public static readonly MongoId RECEIVER_PPSH41_DUST_COVER = new MongoId( - "5ea03e5009aa976f2e7a514b" - ); - public static readonly MongoId RECEIVER_RD704_DUST_COVER = new MongoId( - "628a665a86cbd9750d2ff5e5" - ); - public static readonly MongoId RECEIVER_RPK16_DUST_COVER = new MongoId( - "5beec91a0db834001961942d" - ); - public static readonly MongoId RECEIVER_SA58_EXTREME_DUTY_DUST_COVER = new MongoId( - "5b099bb25acfc400186331e8" - ); - public static readonly MongoId RECEIVER_SAKO_TRG_M10_338_LM = new MongoId( - "673cb491280680de5e02ff36" - ); - public static readonly MongoId RECEIVER_SKS_DUST_COVER = new MongoId( - "634f05ca517ccc8a960fc748" - ); - public static readonly MongoId RECEIVER_SKS_LEAPERS_UTG_PRO_MTU017_RECEIVER_COVER_MOUNT = - new MongoId("6415c694da439c6a97048b56"); - public static readonly MongoId RECEIVER_SOK12_DUST_COVER = new MongoId( - "57616c112459773cce774d66" - ); - public static readonly MongoId RECEIVER_SOK12_KIBA_ARMS_ZOMBIE_CUSTOM_DUST_COVER = new MongoId( - "676017fe8cfeeba9f707c8d6" - ); - public static readonly MongoId RECEIVER_SR25_762X51_UPPER = new MongoId( - "5df8e4080b92095fd441e594" - ); - public static readonly MongoId RECEIVER_SR2M_DUST_COVER = new MongoId( - "62e27a7865f0b1592a49e17b" - ); - public static readonly MongoId RECEIVER_STEYR_AUG_A3_556X45 = new MongoId( - "62e7c72df68e7a0676050c77" - ); - public static readonly MongoId RECEIVER_STEYR_AUG_A3_VLTOR_556X45 = new MongoId( - "67110d8d388bded67304ceb4" - ); - public static readonly MongoId RECEIVER_STM9_9X19_UPPER = new MongoId( - "602e63fb6335467b0c5ac94d" - ); - public static readonly MongoId RECEIVER_SVDS_CUSTOM_CUT_DUST_COVER = new MongoId( - "5dfce88fe9dc277128008b2e" - ); - public static readonly MongoId RECEIVER_SVDS_DUST_COVER = new MongoId( - "5c471bd12e221602b4129c3a" - ); - public static readonly MongoId RECEIVER_SVT_DUST_COVER = new MongoId( - "64119cdbdcf48d656f0aa272" - ); - public static readonly MongoId RECEIVER_TX15_556X45_LIGHTWEIGHT_UPPER = new MongoId( - "5d4405aaa4b9361e6a4e6bd3" - ); - public static readonly MongoId RECEIVER_UZI_PRO_DUST_COVER = new MongoId( - "6680326874b8f2050c0b9178" - ); - public static readonly MongoId RECEIVER_VPO101_DUST_COVER = new MongoId( - "5c503d0a2e221602b542b7ef" - ); - public static readonly MongoId RECEIVER_VSS_DUST_COVER = new MongoId( - "578395402459774a256959b5" - ); - public static readonly MongoId REPAIRKITS_BODY_ARMOR_REPAIR_KIT = new MongoId( - "591094e086f7747caa7bb2ef" - ); - public static readonly MongoId REPAIRKITS_WEAPON_REPAIR_KIT = new MongoId( - "5910968f86f77425cf569c32" - ); - public static readonly MongoId REVOLVER_CHIAPPA_RHINO_200DS_9X19 = new MongoId( - "624c2e8614da335f1e034d8c" - ); - public static readonly MongoId REVOLVER_CHIAPPA_RHINO_50DS_357 = new MongoId( - "61a4c8884f95bc3b2c5dc96f" - ); - public static readonly MongoId REVOLVER_MILKOR_M32A1_MSGL_40MM_GRENADE_LAUNCHER = new MongoId( - "6275303a9f372d6ea97f9ec7" - ); - public static readonly MongoId REVOLVER_MTS25512_12GA_SHOTGUN = new MongoId( - "60db29ce99594040e04c4a27" - ); + public static readonly MongoId RECEIVER_AK_AKADEMIA_BASTION_DUST_COVER = new MongoId("5d2c76ed48f03532f2136169"); + public static readonly MongoId RECEIVER_AK_FAB_DEFENSE_PDC_DUST_COVER = new MongoId("5d2c770c48f0354b4a07c100"); + public static readonly MongoId RECEIVER_AK_TWS_DOG_LEG_RAIL_DUST_COVER = new MongoId("5d2c772c48f0355d95672c25"); + public static readonly MongoId RECEIVER_AK_ZENIT_B33_DUST_COVER = new MongoId("5649af884bdc2d1b2b8b4589"); + public static readonly MongoId RECEIVER_AK12_RAILED_DUST_COVER = new MongoId("649ec2f3961514b22506b111"); + public static readonly MongoId RECEIVER_AK50_DUST_COVER = new MongoId("67d416e19bd76ef20f0e743b"); + public static readonly MongoId RECEIVER_AK545_RAILED_DUST_COVER = new MongoId("628b9be6cff66b70c002b14c"); + public static readonly MongoId RECEIVER_AK74_DUST_COVER = new MongoId("5649af094bdc2df8348b4586"); + public static readonly MongoId RECEIVER_AK74M_DUST_COVER = new MongoId("5ac50da15acfc4001718d287"); + public static readonly MongoId RECEIVER_AKM_DUST_COVER = new MongoId("59d6507c86f7741b846413a2"); + public static readonly MongoId RECEIVER_AKS74U_DUST_COVER = new MongoId("57dc334d245977597164366f"); + public static readonly MongoId RECEIVER_AKS74U_LEGAL_ARSENAL_PILGRIM_RAILED_DUST_COVER = new MongoId("655cb6b5d680a544f30607fa"); + public static readonly MongoId RECEIVER_AKS74UB_DUST_COVER = new MongoId("5839a7742459773cf9693481"); + public static readonly MongoId RECEIVER_AR15_ADAR_215_556X45_UPPER = new MongoId("5c0e2f26d174af02a9625114"); + public static readonly MongoId RECEIVER_AR15_AEROKNOX_AX15_556X45_UPPER = new MongoId("63f5ed14534b2c3d5479a677"); + public static readonly MongoId RECEIVER_AR15_NOVESKE_GEN3_556X45_UPPER = new MongoId("5c07a8770db8340023300450"); + public static readonly MongoId RECEIVER_AR15_VLTOR_MUR1S_556X45_UPPER = new MongoId("59bfe68886f7746004266202"); + public static readonly MongoId RECEIVER_AS_VAL_DUST_COVER = new MongoId("57c44f4f2459772d2c627113"); + public static readonly MongoId RECEIVER_DESERT_EAGLE_L5_357_PISTOL_SLIDE = new MongoId("669fa5127a09bc295603b499"); + public static readonly MongoId RECEIVER_DESERT_EAGLE_L5_50_AE_PISTOL_SLIDE = new MongoId("669fa5019aa2a422600442f6"); + public static readonly MongoId RECEIVER_DESERT_EAGLE_L6_PISTOL_SLIDE = new MongoId("669fa4d97a09bc295603b496"); + public static readonly MongoId RECEIVER_DESERT_EAGLE_L6_PISTOL_SLIDE_WTS = new MongoId("669fa5271bd4416eaa09b3ce"); + public static readonly MongoId RECEIVER_DESERT_EAGLE_MK_XIX_PISTOL_SLIDE = new MongoId("668fe60b56984d93550462c6"); + public static readonly MongoId RECEIVER_DO_NOT_USEAI_AXMC_762X51MM_CHASSIS = new MongoId("628120415631d45211793c99"); + public static readonly MongoId RECEIVER_FAL_STANDARD_DUST_COVER = new MongoId("5b7d6c105acfc40015109a5f"); + public static readonly MongoId RECEIVER_FN_FIVESEVEN_MK2_PISTOL_SLIDE = new MongoId("5d3eb44aa4b93650d64e4979"); + public static readonly MongoId RECEIVER_FN_P90_57X28_UPPER = new MongoId("5cc70102e4a949035e43ba74"); + public static readonly MongoId RECEIVER_FN_P90_EFFEN_90_57X28_UPPER = new MongoId("5cc700ede4a949033c734315"); + public static readonly MongoId RECEIVER_FN_PS90_57X28_UPPER = new MongoId("5cf7acfcd7f00c1084477cf2"); + public static readonly MongoId RECEIVER_FN_SCARH_762X51_UPPER = new MongoId("6165adcdd3a39d50044c120f"); + public static readonly MongoId RECEIVER_FN_SCARH_762X51_UPPER_RECEIVER_FDE = new MongoId("6165aeedfaa1272e431521e3"); + public static readonly MongoId RECEIVER_FN_SCARL_556X45_UPPER = new MongoId("618405198004cc50514c3594"); + public static readonly MongoId RECEIVER_FN_SCARL_556X45_UPPER_RECEIVER_FDE = new MongoId("618426d96c780c1e710c9b9f"); + public static readonly MongoId RECEIVER_GLOCK_17_MOS_PISTOL_SLIDE = new MongoId("615d8dbd290d254f5e6b2ed6"); + public static readonly MongoId RECEIVER_GLOCK_17_PISTOL_SLIDE = new MongoId("5a6f5e048dc32e00094b97da"); + public static readonly MongoId RECEIVER_GLOCK_18C_PISTOL_SLIDE = new MongoId("5b1faa0f5acfc40dc528aeb5"); + public static readonly MongoId RECEIVER_GLOCK_19X_PISTOL_SLIDE = new MongoId("63075cc5962d0247b029dc2a"); + public static readonly MongoId RECEIVER_GLOCK_LONE_WOLF_ALPHAWOLF_CUSTOM_PISTOL_SLIDE = new MongoId("5a7033908dc32e000a311392"); + public static readonly MongoId RECEIVER_GLOCK_LONE_WOLF_ALPHAWOLF_PISTOL_SLIDE = new MongoId("5a702d198dc32e000b452fc3"); + public static readonly MongoId RECEIVER_GLOCK_MOTO_CUT_PISTOL_SLIDE = new MongoId("5a9685b1a2750c0032157104"); + public static readonly MongoId RECEIVER_GLOCK_POLYMER80_PS9_PISTOL_SLIDE = new MongoId("5a7afa25e899ef00135e31b0"); + public static readonly MongoId RECEIVER_GLOCK_VIPER_CUT_PISTOL_SLIDE = new MongoId("5a6f5f078dc32e00094b97dd"); + public static readonly MongoId RECEIVER_GLOCK_ZEV_TECH_HEX_GEN3_RMR_PISTOL_SLIDE = new MongoId("5a71e22f8dc32e00094b97f4"); + public static readonly MongoId RECEIVER_GLOCK_ZEV_TECH_HEX_SPARTAN_RMR_PISTOL_SLIDE = new MongoId("5a71e4f48dc32e001207fb26"); + public static readonly MongoId RECEIVER_HK_416A5_556X45_UPPER = new MongoId("5bb20d53d4351e4502010a69"); + public static readonly MongoId RECEIVER_HK_G28_762X51_UPPER = new MongoId("61713a8fd92c473c770214a4"); + public static readonly MongoId RECEIVER_HK_MP5_9X19_UPPER = new MongoId("5926c0df86f77462f647f764"); + public static readonly MongoId RECEIVER_HK_MP5K_9X19_UPPER = new MongoId("5d2f261548f03576f500e7b7"); + public static readonly MongoId RECEIVER_HK_MP5SD_9X19_UPPER = new MongoId("5926f2e086f7745aae644231"); + public static readonly MongoId RECEIVER_HK_USP_45_ACP_PISTOL_SLIDE = new MongoId("6193d382ed0429009f543e65"); + public static readonly MongoId RECEIVER_HK_USP_ELITE_45_ACP_PISTOL_SLIDE = new MongoId("6194f5d418a3974e5e7421ef"); + public static readonly MongoId RECEIVER_HK_USP_EXPERT_45_ACP_PISTOL_SLIDE = new MongoId("6194f5722d2c397d6600348f"); + public static readonly MongoId RECEIVER_HK_USP_MATCH_45_ACP_PISTOL_SLIDE = new MongoId("6194f5a318a3974e5e7421eb"); + public static readonly MongoId RECEIVER_HK_USP_TACTICAL_45_ACP_PISTOL_SLIDE = new MongoId("6194f41f9fb0c665d5490e75"); + public static readonly MongoId RECEIVER_M1911A1_PISTOL_SLIDE = new MongoId("5e81edc13397a21db957f6a1"); + public static readonly MongoId RECEIVER_M45A1_PISTOL_SLIDE = new MongoId("5f3e7823ddc4f03b010e2045"); + public static readonly MongoId RECEIVER_M4A1_556X45_UPPER = new MongoId("55d355e64bdc2d962f8b4569"); + public static readonly MongoId RECEIVER_M9A3_PISTOL_SLIDE = new MongoId("5cadc55cae921500103bb3be"); + public static readonly MongoId RECEIVER_MCX_GEN1_300_BLK_UPPER = new MongoId("5fbcc3e4d6fa9c00c571bb58"); + public static readonly MongoId RECEIVER_MCXSPEAR_68X51_UPPER = new MongoId("6529119424cbe3c74a05e5bb"); + public static readonly MongoId RECEIVER_MK18_338_LM_UPPER = new MongoId("5fc278107283c4046c581489"); + public static readonly MongoId RECEIVER_MK47_RESOLUTE_762X39_UPPER = new MongoId("606587a88900dc2d9a55b659"); + public static readonly MongoId RECEIVER_MOLOT_ARMS_AKMTYPE_DUST_COVER = new MongoId("59e6449086f7746c9f75e822"); + public static readonly MongoId RECEIVER_MP9_9X19_UPPER = new MongoId("5e0090f7e9dc277128008b93"); + public static readonly MongoId RECEIVER_MP9N_9X19_UPPER = new MongoId("5de8e67c4a9f347bc92edbd7"); + public static readonly MongoId RECEIVER_MPX_GEN1_9X19_UPPER = new MongoId("5894a5b586f77426d2590767"); + public static readonly MongoId RECEIVER_OPSKS_DUST_COVER = new MongoId("634f06262e5def262d0b30ca"); + public static readonly MongoId RECEIVER_P226_AXELSON_TACTICAL_MK25_PISTOL_SLIDE = new MongoId("5bffe7c50db834001d23ece1"); + public static readonly MongoId RECEIVER_P226_EMPEROR_SCORPION_PISTOL_SLIDE = new MongoId("5c010a700db834001d23ef5d"); + public static readonly MongoId RECEIVER_P226_LEGION_FULL_SIZE_PISTOL_SLIDE = new MongoId("5c0125fc0db834001a669aa3"); + public static readonly MongoId RECEIVER_P226_STAINLESS_ELITE_PISTOL_SLIDE = new MongoId("5c0009510db834001966907f"); + public static readonly MongoId RECEIVER_P226R_MK25_PISTOL_SLIDE = new MongoId("56d5a407d2720bb3418b456b"); + public static readonly MongoId RECEIVER_PL15_PISTOL_SLIDE = new MongoId("60228924961b8d75ee233c32"); + public static readonly MongoId RECEIVER_PM_PISTOL_SLIDE = new MongoId("6374a822e629013b9c0645c8"); + public static readonly MongoId RECEIVER_PP1901_VITYAZ_DUST_COVER = new MongoId("59985a8086f77414ec448d1a"); + public static readonly MongoId RECEIVER_PP1901_VITYAZSN_DUST_COVER = new MongoId("59985a6c86f77414ec448d17"); + public static readonly MongoId RECEIVER_PPSH41_DUST_COVER = new MongoId("5ea03e5009aa976f2e7a514b"); + public static readonly MongoId RECEIVER_RD704_DUST_COVER = new MongoId("628a665a86cbd9750d2ff5e5"); + public static readonly MongoId RECEIVER_RPK16_DUST_COVER = new MongoId("5beec91a0db834001961942d"); + public static readonly MongoId RECEIVER_SA58_EXTREME_DUTY_DUST_COVER = new MongoId("5b099bb25acfc400186331e8"); + public static readonly MongoId RECEIVER_SAKO_TRG_M10_338_LM = new MongoId("673cb491280680de5e02ff36"); + public static readonly MongoId RECEIVER_SKS_DUST_COVER = new MongoId("634f05ca517ccc8a960fc748"); + public static readonly MongoId RECEIVER_SKS_LEAPERS_UTG_PRO_MTU017_RECEIVER_COVER_MOUNT = new MongoId("6415c694da439c6a97048b56"); + public static readonly MongoId RECEIVER_SOK12_DUST_COVER = new MongoId("57616c112459773cce774d66"); + public static readonly MongoId RECEIVER_SOK12_KIBA_ARMS_ZOMBIE_CUSTOM_DUST_COVER = new MongoId("676017fe8cfeeba9f707c8d6"); + public static readonly MongoId RECEIVER_SR25_762X51_UPPER = new MongoId("5df8e4080b92095fd441e594"); + public static readonly MongoId RECEIVER_SR2M_DUST_COVER = new MongoId("62e27a7865f0b1592a49e17b"); + public static readonly MongoId RECEIVER_STEYR_AUG_A3_556X45 = new MongoId("62e7c72df68e7a0676050c77"); + public static readonly MongoId RECEIVER_STEYR_AUG_A3_VLTOR_556X45 = new MongoId("67110d8d388bded67304ceb4"); + public static readonly MongoId RECEIVER_STM9_9X19_UPPER = new MongoId("602e63fb6335467b0c5ac94d"); + public static readonly MongoId RECEIVER_SVDS_CUSTOM_CUT_DUST_COVER = new MongoId("5dfce88fe9dc277128008b2e"); + public static readonly MongoId RECEIVER_SVDS_DUST_COVER = new MongoId("5c471bd12e221602b4129c3a"); + public static readonly MongoId RECEIVER_SVT_DUST_COVER = new MongoId("64119cdbdcf48d656f0aa272"); + public static readonly MongoId RECEIVER_TX15_556X45_LIGHTWEIGHT_UPPER = new MongoId("5d4405aaa4b9361e6a4e6bd3"); + public static readonly MongoId RECEIVER_UZI_PRO_DUST_COVER = new MongoId("6680326874b8f2050c0b9178"); + public static readonly MongoId RECEIVER_VPO101_DUST_COVER = new MongoId("5c503d0a2e221602b542b7ef"); + public static readonly MongoId RECEIVER_VSS_DUST_COVER = new MongoId("578395402459774a256959b5"); + public static readonly MongoId REPAIRKITS_BODY_ARMOR_REPAIR_KIT = new MongoId("591094e086f7747caa7bb2ef"); + public static readonly MongoId REPAIRKITS_WEAPON_REPAIR_KIT = new MongoId("5910968f86f77425cf569c32"); + public static readonly MongoId REVOLVER_CHIAPPA_RHINO_200DS_9X19 = new MongoId("624c2e8614da335f1e034d8c"); + public static readonly MongoId REVOLVER_CHIAPPA_RHINO_50DS_357 = new MongoId("61a4c8884f95bc3b2c5dc96f"); + public static readonly MongoId REVOLVER_MILKOR_M32A1_MSGL_40MM_GRENADE_LAUNCHER = new MongoId("6275303a9f372d6ea97f9ec7"); + public static readonly MongoId REVOLVER_MTS25512_12GA_SHOTGUN = new MongoId("60db29ce99594040e04c4a27"); public static readonly MongoId REVOLVER_RSH12_127X55 = new MongoId("633ec7c2a6918cb895019c6c"); public static readonly MongoId ROCKET_725_SHG2 = new MongoId("67446fdd752be02c220f27b3"); - public static readonly MongoId ROCKETLAUNCHER_RSHG2_725MM_ROCKET_LAUNCHER = new MongoId( - "676bf44c5539167c3603e869" - ); + public static readonly MongoId ROCKETLAUNCHER_RSHG2_725MM_ROCKET_LAUNCHER = new MongoId("676bf44c5539167c3603e869"); public static readonly MongoId SECURE_CONTAINER_ALPHA = new MongoId("544a11ac4bdc2d470e8b456a"); public static readonly MongoId SECURE_CONTAINER_BETA = new MongoId("5857a8b324597729ab0a0e7d"); public static readonly MongoId SECURE_CONTAINER_BOSS = new MongoId("5c0a794586f77461c458f892"); - public static readonly MongoId SECURE_CONTAINER_EPSILON = new MongoId( - "59db794186f77448bc595262" - ); + public static readonly MongoId SECURE_CONTAINER_EPSILON = new MongoId("59db794186f77448bc595262"); public static readonly MongoId SECURE_CONTAINER_GAMMA = new MongoId("5857a8bc2459772bad15db29"); - public static readonly MongoId SECURE_CONTAINER_GAMMA_TUE = new MongoId( - "665ee77ccf2d642e98220bca" - ); + public static readonly MongoId SECURE_CONTAINER_GAMMA_TUE = new MongoId("665ee77ccf2d642e98220bca"); public static readonly MongoId SECURE_CONTAINER_KAPPA = new MongoId("5c093ca986f7740a1867ab12"); - public static readonly MongoId SECURE_CONTAINER_KAPPA_DESECRATED = new MongoId( - "676008db84e242067d0dc4c9" - ); + public static readonly MongoId SECURE_CONTAINER_KAPPA_DESECRATED = new MongoId("676008db84e242067d0dc4c9"); public static readonly MongoId SECURE_CONTAINER_THETA = new MongoId("664a55d84a90fc2c8a6305c9"); - public static readonly MongoId SECURE_DEVELOPER_SECURE_CONTAINER = new MongoId( - "5c0a5a5986f77476aa30ae64" - ); - public static readonly MongoId SECURE_TOURNAMENT_SECURED_CONTAINER = new MongoId( - "64f6f4c5911bcdfe8b03b0dc" - ); + public static readonly MongoId SECURE_DEVELOPER_SECURE_CONTAINER = new MongoId("5c0a5a5986f77476aa30ae64"); + public static readonly MongoId SECURE_TOURNAMENT_SECURED_CONTAINER = new MongoId("64f6f4c5911bcdfe8b03b0dc"); public static readonly MongoId SECURE_WAIST_POUCH = new MongoId("5732ee6a24597719ae0c0281"); - public static readonly MongoId SHOTGUN_BENELLI_M3_SUPER_90_12GA_DUALMODE = new MongoId( - "6259b864ebedf17603599e88" - ); - public static readonly MongoId SHOTGUN_MOSSBERG_590A1_12GA_PUMPACTION = new MongoId( - "5e870397991fd70db46995c8" - ); - public static readonly MongoId SHOTGUN_MP133_12GA_PUMPACTION = new MongoId( - "54491c4f4bdc2db1078b4568" - ); - public static readonly MongoId SHOTGUN_MP153_12GA_SEMIAUTOMATIC = new MongoId( - "56dee2bdd2720bc8328b4567" - ); - public static readonly MongoId SHOTGUN_MP155_12GA_SEMIAUTOMATIC = new MongoId( - "606dae0ab0e443224b421bb7" - ); - public static readonly MongoId SHOTGUN_MP18_762X54R_SINGLESHOT_RIFLE = new MongoId( - "61f7c9e189e6fb1a5e3ea78d" - ); - public static readonly MongoId SHOTGUN_MP43_12GA_SAWEDOFF_DOUBLEBARREL = new MongoId( - "64748cb8de82c85eaf0a273a" - ); - public static readonly MongoId SHOTGUN_MP431C_12GA_DOUBLEBARREL = new MongoId( - "5580223e4bdc2d1c128b457f" - ); - public static readonly MongoId SHOTGUN_MPS_AUTO_ASSAULT12_GEN_1_12GA_AUTOMATIC = new MongoId( - "66ffa9b66e19cc902401c5e8" - ); - public static readonly MongoId SHOTGUN_MPS_AUTO_ASSAULT12_GEN_2_12GA_AUTOMATIC = new MongoId( - "67124dcfa3541f2a1f0e788b" - ); - public static readonly MongoId SHOTGUN_REMINGTON_MODEL_870_12GA_PUMPACTION = new MongoId( - "5a7828548dc32e5a9c28b516" - ); - public static readonly MongoId SHOTGUN_SAIGA12K_12GA_AUTOMATIC = new MongoId( - "674fe9a75e51f1c47c04ec23" - ); - public static readonly MongoId SHOTGUN_SAIGA12K_VER10_12GA_SEMIAUTOMATIC = new MongoId( - "576165642459773c7a400233" - ); - public static readonly MongoId SHOTGUN_TOZ_KS23M_23X75MM_PUMPACTION = new MongoId( - "5e848cc2988a8701445df1e8" - ); - public static readonly MongoId SHOTGUN_TOZ106_20GA_BOLTACTION = new MongoId( - "5a38e6bac4a2826c6e06d79b" - ); - public static readonly MongoId SIGNALPISTOL_ZID_SP81_26X75_SIGNAL_PISTOL = new MongoId( - "620109578d82e67e7911abf2" - ); - public static readonly MongoId SILENCER_9A91_9X39_SOUND_SUPPRESSOR = new MongoId( - "64527a3a7da7133e5a09ca99" - ); - public static readonly MongoId SILENCER_AAC_762SDN6_MULTICALIBER_SOUND_SUPPRESSOR = new MongoId( - "5a34fe59c4a282000b1521a2" - ); - public static readonly MongoId SILENCER_AAC_ILLUSION_9_9X19_SOUND_SUPPRESSOR = new MongoId( - "5c7e8fab2e22165df16b889b" - ); - public static readonly MongoId SILENCER_AI_338_LM_TACTICAL_SOUND_MODERATOR = new MongoId( - "62811fa609427b40ab14e765" - ); - public static readonly MongoId SILENCER_AK_HEXAGON_DTKP_MK2_762X39_SOUND_SUPPRESSOR = - new MongoId("5e208b9842457a4a7a33d074"); - public static readonly MongoId SILENCER_AK12_545X39_SOUND_SUPPRESSOR = new MongoId( - "64c196ad26a15b84aa07132f" - ); - public static readonly MongoId SILENCER_AK74_HEXAGON_545X39_SOUND_SUPPRESSOR = new MongoId( - "593d493f86f7745e6b2ceb22" - ); - public static readonly MongoId SILENCER_AK74_HEXAGON_WAFFLEMAKER_545X39_SOUND_SUPPRESSOR = - new MongoId("615d8f8567085e45ef1409ca"); - public static readonly MongoId SILENCER_AK74_TGPA_545X39_SOUND_SUPPRESSOR = new MongoId( - "564caa3d4bdc2d17108b458e" - ); - public static readonly MongoId SILENCER_AKM_HEXAGON_762X39_SOUND_SUPPRESSOR = new MongoId( - "593d489686f7745c6255d58a" - ); - public static readonly MongoId SILENCER_AKM_PBS1_762X39_SOUND_SUPPRESSOR = new MongoId( - "5a0d63621526d8dba31fe3bf" - ); - public static readonly MongoId SILENCER_AKM_ZENIT_DTK4M_762X39_SOUND_SUPPRESSOR = new MongoId( - "59fb257e86f7742981561852" - ); - public static readonly MongoId SILENCER_AKS74U_PBS4_545X39_SOUND_SUPPRESSOR = new MongoId( - "57ffb0e42459777d047111c5" - ); - public static readonly MongoId SILENCER_ALPHA_DOG_ALPHA_9_9X19_SOUND_SUPPRESSOR = new MongoId( - "5a33a8ebc4a282000c5a950d" - ); - public static readonly MongoId SILENCER_APB_9X18PM_SOUND_SUPPRESSOR = new MongoId( - "5abcc328d8ce8700194394f3" - ); - public static readonly MongoId SILENCER_AR15_GRIFFIN_ARMAMENT_M4SDK_556X45_SOUND_SUPPRESSOR = - new MongoId("638612b607dfed1ccb7206ba"); - public static readonly MongoId SILENCER_AS_VAL_9X39_INTEGRAL_BARRELSUPPRESSOR = new MongoId( - "57c44dd02459772d2e0ae249" - ); - public static readonly MongoId SILENCER_ASE_UTRA_SL7IBL_BORELOCK_338_LM_SOUND_SUPPRESSOR = - new MongoId("673f0a38259f5945d70e43a6"); - public static readonly MongoId SILENCER_ASH12_127X55_SOUND_SUPPRESSOR = new MongoId( - "5caf187cae92157c28402e43" - ); - public static readonly MongoId SILENCER_AWC_THOR_PSR_XL_MULTICALIBER_SOUND_SUPPRESSOR = - new MongoId("63877c99e785640d436458ea"); - public static readonly MongoId SILENCER_CGS_HEKATE_DT_338_LM_SOUND_SUPPRESSOR = new MongoId( - "673f0b36536d64240f01acd6" - ); - public static readonly MongoId SILENCER_CO_HYBRID_46_MULTICALIBER_SOUND_SUPPRESSOR = - new MongoId("59bffbb386f77435b379b9c2"); - public static readonly MongoId SILENCER_CO_OMEGA_45K_45_ACP_SOUND_SUPPRESSOR = new MongoId( - "5fc4b9b17283c4046c5814d7" - ); - public static readonly MongoId SILENCER_CO_OSPREY_9_9X19_SOUND_SUPPRESSOR = new MongoId( - "5a32a064c4a28200741e22de" - ); - public static readonly MongoId SILENCER_CO_SAKER_ASR_556_556X45_SOUND_SUPPRESSOR = new MongoId( - "60926df0132d4d12c81fd9df" - ); - public static readonly MongoId SILENCER_CO_SALVO_12_12GA_SOUND_SUPPRESSOR = new MongoId( - "5b363dd25acfc4001a598fd2" - ); - public static readonly MongoId SILENCER_CO_SPARROW_22_SOUND_SUPPRESSOR = new MongoId( - "54490a4d4bdc2dbc018b4573" - ); - public static readonly MongoId SILENCER_DANIEL_DEFENSE_WAVE_QD_SOUND_SUPPRESSOR = new MongoId( - "5cff9e84d7ad1a049e54ed55" - ); - public static readonly MongoId SILENCER_FN_P90_ATTENUATOR_57X28_SOUND_SUPPRESSOR = new MongoId( - "5cebec00d7f00c065c53522a" - ); - public static readonly MongoId SILENCER_GEMTECH_ONE_MULTICALIBER_SOUND_SUPPRESSOR = new MongoId( - "5c7955c22e221644f31bfd5e" - ); - public static readonly MongoId SILENCER_GEMTECH_SFN57_57X28_SOUND_SUPPRESSOR = new MongoId( - "5d3ef698a4b9361182109872" - ); - public static readonly MongoId SILENCER_GLOCK_9X19_FISCHER_DEVELOPMENT_FD917_SOUND_SUPPRESSOR = - new MongoId("5a7ad74e51dfba0015068f45"); - public static readonly MongoId SILENCER_HEXAGON_12K_12GA_SOUND_SUPPRESSOR = new MongoId( - "59c0ec5b86f77435b128bfca" - ); - public static readonly MongoId SILENCER_HK_G28_BT_QD_762X51_SOUND_SUPPRESSOR = new MongoId( - "6171367e1cb55961fa0fdb36" - ); - public static readonly MongoId SILENCER_HK_MP5SD_9X19_SOUND_SUPPRESSOR = new MongoId( - "5926d33d86f77410de68ebc0" - ); - public static readonly MongoId SILENCER_HK_MP7_BT_ROTEX_2_46X30_SOUND_SUPPRESSOR = new MongoId( - "5ba26ae8d4351e00367f9bdb" - ); - public static readonly MongoId SILENCER_HK_UMP_BT_OEM_45_ACP_SOUND_SUPPRESSOR = new MongoId( - "6130c4d51cb55961fa0fd49f" - ); - public static readonly MongoId SILENCER_KAC_PRSQDC_762X51_SOUND_SUPPRESSOR = new MongoId( - "5dfa3d2b0dee1b22f862eade" - ); - public static readonly MongoId SILENCER_KAC_QDC_556X45_SOUND_SUPPRESSOR = new MongoId( - "626673016f1edc06f30cf6d5" - ); - public static readonly MongoId SILENCER_KAC_QDC_65X35_SOUND_SUPPRESSOR = new MongoId( - "55d617094bdc2d89028b4568" - ); - public static readonly MongoId SILENCER_KAC_QDSS_NT4_556X45_SOUND_SUPPRESSOR_BLACK = - new MongoId("57da93632459771cb65bf83f"); - public static readonly MongoId SILENCER_KAC_QDSS_NT4_556X45_SOUND_SUPPRESSOR_FDE = new MongoId( - "57dbb57e2459774673234890" - ); - public static readonly MongoId SILENCER_MCXSPEAR_SLX68MGQD_68X51_SOUND_SUPPRESSOR = new MongoId( - "652911e650dc782999054b9d" - ); - public static readonly MongoId SILENCER_MOSIN_RIFLE_BRAMIT_762X54R_SOUND_SUPPRESSOR = - new MongoId("5b86a0e586f7745b600ccb23"); - public static readonly MongoId SILENCER_MP9_9X19_SOUND_SUPPRESSOR = new MongoId( - "5de8f2d5b74cd90030650c72" - ); - public static readonly MongoId SILENCER_MPX_9X19_RONIN_ARMS_12_INCH_SD_SUPPRESSOR = new MongoId( - "676149d8e889e1972605d6be" - ); - public static readonly MongoId SILENCER_MPX_9X19_RONIN_ARMS_8_INCH_SD_SUPPRESSOR = new MongoId( - "676149c5062e6212f5058c36" - ); - public static readonly MongoId SILENCER_MPXSD_9X19_INTEGRATED_SOUND_SUPPRESSOR = new MongoId( - "58aeac1b86f77457c419f475" - ); - public static readonly MongoId SILENCER_PB_9X18PM_SOUND_SUPPRESSOR = new MongoId( - "56e05b06d2720bb2668b4586" - ); - public static readonly MongoId SILENCER_PL15_9X19_SOUND_SUPPRESSOR = new MongoId( - "602a97060ddce744014caf6f" - ); - public static readonly MongoId SILENCER_PP1901_VITYAZ_9X19_SOUND_SUPPRESSOR = new MongoId( - "59bfc5c886f7743bf6794e62" - ); - public static readonly MongoId SILENCER_PP9101_KEDRB_9X18PM_SOUND_SUPPRESSOR = new MongoId( - "57f3c8cc2459773ec4480328" - ); - public static readonly MongoId SILENCER_ROTOR_43_366_TKM_SOUND_SUPPRESSOR = new MongoId( - "5a9fbb74a2750c0032157181" - ); - public static readonly MongoId SILENCER_ROTOR_43_556X45_SOUND_SUPPRESSOR = new MongoId( - "5a9fbb84a2750c00137fa685" - ); - public static readonly MongoId SILENCER_ROTOR_43_762X39_SOUND_SUPPRESSOR = new MongoId( - "5a9fbacda2750c00141e080f" - ); - public static readonly MongoId SILENCER_ROTOR_43_762X54R_SOUND_SUPPRESSOR = new MongoId( - "5e01ea19e9dc277128008c0b" - ); - public static readonly MongoId SILENCER_ROTOR_43_9X19_SOUND_SUPPRESSOR = new MongoId( - "5a9fb739a2750c003215717f" - ); - public static readonly MongoId SILENCER_SAKO_TRG_PGM_PRECISION_338_LM_SOUND_SUPPRESSOR = - new MongoId("673f0a9370a3ddcf0d0ee0b8"); - public static readonly MongoId SILENCER_SIG_SAUER_SRD762QD_762X51_SOUND_SUPPRESSOR = - new MongoId("5fbe760793164a5b6278efc8"); - public static readonly MongoId SILENCER_SIG_SAUER_SRD762TI_762X51_SOUND_SUPPRESSOR = - new MongoId("5fbe7618d6fa9c00c571bb6c"); - public static readonly MongoId SILENCER_SIG_SAUER_SRD9_9X19_SOUND_SUPPRESSOR = new MongoId( - "5c6165902e22160010261b28" - ); - public static readonly MongoId SILENCER_SKS_HEXAGON_762X39_SOUND_SUPPRESSOR = new MongoId( - "593d490386f7745ee97a1555" - ); - public static readonly MongoId SILENCER_SR1MP_9X21_SOUND_SUPPRESSOR = new MongoId( - "5a27b6bec4a282000e496f78" - ); - public static readonly MongoId SILENCER_SR2M_9X21_SV1381_SOUND_SUPPRESSOR = new MongoId( - "62e2a7138e1ac9380579c122" - ); - public static readonly MongoId SILENCER_SR3M_9X39_SOUND_SUPPRESSOR = new MongoId( - "65144ff50e00edc79406836f" - ); - public static readonly MongoId SILENCER_STEYR_AUG_ASE_UTRA_S_SERIES_SL7I_556X45_SOUND_SUPPRESSOR = - new MongoId("634eba08f69c710e0108d386"); - public static readonly MongoId SILENCER_STEYR_AUG_RELFEX_T4AUG_RANGER_556X45_SOUND_SUPPRESSOR = - new MongoId("630f2982cdb9e392db0cbcc7"); - public static readonly MongoId SILENCER_SUREFIRE_SOCOM556MINI_MONSTER_556X45_SOUND_SUPPRESSOR = - new MongoId("55d6190f4bdc2d87028b4567"); - public static readonly MongoId SILENCER_SUREFIRE_SOCOM556MONSTER_556X45_SOUND_SUPPRESSOR = - new MongoId("55d614004bdc2d86028b4568"); - public static readonly MongoId SILENCER_SUREFIRE_SOCOM556RC2_556X45_SOUND_SUPPRESSOR = - new MongoId("5ea17bbc09aa976f2e7a51cd"); - public static readonly MongoId SILENCER_SV98_762X54R_SOUND_SUPPRESSOR = new MongoId( - "5c4eecc32e221602b412b440" - ); - public static readonly MongoId SILENCER_THUNDER_BEAST_ARMS_ULTRA_5_SOUND_SUPPRESSOR = - new MongoId("5d44064fa4b9361e4f6eb8b5"); - public static readonly MongoId SILENCER_TT_762X25_MAKESHIFT_SOUND_SUPPRESSOR = new MongoId( - "571a28e524597720b4066567" - ); - public static readonly MongoId SILENCER_UZI_9X19_SOUND_SUPPRESSOR = new MongoId( - "66993733f74fef4dfd0b04ff" - ); - public static readonly MongoId SILENCER_VPO101_ROTOR_43_762X51_SOUND_SUPPRESSOR = new MongoId( - "5f63407e1b231926f2329f15" - ); - public static readonly MongoId SILENCER_VSS_9X39_INTEGRAL_BARRELSUPPRESSOR = new MongoId( - "57838c962459774a1651ec63" - ); - public static readonly MongoId SMG_BT_MP9_9X19_SUBMACHINE_GUN = new MongoId( - "5e00903ae9dc277128008b87" - ); - public static readonly MongoId SMG_BT_MP9N_9X19_SUBMACHINE_GUN = new MongoId( - "5de7bd7bfd6b4e6e2276dc25" - ); - public static readonly MongoId SMG_FN_P90_57X28_SUBMACHINE_GUN = new MongoId( - "5cc82d76e24e8d00134b4b83" - ); - public static readonly MongoId SMG_HK_MP5_9X19_SUBMACHINE_GUN_NAVY_3_ROUND_BURST = new MongoId( - "5926bb2186f7744b1c6c6e60" - ); - public static readonly MongoId SMG_HK_MP5K_9X19_SUBMACHINE_GUN = new MongoId( - "5d2f0d8048f0356c925bc3b0" - ); - public static readonly MongoId SMG_HK_MP7A1_46X30_SUBMACHINE_GUN = new MongoId( - "5ba26383d4351e00334c93d9" - ); - public static readonly MongoId SMG_HK_MP7A2_46X30_SUBMACHINE_GUN = new MongoId( - "5bd70322209c4d00d7167b8f" - ); - public static readonly MongoId SMG_HK_UMP_45_ACP_SUBMACHINE_GUN = new MongoId( - "5fc3e272f8b6a877a729eac5" - ); - public static readonly MongoId SMG_IWI_UZI_9X19_SUBMACHINE_GUN = new MongoId( - "66992b349950f5f4cd06029f" - ); - public static readonly MongoId SMG_IWI_UZI_PRO_PISTOL_9X19_SUBMACHINE_GUN = new MongoId( - "6680304edadb7aa61d00cef0" - ); - public static readonly MongoId SMG_IWI_UZI_PRO_SMG_9X19_SUBMACHINE_GUN = new MongoId( - "668e71a8dadf42204c032ce1" - ); - public static readonly MongoId SMG_PP1901_VITYAZ_9X19_SUBMACHINE_GUN = new MongoId( - "59984ab886f7743e98271174" - ); - public static readonly MongoId SMG_PP9_KLIN_9X18PMM_SUBMACHINE_GUN = new MongoId( - "57f4c844245977379d5c14d1" - ); - public static readonly MongoId SMG_PP91_KEDR_9X18PM_SUBMACHINE_GUN = new MongoId( - "57d14d2524597714373db789" - ); - public static readonly MongoId SMG_PP9101_KEDRB_9X18PM_SUBMACHINE_GUN = new MongoId( - "57f3c6bd24597738e730fa2f" - ); - public static readonly MongoId SMG_PPSH41_762X25_SUBMACHINE_GUN = new MongoId( - "5ea03f7400685063ec28bfa8" - ); - public static readonly MongoId SMG_SAIGA9_9X19_CARBINE = new MongoId( - "59f9cabd86f7743a10721f46" - ); - public static readonly MongoId SMG_SIG_MPX_9X19_SUBMACHINE_GUN = new MongoId( - "58948c8e86f77409493f7266" - ); - public static readonly MongoId SMG_SOYUZTM_STM9_GEN2_9X19_CARBINE = new MongoId( - "60339954d62c9b14ed777c06" - ); - public static readonly MongoId SMG_SR2M_VERESK_9X21_SUBMACHINE_GUN = new MongoId( - "62e14904c2699c0ec93adc47" - ); - public static readonly MongoId SMG_TDI_KRISS_VECTOR_GEN2_45_ACP_SUBMACHINE_GUN = new MongoId( - "5fb64bc92b1b027b1f50bcf2" - ); - public static readonly MongoId SMG_TDI_KRISS_VECTOR_GEN2_9X19_SUBMACHINE_GUN = new MongoId( - "5fc3f2d5900b1d5091531e57" - ); - public static readonly MongoId SNIPERRIFLE_ACCURACY_INTERNATIONAL_AXMC_338_LM_BOLTACTION_SNIPER_RIFLE = - new MongoId("627e14b21713922ded6f2c15"); - public static readonly MongoId SNIPERRIFLE_LOBAEV_ARMS_DVL10_762X51_BOLTACTION_SNIPER_RIFLE = - new MongoId("588892092459774ac91d4b11"); - public static readonly MongoId SNIPERRIFLE_MOLOT_ARMS_VPO215_GORNOSTAY_366_TKM_BOLTACTION_RIFLE = - new MongoId("5de652c31b7e3716273428be"); - public static readonly MongoId SNIPERRIFLE_MOSIN_762X54R_BOLTACTION_RIFLE_INFANTRY = - new MongoId("5bfd297f0db834001a669119"); - public static readonly MongoId SNIPERRIFLE_MOSIN_762X54R_BOLTACTION_RIFLE_SNIPER = new MongoId( - "5ae08f0a5acfc408fb1398a1" - ); - public static readonly MongoId SNIPERRIFLE_ORSIS_T5000M_762X51_BOLTACTION_SNIPER_RIFLE = - new MongoId("5df24cf80dee1b22f862e9bc"); - public static readonly MongoId SNIPERRIFLE_REMINGTON_MODEL_700_762X51_BOLTACTION_SNIPER_RIFLE = - new MongoId("5bfea6e90db834001b7347f3"); - public static readonly MongoId SNIPERRIFLE_SAKO_TRG_M10_338_LM_BOLTACTION_SNIPER_RIFLE = - new MongoId("673cab3e03c6a20581028bc1"); - public static readonly MongoId SNIPERRIFLE_SV98_762X54R_BOLTACTION_SNIPER_RIFLE = new MongoId( - "55801eed4bdc2d89578b4588" - ); - public static readonly MongoId SORTINGTABLE_SORTING_TABLE = new MongoId( - "602543c13fee350cd564d032" - ); - public static readonly MongoId SPECIALSCOPE_ARMASIGHT_VULCAN_MG_35X_BRAVO_NIGHT_VISION_SCOPE = - new MongoId("5b3b6e495acfc4330140bd88"); - public static readonly MongoId SPECIALSCOPE_ARMASIGHT_ZEUSPRO_640_28X50_30HZ_THERMAL_SCOPE = - new MongoId("63fc44e2429a8a166c7f61e6"); - public static readonly MongoId SPECIALSCOPE_CYCLONE_SHAKHIN_37X_THERMAL_SCOPE = new MongoId( - "67641b461c2eb66ade05dba6" - ); - public static readonly MongoId SPECIALSCOPE_FLIR_RS32_2259X_35MM_60HZ_THERMAL_RIFLESCOPE = - new MongoId("5d1b5e94d7ad1a2b865a96b0"); - public static readonly MongoId SPECIALSCOPE_MP155_ULTIMA_THERMAL_CAMERA = new MongoId( - "606f2696f2cb2e02a42aceb1" - ); - public static readonly MongoId SPECIALSCOPE_NSPUM_35X_DOVETAIL_NIGHT_VISION_SCOPE = new MongoId( - "5a7c74b3e899ef0014332c29" - ); - public static readonly MongoId SPECIALSCOPE_SIG_SAUER_ECHO1_12X30MM_30HZ_THERMAL_REFLEX_SCOPE = - new MongoId("6478641c19d732620e045e17"); - public static readonly MongoId SPECIALSCOPE_TORREY_PINES_LOGIC_T12W_30HZ_THERMAL_REFLEX_SIGHT = - new MongoId("609bab8b455afd752b2e6138"); - public static readonly MongoId SPECIALSCOPE_TRIJICON_REAPIR_THERMAL_SCOPE = new MongoId( - "5a1eaa87fcdbcb001865f75e" - ); - public static readonly MongoId SPECITEM_IMP_MINE_DETECTOR = new MongoId( - "5af056f186f7746da511291f" - ); + public static readonly MongoId SHOTGUN_BENELLI_M3_SUPER_90_12GA_DUALMODE = new MongoId("6259b864ebedf17603599e88"); + public static readonly MongoId SHOTGUN_MOSSBERG_590A1_12GA_PUMPACTION = new MongoId("5e870397991fd70db46995c8"); + public static readonly MongoId SHOTGUN_MP133_12GA_PUMPACTION = new MongoId("54491c4f4bdc2db1078b4568"); + public static readonly MongoId SHOTGUN_MP153_12GA_SEMIAUTOMATIC = new MongoId("56dee2bdd2720bc8328b4567"); + public static readonly MongoId SHOTGUN_MP155_12GA_SEMIAUTOMATIC = new MongoId("606dae0ab0e443224b421bb7"); + public static readonly MongoId SHOTGUN_MP18_762X54R_SINGLESHOT_RIFLE = new MongoId("61f7c9e189e6fb1a5e3ea78d"); + public static readonly MongoId SHOTGUN_MP43_12GA_SAWEDOFF_DOUBLEBARREL = new MongoId("64748cb8de82c85eaf0a273a"); + public static readonly MongoId SHOTGUN_MP431C_12GA_DOUBLEBARREL = new MongoId("5580223e4bdc2d1c128b457f"); + public static readonly MongoId SHOTGUN_MPS_AUTO_ASSAULT12_GEN_1_12GA_AUTOMATIC = new MongoId("66ffa9b66e19cc902401c5e8"); + public static readonly MongoId SHOTGUN_MPS_AUTO_ASSAULT12_GEN_2_12GA_AUTOMATIC = new MongoId("67124dcfa3541f2a1f0e788b"); + public static readonly MongoId SHOTGUN_REMINGTON_MODEL_870_12GA_PUMPACTION = new MongoId("5a7828548dc32e5a9c28b516"); + public static readonly MongoId SHOTGUN_SAIGA12K_12GA_AUTOMATIC = new MongoId("674fe9a75e51f1c47c04ec23"); + public static readonly MongoId SHOTGUN_SAIGA12K_VER10_12GA_SEMIAUTOMATIC = new MongoId("576165642459773c7a400233"); + public static readonly MongoId SHOTGUN_TOZ_KS23M_23X75MM_PUMPACTION = new MongoId("5e848cc2988a8701445df1e8"); + public static readonly MongoId SHOTGUN_TOZ106_20GA_BOLTACTION = new MongoId("5a38e6bac4a2826c6e06d79b"); + public static readonly MongoId SIGNALPISTOL_ZID_SP81_26X75_SIGNAL_PISTOL = new MongoId("620109578d82e67e7911abf2"); + public static readonly MongoId SILENCER_9A91_9X39_SOUND_SUPPRESSOR = new MongoId("64527a3a7da7133e5a09ca99"); + public static readonly MongoId SILENCER_AAC_762SDN6_MULTICALIBER_SOUND_SUPPRESSOR = new MongoId("5a34fe59c4a282000b1521a2"); + public static readonly MongoId SILENCER_AAC_ILLUSION_9_9X19_SOUND_SUPPRESSOR = new MongoId("5c7e8fab2e22165df16b889b"); + public static readonly MongoId SILENCER_AI_338_LM_TACTICAL_SOUND_MODERATOR = new MongoId("62811fa609427b40ab14e765"); + public static readonly MongoId SILENCER_AK_HEXAGON_DTKP_MK2_762X39_SOUND_SUPPRESSOR = new MongoId("5e208b9842457a4a7a33d074"); + public static readonly MongoId SILENCER_AK12_545X39_SOUND_SUPPRESSOR = new MongoId("64c196ad26a15b84aa07132f"); + public static readonly MongoId SILENCER_AK74_HEXAGON_545X39_SOUND_SUPPRESSOR = new MongoId("593d493f86f7745e6b2ceb22"); + public static readonly MongoId SILENCER_AK74_HEXAGON_WAFFLEMAKER_545X39_SOUND_SUPPRESSOR = new MongoId("615d8f8567085e45ef1409ca"); + public static readonly MongoId SILENCER_AK74_TGPA_545X39_SOUND_SUPPRESSOR = new MongoId("564caa3d4bdc2d17108b458e"); + public static readonly MongoId SILENCER_AKM_HEXAGON_762X39_SOUND_SUPPRESSOR = new MongoId("593d489686f7745c6255d58a"); + public static readonly MongoId SILENCER_AKM_PBS1_762X39_SOUND_SUPPRESSOR = new MongoId("5a0d63621526d8dba31fe3bf"); + public static readonly MongoId SILENCER_AKM_ZENIT_DTK4M_762X39_SOUND_SUPPRESSOR = new MongoId("59fb257e86f7742981561852"); + public static readonly MongoId SILENCER_AKS74U_PBS4_545X39_SOUND_SUPPRESSOR = new MongoId("57ffb0e42459777d047111c5"); + public static readonly MongoId SILENCER_ALPHA_DOG_ALPHA_9_9X19_SOUND_SUPPRESSOR = new MongoId("5a33a8ebc4a282000c5a950d"); + public static readonly MongoId SILENCER_APB_9X18PM_SOUND_SUPPRESSOR = new MongoId("5abcc328d8ce8700194394f3"); + public static readonly MongoId SILENCER_AR15_GRIFFIN_ARMAMENT_M4SDK_556X45_SOUND_SUPPRESSOR = new MongoId("638612b607dfed1ccb7206ba"); + public static readonly MongoId SILENCER_AS_VAL_9X39_INTEGRAL_BARRELSUPPRESSOR = new MongoId("57c44dd02459772d2e0ae249"); + public static readonly MongoId SILENCER_ASE_UTRA_SL7IBL_BORELOCK_338_LM_SOUND_SUPPRESSOR = new MongoId("673f0a38259f5945d70e43a6"); + public static readonly MongoId SILENCER_ASH12_127X55_SOUND_SUPPRESSOR = new MongoId("5caf187cae92157c28402e43"); + public static readonly MongoId SILENCER_AWC_THOR_PSR_XL_MULTICALIBER_SOUND_SUPPRESSOR = new MongoId("63877c99e785640d436458ea"); + public static readonly MongoId SILENCER_CGS_HEKATE_DT_338_LM_SOUND_SUPPRESSOR = new MongoId("673f0b36536d64240f01acd6"); + public static readonly MongoId SILENCER_CO_HYBRID_46_MULTICALIBER_SOUND_SUPPRESSOR = new MongoId("59bffbb386f77435b379b9c2"); + public static readonly MongoId SILENCER_CO_OMEGA_45K_45_ACP_SOUND_SUPPRESSOR = new MongoId("5fc4b9b17283c4046c5814d7"); + public static readonly MongoId SILENCER_CO_OSPREY_9_9X19_SOUND_SUPPRESSOR = new MongoId("5a32a064c4a28200741e22de"); + public static readonly MongoId SILENCER_CO_SAKER_ASR_556_556X45_SOUND_SUPPRESSOR = new MongoId("60926df0132d4d12c81fd9df"); + public static readonly MongoId SILENCER_CO_SALVO_12_12GA_SOUND_SUPPRESSOR = new MongoId("5b363dd25acfc4001a598fd2"); + public static readonly MongoId SILENCER_CO_SPARROW_22_SOUND_SUPPRESSOR = new MongoId("54490a4d4bdc2dbc018b4573"); + public static readonly MongoId SILENCER_DANIEL_DEFENSE_WAVE_QD_SOUND_SUPPRESSOR = new MongoId("5cff9e84d7ad1a049e54ed55"); + public static readonly MongoId SILENCER_FN_P90_ATTENUATOR_57X28_SOUND_SUPPRESSOR = new MongoId("5cebec00d7f00c065c53522a"); + public static readonly MongoId SILENCER_GEMTECH_ONE_MULTICALIBER_SOUND_SUPPRESSOR = new MongoId("5c7955c22e221644f31bfd5e"); + public static readonly MongoId SILENCER_GEMTECH_SFN57_57X28_SOUND_SUPPRESSOR = new MongoId("5d3ef698a4b9361182109872"); + public static readonly MongoId SILENCER_GLOCK_9X19_FISCHER_DEVELOPMENT_FD917_SOUND_SUPPRESSOR = new MongoId("5a7ad74e51dfba0015068f45"); + public static readonly MongoId SILENCER_HEXAGON_12K_12GA_SOUND_SUPPRESSOR = new MongoId("59c0ec5b86f77435b128bfca"); + public static readonly MongoId SILENCER_HK_G28_BT_QD_762X51_SOUND_SUPPRESSOR = new MongoId("6171367e1cb55961fa0fdb36"); + public static readonly MongoId SILENCER_HK_MP5SD_9X19_SOUND_SUPPRESSOR = new MongoId("5926d33d86f77410de68ebc0"); + public static readonly MongoId SILENCER_HK_MP7_BT_ROTEX_2_46X30_SOUND_SUPPRESSOR = new MongoId("5ba26ae8d4351e00367f9bdb"); + public static readonly MongoId SILENCER_HK_UMP_BT_OEM_45_ACP_SOUND_SUPPRESSOR = new MongoId("6130c4d51cb55961fa0fd49f"); + public static readonly MongoId SILENCER_KAC_PRSQDC_762X51_SOUND_SUPPRESSOR = new MongoId("5dfa3d2b0dee1b22f862eade"); + public static readonly MongoId SILENCER_KAC_QDC_556X45_SOUND_SUPPRESSOR = new MongoId("626673016f1edc06f30cf6d5"); + public static readonly MongoId SILENCER_KAC_QDC_65X35_SOUND_SUPPRESSOR = new MongoId("55d617094bdc2d89028b4568"); + public static readonly MongoId SILENCER_KAC_QDSS_NT4_556X45_SOUND_SUPPRESSOR_BLACK = new MongoId("57da93632459771cb65bf83f"); + public static readonly MongoId SILENCER_KAC_QDSS_NT4_556X45_SOUND_SUPPRESSOR_FDE = new MongoId("57dbb57e2459774673234890"); + public static readonly MongoId SILENCER_MCXSPEAR_SLX68MGQD_68X51_SOUND_SUPPRESSOR = new MongoId("652911e650dc782999054b9d"); + public static readonly MongoId SILENCER_MOSIN_RIFLE_BRAMIT_762X54R_SOUND_SUPPRESSOR = new MongoId("5b86a0e586f7745b600ccb23"); + public static readonly MongoId SILENCER_MP9_9X19_SOUND_SUPPRESSOR = new MongoId("5de8f2d5b74cd90030650c72"); + public static readonly MongoId SILENCER_MPX_9X19_RONIN_ARMS_12_INCH_SD_SUPPRESSOR = new MongoId("676149d8e889e1972605d6be"); + public static readonly MongoId SILENCER_MPX_9X19_RONIN_ARMS_8_INCH_SD_SUPPRESSOR = new MongoId("676149c5062e6212f5058c36"); + public static readonly MongoId SILENCER_MPXSD_9X19_INTEGRATED_SOUND_SUPPRESSOR = new MongoId("58aeac1b86f77457c419f475"); + public static readonly MongoId SILENCER_PB_9X18PM_SOUND_SUPPRESSOR = new MongoId("56e05b06d2720bb2668b4586"); + public static readonly MongoId SILENCER_PL15_9X19_SOUND_SUPPRESSOR = new MongoId("602a97060ddce744014caf6f"); + public static readonly MongoId SILENCER_PP1901_VITYAZ_9X19_SOUND_SUPPRESSOR = new MongoId("59bfc5c886f7743bf6794e62"); + public static readonly MongoId SILENCER_PP9101_KEDRB_9X18PM_SOUND_SUPPRESSOR = new MongoId("57f3c8cc2459773ec4480328"); + public static readonly MongoId SILENCER_ROTOR_43_366_TKM_SOUND_SUPPRESSOR = new MongoId("5a9fbb74a2750c0032157181"); + public static readonly MongoId SILENCER_ROTOR_43_556X45_SOUND_SUPPRESSOR = new MongoId("5a9fbb84a2750c00137fa685"); + public static readonly MongoId SILENCER_ROTOR_43_762X39_SOUND_SUPPRESSOR = new MongoId("5a9fbacda2750c00141e080f"); + public static readonly MongoId SILENCER_ROTOR_43_762X54R_SOUND_SUPPRESSOR = new MongoId("5e01ea19e9dc277128008c0b"); + public static readonly MongoId SILENCER_ROTOR_43_9X19_SOUND_SUPPRESSOR = new MongoId("5a9fb739a2750c003215717f"); + public static readonly MongoId SILENCER_SAKO_TRG_PGM_PRECISION_338_LM_SOUND_SUPPRESSOR = new MongoId("673f0a9370a3ddcf0d0ee0b8"); + public static readonly MongoId SILENCER_SIG_SAUER_SRD762QD_762X51_SOUND_SUPPRESSOR = new MongoId("5fbe760793164a5b6278efc8"); + public static readonly MongoId SILENCER_SIG_SAUER_SRD762TI_762X51_SOUND_SUPPRESSOR = new MongoId("5fbe7618d6fa9c00c571bb6c"); + public static readonly MongoId SILENCER_SIG_SAUER_SRD9_9X19_SOUND_SUPPRESSOR = new MongoId("5c6165902e22160010261b28"); + public static readonly MongoId SILENCER_SKS_HEXAGON_762X39_SOUND_SUPPRESSOR = new MongoId("593d490386f7745ee97a1555"); + public static readonly MongoId SILENCER_SR1MP_9X21_SOUND_SUPPRESSOR = new MongoId("5a27b6bec4a282000e496f78"); + public static readonly MongoId SILENCER_SR2M_9X21_SV1381_SOUND_SUPPRESSOR = new MongoId("62e2a7138e1ac9380579c122"); + public static readonly MongoId SILENCER_SR3M_9X39_SOUND_SUPPRESSOR = new MongoId("65144ff50e00edc79406836f"); + public static readonly MongoId SILENCER_STEYR_AUG_ASE_UTRA_S_SERIES_SL7I_556X45_SOUND_SUPPRESSOR = new MongoId( + "634eba08f69c710e0108d386" + ); + public static readonly MongoId SILENCER_STEYR_AUG_RELFEX_T4AUG_RANGER_556X45_SOUND_SUPPRESSOR = new MongoId("630f2982cdb9e392db0cbcc7"); + public static readonly MongoId SILENCER_SUREFIRE_SOCOM556MINI_MONSTER_556X45_SOUND_SUPPRESSOR = new MongoId("55d6190f4bdc2d87028b4567"); + public static readonly MongoId SILENCER_SUREFIRE_SOCOM556MONSTER_556X45_SOUND_SUPPRESSOR = new MongoId("55d614004bdc2d86028b4568"); + public static readonly MongoId SILENCER_SUREFIRE_SOCOM556RC2_556X45_SOUND_SUPPRESSOR = new MongoId("5ea17bbc09aa976f2e7a51cd"); + public static readonly MongoId SILENCER_SV98_762X54R_SOUND_SUPPRESSOR = new MongoId("5c4eecc32e221602b412b440"); + public static readonly MongoId SILENCER_THUNDER_BEAST_ARMS_ULTRA_5_SOUND_SUPPRESSOR = new MongoId("5d44064fa4b9361e4f6eb8b5"); + public static readonly MongoId SILENCER_TT_762X25_MAKESHIFT_SOUND_SUPPRESSOR = new MongoId("571a28e524597720b4066567"); + public static readonly MongoId SILENCER_UZI_9X19_SOUND_SUPPRESSOR = new MongoId("66993733f74fef4dfd0b04ff"); + public static readonly MongoId SILENCER_VPO101_ROTOR_43_762X51_SOUND_SUPPRESSOR = new MongoId("5f63407e1b231926f2329f15"); + public static readonly MongoId SILENCER_VSS_9X39_INTEGRAL_BARRELSUPPRESSOR = new MongoId("57838c962459774a1651ec63"); + public static readonly MongoId SMG_BT_MP9_9X19_SUBMACHINE_GUN = new MongoId("5e00903ae9dc277128008b87"); + public static readonly MongoId SMG_BT_MP9N_9X19_SUBMACHINE_GUN = new MongoId("5de7bd7bfd6b4e6e2276dc25"); + public static readonly MongoId SMG_FN_P90_57X28_SUBMACHINE_GUN = new MongoId("5cc82d76e24e8d00134b4b83"); + public static readonly MongoId SMG_HK_MP5_9X19_SUBMACHINE_GUN_NAVY_3_ROUND_BURST = new MongoId("5926bb2186f7744b1c6c6e60"); + public static readonly MongoId SMG_HK_MP5K_9X19_SUBMACHINE_GUN = new MongoId("5d2f0d8048f0356c925bc3b0"); + public static readonly MongoId SMG_HK_MP7A1_46X30_SUBMACHINE_GUN = new MongoId("5ba26383d4351e00334c93d9"); + public static readonly MongoId SMG_HK_MP7A2_46X30_SUBMACHINE_GUN = new MongoId("5bd70322209c4d00d7167b8f"); + public static readonly MongoId SMG_HK_UMP_45_ACP_SUBMACHINE_GUN = new MongoId("5fc3e272f8b6a877a729eac5"); + public static readonly MongoId SMG_IWI_UZI_9X19_SUBMACHINE_GUN = new MongoId("66992b349950f5f4cd06029f"); + public static readonly MongoId SMG_IWI_UZI_PRO_PISTOL_9X19_SUBMACHINE_GUN = new MongoId("6680304edadb7aa61d00cef0"); + public static readonly MongoId SMG_IWI_UZI_PRO_SMG_9X19_SUBMACHINE_GUN = new MongoId("668e71a8dadf42204c032ce1"); + public static readonly MongoId SMG_PP1901_VITYAZ_9X19_SUBMACHINE_GUN = new MongoId("59984ab886f7743e98271174"); + public static readonly MongoId SMG_PP9_KLIN_9X18PMM_SUBMACHINE_GUN = new MongoId("57f4c844245977379d5c14d1"); + public static readonly MongoId SMG_PP91_KEDR_9X18PM_SUBMACHINE_GUN = new MongoId("57d14d2524597714373db789"); + public static readonly MongoId SMG_PP9101_KEDRB_9X18PM_SUBMACHINE_GUN = new MongoId("57f3c6bd24597738e730fa2f"); + public static readonly MongoId SMG_PPSH41_762X25_SUBMACHINE_GUN = new MongoId("5ea03f7400685063ec28bfa8"); + public static readonly MongoId SMG_SAIGA9_9X19_CARBINE = new MongoId("59f9cabd86f7743a10721f46"); + public static readonly MongoId SMG_SIG_MPX_9X19_SUBMACHINE_GUN = new MongoId("58948c8e86f77409493f7266"); + public static readonly MongoId SMG_SOYUZTM_STM9_GEN2_9X19_CARBINE = new MongoId("60339954d62c9b14ed777c06"); + public static readonly MongoId SMG_SR2M_VERESK_9X21_SUBMACHINE_GUN = new MongoId("62e14904c2699c0ec93adc47"); + public static readonly MongoId SMG_TDI_KRISS_VECTOR_GEN2_45_ACP_SUBMACHINE_GUN = new MongoId("5fb64bc92b1b027b1f50bcf2"); + public static readonly MongoId SMG_TDI_KRISS_VECTOR_GEN2_9X19_SUBMACHINE_GUN = new MongoId("5fc3f2d5900b1d5091531e57"); + public static readonly MongoId SNIPERRIFLE_ACCURACY_INTERNATIONAL_AXMC_338_LM_BOLTACTION_SNIPER_RIFLE = new MongoId( + "627e14b21713922ded6f2c15" + ); + public static readonly MongoId SNIPERRIFLE_LOBAEV_ARMS_DVL10_762X51_BOLTACTION_SNIPER_RIFLE = new MongoId("588892092459774ac91d4b11"); + public static readonly MongoId SNIPERRIFLE_MOLOT_ARMS_VPO215_GORNOSTAY_366_TKM_BOLTACTION_RIFLE = new MongoId( + "5de652c31b7e3716273428be" + ); + public static readonly MongoId SNIPERRIFLE_MOSIN_762X54R_BOLTACTION_RIFLE_INFANTRY = new MongoId("5bfd297f0db834001a669119"); + public static readonly MongoId SNIPERRIFLE_MOSIN_762X54R_BOLTACTION_RIFLE_SNIPER = new MongoId("5ae08f0a5acfc408fb1398a1"); + public static readonly MongoId SNIPERRIFLE_ORSIS_T5000M_762X51_BOLTACTION_SNIPER_RIFLE = new MongoId("5df24cf80dee1b22f862e9bc"); + public static readonly MongoId SNIPERRIFLE_REMINGTON_MODEL_700_762X51_BOLTACTION_SNIPER_RIFLE = new MongoId("5bfea6e90db834001b7347f3"); + public static readonly MongoId SNIPERRIFLE_SAKO_TRG_M10_338_LM_BOLTACTION_SNIPER_RIFLE = new MongoId("673cab3e03c6a20581028bc1"); + public static readonly MongoId SNIPERRIFLE_SV98_762X54R_BOLTACTION_SNIPER_RIFLE = new MongoId("55801eed4bdc2d89578b4588"); + public static readonly MongoId SORTINGTABLE_SORTING_TABLE = new MongoId("602543c13fee350cd564d032"); + public static readonly MongoId SPECIALSCOPE_ARMASIGHT_VULCAN_MG_35X_BRAVO_NIGHT_VISION_SCOPE = new MongoId("5b3b6e495acfc4330140bd88"); + public static readonly MongoId SPECIALSCOPE_ARMASIGHT_ZEUSPRO_640_28X50_30HZ_THERMAL_SCOPE = new MongoId("63fc44e2429a8a166c7f61e6"); + public static readonly MongoId SPECIALSCOPE_CYCLONE_SHAKHIN_37X_THERMAL_SCOPE = new MongoId("67641b461c2eb66ade05dba6"); + public static readonly MongoId SPECIALSCOPE_FLIR_RS32_2259X_35MM_60HZ_THERMAL_RIFLESCOPE = new MongoId("5d1b5e94d7ad1a2b865a96b0"); + public static readonly MongoId SPECIALSCOPE_MP155_ULTIMA_THERMAL_CAMERA = new MongoId("606f2696f2cb2e02a42aceb1"); + public static readonly MongoId SPECIALSCOPE_NSPUM_35X_DOVETAIL_NIGHT_VISION_SCOPE = new MongoId("5a7c74b3e899ef0014332c29"); + public static readonly MongoId SPECIALSCOPE_SIG_SAUER_ECHO1_12X30MM_30HZ_THERMAL_REFLEX_SCOPE = new MongoId("6478641c19d732620e045e17"); + public static readonly MongoId SPECIALSCOPE_TORREY_PINES_LOGIC_T12W_30HZ_THERMAL_REFLEX_SIGHT = new MongoId("609bab8b455afd752b2e6138"); + public static readonly MongoId SPECIALSCOPE_TRIJICON_REAPIR_THERMAL_SCOPE = new MongoId("5a1eaa87fcdbcb001865f75e"); + public static readonly MongoId SPECITEM_IMP_MINE_DETECTOR = new MongoId("5af056f186f7746da511291f"); public static readonly MongoId SPECITEM_MS2000_MARKER = new MongoId("5991b51486f77447b112d44f"); - public static readonly MongoId SPECITEM_RADIO_REPEATER = new MongoId( - "63a0b2eabea67a6d93009e52" - ); + public static readonly MongoId SPECITEM_RADIO_REPEATER = new MongoId("63a0b2eabea67a6d93009e52"); public static readonly MongoId SPECITEM_SIGNAL_JAMMER = new MongoId("5ac78a9b86f7741cca0bbd8d"); - public static readonly MongoId SPECITEM_THE_EYE_MORTAR_STRIKE_SIGNALING_DEVICE = new MongoId( - "6655e35b6bc645cb7b059912" - ); + public static readonly MongoId SPECITEM_THE_EYE_MORTAR_STRIKE_SIGNALING_DEVICE = new MongoId("6655e35b6bc645cb7b059912"); public static readonly MongoId SPECITEM_WIFI_CAMERA = new MongoId("5b4391a586f7745321235ab2"); public static readonly MongoId STASH_10X300 = new MongoId("5c0a596086f7747bef5731c2"); - public static readonly MongoId STASH_EDGE_OF_DARKNESS_STASH_10X68 = new MongoId( - "5811ce772459770e9e5f9532" - ); - public static readonly MongoId STASH_LEFT_BEHIND_STASH_10X40 = new MongoId( - "5811ce572459770cba1a34ea" - ); - public static readonly MongoId STASH_PREPARE_FOR_ESCAPE_STASH_10X50 = new MongoId( - "5811ce662459770f6f490f32" - ); + public static readonly MongoId STASH_EDGE_OF_DARKNESS_STASH_10X68 = new MongoId("5811ce772459770e9e5f9532"); + public static readonly MongoId STASH_LEFT_BEHIND_STASH_10X40 = new MongoId("5811ce572459770cba1a34ea"); + public static readonly MongoId STASH_PREPARE_FOR_ESCAPE_STASH_10X50 = new MongoId("5811ce662459770f6f490f32"); public static readonly MongoId STASH_QUESTOFFLINE = new MongoId("5963866b86f7747bfa1c4462"); public static readonly MongoId STASH_QUESTRAID = new MongoId("5963866286f7747bf429b572"); - public static readonly MongoId STASH_STANDARD_STASH_10X30 = new MongoId( - "566abbc34bdc2d92178b4576" - ); - public static readonly MongoId STASH_THE_UNHEARD_EDITION_STASH_10X72 = new MongoId( - "6602bcf19cc643f44a04274b" - ); - public static readonly MongoId STATIONARYCONTAINER_DRAWER = new MongoId( - "5675838d4bdc2d95058b456e" - ); - public static readonly MongoId STIM_2A2BTG_STIMULANT_INJECTOR = new MongoId( - "66507eabf5ddb0818b085b68" - ); - public static readonly MongoId STIM_3BTG_STIMULANT_INJECTOR = new MongoId( - "5ed515c8d380ab312177c0fa" - ); - public static readonly MongoId STIM_ADRENALINE_INJECTOR = new MongoId( - "5c10c8fd86f7743d7d706df3" - ); - public static readonly MongoId STIM_AHF1M_STIMULANT_INJECTOR = new MongoId( - "5ed515f6915ec335206e4152" - ); - public static readonly MongoId STIM_ETGCHANGE_REGENERATIVE_STIMULANT_INJECTOR = new MongoId( - "5c0e534186f7747fa1419867" - ); - public static readonly MongoId STIM_L1_NOREPINEPHRINE_INJECTOR = new MongoId( - "5ed515e03a40a50460332579" - ); + public static readonly MongoId STASH_STANDARD_STASH_10X30 = new MongoId("566abbc34bdc2d92178b4576"); + public static readonly MongoId STASH_THE_UNHEARD_EDITION_STASH_10X72 = new MongoId("6602bcf19cc643f44a04274b"); + public static readonly MongoId STATIONARYCONTAINER_DRAWER = new MongoId("5675838d4bdc2d95058b456e"); + public static readonly MongoId STIM_2A2BTG_STIMULANT_INJECTOR = new MongoId("66507eabf5ddb0818b085b68"); + public static readonly MongoId STIM_3BTG_STIMULANT_INJECTOR = new MongoId("5ed515c8d380ab312177c0fa"); + public static readonly MongoId STIM_ADRENALINE_INJECTOR = new MongoId("5c10c8fd86f7743d7d706df3"); + public static readonly MongoId STIM_AHF1M_STIMULANT_INJECTOR = new MongoId("5ed515f6915ec335206e4152"); + public static readonly MongoId STIM_ETGCHANGE_REGENERATIVE_STIMULANT_INJECTOR = new MongoId("5c0e534186f7747fa1419867"); + public static readonly MongoId STIM_L1_NOREPINEPHRINE_INJECTOR = new MongoId("5ed515e03a40a50460332579"); public static readonly MongoId STIM_MELDONIN_INJECTOR = new MongoId("5ed5160a87bb8443d10680b5"); - public static readonly MongoId STIM_MULE_STIMULANT_INJECTOR = new MongoId( - "5ed51652f6c34d2cc26336a1" - ); - public static readonly MongoId STIM_OBDOLBOS_2_COCKTAIL_INJECTOR = new MongoId( - "637b60c3b7afa97bfc3d7001" - ); - public static readonly MongoId STIM_OBDOLBOS_COCKTAIL_INJECTOR = new MongoId( - "5ed5166ad380ab312177c100" - ); - public static readonly MongoId STIM_P22_PRODUCT_22_STIMULANT_INJECTOR = new MongoId( - "5ed515ece452db0eb56fc028" - ); - public static readonly MongoId STIM_PERFOTORAN_BLUE_BLOOD_STIMULANT_INJECTOR = new MongoId( - "637b6251104668754b72f8f9" - ); - public static readonly MongoId STIM_PNB_PRODUCT_16_STIMULANT_INJECTOR = new MongoId( - "637b6179104668754b72f8f5" - ); - public static readonly MongoId STIM_PROPITAL_REGENERATIVE_STIMULANT_INJECTOR = new MongoId( - "5c0e530286f7747fa1419862" - ); - public static readonly MongoId STIM_SJ1_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId( - "5c0e531286f7747fa54205c2" - ); - public static readonly MongoId STIM_SJ12_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId( - "637b612fb7afa97bfc3d7005" - ); - public static readonly MongoId STIM_SJ6_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId( - "5c0e531d86f7747fa23f4d42" - ); - public static readonly MongoId STIM_SJ9_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId( - "5fca13ca637ee0341a484f46" - ); - public static readonly MongoId STIM_TRIMADOL_STIMULANT_INJECTOR = new MongoId( - "637b620db7afa97bfc3d7009" - ); - public static readonly MongoId STIM_XTG12_ANTIDOTE_INJECTOR = new MongoId( - "5fca138c2a7b221b2852a5c6" - ); - public static readonly MongoId STIM_ZAGUSTIN_HEMOSTATIC_DRUG_INJECTOR = new MongoId( - "5c0e533786f7747fa23f4d47" - ); + public static readonly MongoId STIM_MULE_STIMULANT_INJECTOR = new MongoId("5ed51652f6c34d2cc26336a1"); + public static readonly MongoId STIM_OBDOLBOS_2_COCKTAIL_INJECTOR = new MongoId("637b60c3b7afa97bfc3d7001"); + public static readonly MongoId STIM_OBDOLBOS_COCKTAIL_INJECTOR = new MongoId("5ed5166ad380ab312177c100"); + public static readonly MongoId STIM_P22_PRODUCT_22_STIMULANT_INJECTOR = new MongoId("5ed515ece452db0eb56fc028"); + public static readonly MongoId STIM_PERFOTORAN_BLUE_BLOOD_STIMULANT_INJECTOR = new MongoId("637b6251104668754b72f8f9"); + public static readonly MongoId STIM_PNB_PRODUCT_16_STIMULANT_INJECTOR = new MongoId("637b6179104668754b72f8f5"); + public static readonly MongoId STIM_PROPITAL_REGENERATIVE_STIMULANT_INJECTOR = new MongoId("5c0e530286f7747fa1419862"); + public static readonly MongoId STIM_SJ1_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId("5c0e531286f7747fa54205c2"); + public static readonly MongoId STIM_SJ12_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId("637b612fb7afa97bfc3d7005"); + public static readonly MongoId STIM_SJ6_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId("5c0e531d86f7747fa23f4d42"); + public static readonly MongoId STIM_SJ9_TGLABS_COMBAT_STIMULANT_INJECTOR = new MongoId("5fca13ca637ee0341a484f46"); + public static readonly MongoId STIM_TRIMADOL_STIMULANT_INJECTOR = new MongoId("637b620db7afa97bfc3d7009"); + public static readonly MongoId STIM_XTG12_ANTIDOTE_INJECTOR = new MongoId("5fca138c2a7b221b2852a5c6"); + public static readonly MongoId STIM_ZAGUSTIN_HEMOSTATIC_DRUG_INJECTOR = new MongoId("5c0e533786f7747fa23f4d47"); public static readonly MongoId STOCK_9A91_TOPFOLDING = new MongoId("6451167ad4928d46d30be3fd"); - public static readonly MongoId STOCK_AA12_STOCK_ASSEMBLY = new MongoId( - "66ffac9e316b08f6840a73e6" - ); - public static readonly MongoId STOCK_AA12_STOCK_ASSEMBLY_FDE = new MongoId( - "670fd23798663bc4b10e911a" - ); - public static readonly MongoId STOCK_AA12_STOCK_ASSEMBLY_TERRAGROUP = new MongoId( - "6719023b612cc94b9008e78c" - ); + public static readonly MongoId STOCK_AA12_STOCK_ASSEMBLY = new MongoId("66ffac9e316b08f6840a73e6"); + public static readonly MongoId STOCK_AA12_STOCK_ASSEMBLY_FDE = new MongoId("670fd23798663bc4b10e911a"); + public static readonly MongoId STOCK_AA12_STOCK_ASSEMBLY_TERRAGROUP = new MongoId("6719023b612cc94b9008e78c"); public static readonly MongoId STOCK_AI_AXMC_AX_BUTT = new MongoId("62811f828193841aca4a45c3"); - public static readonly MongoId STOCK_AI_AXMC_GTAC_ARTYPE_PISTOL_GRIP_ADAPTER = new MongoId( - "62811e335631d45211793c95" - ); - public static readonly MongoId STOCK_AI_AXMC_PISTOL_GRIP = new MongoId( - "62811e2510e26c1f344e6554" - ); - public static readonly MongoId STOCK_AK_100SERIES_METAL_SKELETONIZED = new MongoId( - "6386300124a1dc425c00577a" - ); + public static readonly MongoId STOCK_AI_AXMC_GTAC_ARTYPE_PISTOL_GRIP_ADAPTER = new MongoId("62811e335631d45211793c95"); + public static readonly MongoId STOCK_AI_AXMC_PISTOL_GRIP = new MongoId("62811e2510e26c1f344e6554"); + public static readonly MongoId STOCK_AK_100SERIES_METAL_SKELETONIZED = new MongoId("6386300124a1dc425c00577a"); public static readonly MongoId STOCK_AK_AKEVO = new MongoId("6761779c48fa5c377e06fc3f"); - public static readonly MongoId STOCK_AK_CUSTOM_ARMS_STEF_74_SKELETON_STOCK_EXTENSION = - new MongoId("6494094948796d891603e59f"); - public static readonly MongoId STOCK_AK_GP25_ACCESSORY_KIT_RECOIL_PAD = new MongoId( - "5a0c59791526d8dba737bba7" - ); - public static readonly MongoId STOCK_AK_SKELETONIZED_STOCK_CUSTOMIZED = new MongoId( - "66ac9d9740e27931602042d4" - ); - public static readonly MongoId STOCK_AK_ZENIT_PT1_KLASSIKA = new MongoId( - "5b222d405acfc400153af4fe" - ); - public static readonly MongoId STOCK_AK_ZENIT_PT3_KLASSIKA = new MongoId( - "59ecc3dd86f7746dc827481c" - ); + public static readonly MongoId STOCK_AK_CUSTOM_ARMS_STEF_74_SKELETON_STOCK_EXTENSION = new MongoId("6494094948796d891603e59f"); + public static readonly MongoId STOCK_AK_GP25_ACCESSORY_KIT_RECOIL_PAD = new MongoId("5a0c59791526d8dba737bba7"); + public static readonly MongoId STOCK_AK_SKELETONIZED_STOCK_CUSTOMIZED = new MongoId("66ac9d9740e27931602042d4"); + public static readonly MongoId STOCK_AK_ZENIT_PT1_KLASSIKA = new MongoId("5b222d405acfc400153af4fe"); + public static readonly MongoId STOCK_AK_ZENIT_PT3_KLASSIKA = new MongoId("59ecc3dd86f7746dc827481c"); public static readonly MongoId STOCK_AK12 = new MongoId("5beec8c20db834001d2c465c"); public static readonly MongoId STOCK_AK12_BUFFER_TUBE = new MongoId("649ec87d8007560a9001ab36"); - public static readonly MongoId STOCK_AK545_BUFFER_TUBE = new MongoId( - "628b9a40717774443b15e9f2" - ); + public static readonly MongoId STOCK_AK545_BUFFER_TUBE = new MongoId("628b9a40717774443b15e9f2"); public static readonly MongoId STOCK_AK74_POLYMER = new MongoId("5649b0fc4bdc2d17108b4588"); - public static readonly MongoId STOCK_AK74_POLYMER_STOCK_PLUM = new MongoId( - "5cbdb1b0ae9215000d50e105" - ); + public static readonly MongoId STOCK_AK74_POLYMER_STOCK_PLUM = new MongoId("5cbdb1b0ae9215000d50e105"); public static readonly MongoId STOCK_AK74_WOODEN = new MongoId("5649b1c04bdc2d16268b457c"); - public static readonly MongoId STOCK_AK74M_CAA_AKTS_AK74_BUFFER_TUBE = new MongoId( - "5cf50fc5d7f00c056c53f83c" - ); + public static readonly MongoId STOCK_AK74M_CAA_AKTS_AK74_BUFFER_TUBE = new MongoId("5cf50fc5d7f00c056c53f83c"); public static readonly MongoId STOCK_AK74M_POLYMER = new MongoId("5ac50c185acfc400163398d4"); - public static readonly MongoId STOCK_AK74MAK100_ZENIT_PT_LOCK = new MongoId( - "5ac78eaf5acfc4001926317a" - ); + public static readonly MongoId STOCK_AK74MAK100_ZENIT_PT_LOCK = new MongoId("5ac78eaf5acfc4001926317a"); public static readonly MongoId STOCK_AKM_WOODEN = new MongoId("59d6514b86f774171a068a08"); - public static readonly MongoId STOCK_AKMAK74_CAA_AKTS_BUFFER_TUBE = new MongoId( - "5cf518cfd7f00c065b422214" - ); - public static readonly MongoId STOCK_AKMAK74_FAB_DEFENSE_UAS = new MongoId( - "5b04473a5acfc40018632f70" - ); - public static readonly MongoId STOCK_AKMAK74_HERA_ARMS_CQR47_PISTOL_GRIPBUTT = new MongoId( - "619b69037b9de8162902673e" - ); - public static readonly MongoId STOCK_AKMAK74_HEXAGON_KOCHERGA_STOCK_ANODIZED_RED = new MongoId( - "5e217ba4c1434648c13568cd" - ); - public static readonly MongoId STOCK_AKMAK74_MAGPUL_ZHUKOVS = new MongoId( - "5b0e794b5acfc47a877359b2" - ); - public static readonly MongoId STOCK_AKMAK74_ME4_BUFFER_TUBE_ADAPTER = new MongoId( - "5649b2314bdc2d79388b4576" - ); - public static readonly MongoId STOCK_AKMAK74_PROMAG_ARCHANGEL_OPFOR_AA47_BUTT = new MongoId( - "6087e2a5232e5a31c233d552" - ); - public static readonly MongoId STOCK_AKMAK74_RD_AK_TO_M4_BUFFER_TUBE_ADAPTER = new MongoId( - "628a6678ccaab13006640e49" - ); - public static readonly MongoId STOCK_AKMAK74_ZENIT_PT_LOCK = new MongoId( - "5b222d335acfc4771e1be099" - ); - public static readonly MongoId STOCK_AKMS_FAB_DEFENSE_M4AKMS_P_STOCK_ADAPTER = new MongoId( - "6761763448fa5c377e06fc39" - ); + public static readonly MongoId STOCK_AKMAK74_CAA_AKTS_BUFFER_TUBE = new MongoId("5cf518cfd7f00c065b422214"); + public static readonly MongoId STOCK_AKMAK74_FAB_DEFENSE_UAS = new MongoId("5b04473a5acfc40018632f70"); + public static readonly MongoId STOCK_AKMAK74_HERA_ARMS_CQR47_PISTOL_GRIPBUTT = new MongoId("619b69037b9de8162902673e"); + public static readonly MongoId STOCK_AKMAK74_HEXAGON_KOCHERGA_STOCK_ANODIZED_RED = new MongoId("5e217ba4c1434648c13568cd"); + public static readonly MongoId STOCK_AKMAK74_MAGPUL_ZHUKOVS = new MongoId("5b0e794b5acfc47a877359b2"); + public static readonly MongoId STOCK_AKMAK74_ME4_BUFFER_TUBE_ADAPTER = new MongoId("5649b2314bdc2d79388b4576"); + public static readonly MongoId STOCK_AKMAK74_PROMAG_ARCHANGEL_OPFOR_AA47_BUTT = new MongoId("6087e2a5232e5a31c233d552"); + public static readonly MongoId STOCK_AKMAK74_RD_AK_TO_M4_BUFFER_TUBE_ADAPTER = new MongoId("628a6678ccaab13006640e49"); + public static readonly MongoId STOCK_AKMAK74_ZENIT_PT_LOCK = new MongoId("5b222d335acfc4771e1be099"); + public static readonly MongoId STOCK_AKMS_FAB_DEFENSE_M4AKMS_P_STOCK_ADAPTER = new MongoId("6761763448fa5c377e06fc39"); public static readonly MongoId STOCK_AKMS_FOLDING = new MongoId("59ff3b6a86f77477562ff5ed"); public static readonly MongoId STOCK_AKMSN_FOLDING = new MongoId("5abcd472d8ce8700166032ae"); - public static readonly MongoId STOCK_AKS74_SKELETONIZED = new MongoId( - "5ab626e4d8ce87272e4c6e43" - ); - public static readonly MongoId STOCK_AKS74AKS74U_ZENIT_PT_LOCK = new MongoId( - "59ecc28286f7746d7a68aa8c" - ); - public static readonly MongoId STOCK_AKS74U_SKELETONIZED = new MongoId( - "57dc347d245977596754e7a1" - ); - public static readonly MongoId STOCK_APB_DETACHABLE_WIRE = new MongoId( - "5a17fb9dfcdbcbcae6687291" - ); - public static readonly MongoId STOCK_AR15_ADAR_215_BUFFER_TUBE = new MongoId( - "5c0faeddd174af02a962601f" - ); - public static readonly MongoId STOCK_AR15_ADAR_215_WOODEN = new MongoId( - "5c0e2ff6d174af02a1659d4a" - ); - public static readonly MongoId STOCK_AR15_B5_SYSTEMS_COLLAPSIBLE_PRECISION = new MongoId( - "5fc2369685fd526b824a5713" - ); - public static readonly MongoId STOCK_AR15_CMMG_BUFFER_TUBE = new MongoId( - "606587e18900dc2d9a55b65f" - ); - public static readonly MongoId STOCK_AR15_CMMG_RIPSTOCK_BUTT = new MongoId( - "606587d11246154cad35d635" - ); - public static readonly MongoId STOCK_AR15_COLT_A2_BUFFER_TUBE = new MongoId( - "5a33ca0fc4a282000d72292f" - ); - public static readonly MongoId STOCK_AR15_COLT_CARBINE_BUFFER_TUBE = new MongoId( - "5649be884bdc2d79388b4577" - ); - public static readonly MongoId STOCK_AR15_DANIEL_DEFENSE_ENHANCED_COLLAPSIBLE_BUTTSTOCK_BLACK = - new MongoId("6516e91f609aaf354b34b3e2"); - public static readonly MongoId STOCK_AR15_DANIEL_DEFENSE_ENHANCED_COLLAPSIBLE_BUTTSTOCK_FDE = - new MongoId("6516e971a3d4c6497930b450"); - public static readonly MongoId STOCK_AR15_DOUBLESTAR_ACE_ARFX_SKELETON = new MongoId( - "6761777a1f08ed5e8800b7ac" - ); - public static readonly MongoId STOCK_AR15_DOUBLESTAR_ACE_SOCOM_GEN4 = new MongoId( - "5d120a10d7ad1a4e1026ba85" - ); - public static readonly MongoId STOCK_AR15_ERGO_F93_PRO = new MongoId( - "5b0800175acfc400153aebd4" - ); - public static readonly MongoId STOCK_AR15_FAB_DEFENSE_GLCORE_BUTT = new MongoId( - "602e620f9b513876d4338d9a" - ); - public static readonly MongoId STOCK_AR15_FAB_DEFENSE_GLR16S = new MongoId( - "5bfe86df0db834001b734685" - ); - public static readonly MongoId STOCK_AR15_FAB_DEFENSE_GLSHOCK_BUTT = new MongoId( - "5a9eb32da2750c00171b3f9c" - ); - public static readonly MongoId STOCK_AR15_HERA_ARMS_CQR_PISTOL_GRIPBUTT = new MongoId( - "5a33e75ac4a2826c6e06d759" - ); - public static readonly MongoId STOCK_AR15_HIGH_STANDARD_M4SS = new MongoId( - "55d4ae6c4bdc2d8b2f8b456e" - ); + public static readonly MongoId STOCK_AKS74_SKELETONIZED = new MongoId("5ab626e4d8ce87272e4c6e43"); + public static readonly MongoId STOCK_AKS74AKS74U_ZENIT_PT_LOCK = new MongoId("59ecc28286f7746d7a68aa8c"); + public static readonly MongoId STOCK_AKS74U_SKELETONIZED = new MongoId("57dc347d245977596754e7a1"); + public static readonly MongoId STOCK_APB_DETACHABLE_WIRE = new MongoId("5a17fb9dfcdbcbcae6687291"); + public static readonly MongoId STOCK_AR15_ADAR_215_BUFFER_TUBE = new MongoId("5c0faeddd174af02a962601f"); + public static readonly MongoId STOCK_AR15_ADAR_215_WOODEN = new MongoId("5c0e2ff6d174af02a1659d4a"); + public static readonly MongoId STOCK_AR15_B5_SYSTEMS_COLLAPSIBLE_PRECISION = new MongoId("5fc2369685fd526b824a5713"); + public static readonly MongoId STOCK_AR15_CMMG_BUFFER_TUBE = new MongoId("606587e18900dc2d9a55b65f"); + public static readonly MongoId STOCK_AR15_CMMG_RIPSTOCK_BUTT = new MongoId("606587d11246154cad35d635"); + public static readonly MongoId STOCK_AR15_COLT_A2_BUFFER_TUBE = new MongoId("5a33ca0fc4a282000d72292f"); + public static readonly MongoId STOCK_AR15_COLT_CARBINE_BUFFER_TUBE = new MongoId("5649be884bdc2d79388b4577"); + public static readonly MongoId STOCK_AR15_DANIEL_DEFENSE_ENHANCED_COLLAPSIBLE_BUTTSTOCK_BLACK = new MongoId("6516e91f609aaf354b34b3e2"); + public static readonly MongoId STOCK_AR15_DANIEL_DEFENSE_ENHANCED_COLLAPSIBLE_BUTTSTOCK_FDE = new MongoId("6516e971a3d4c6497930b450"); + public static readonly MongoId STOCK_AR15_DOUBLESTAR_ACE_ARFX_SKELETON = new MongoId("6761777a1f08ed5e8800b7ac"); + public static readonly MongoId STOCK_AR15_DOUBLESTAR_ACE_SOCOM_GEN4 = new MongoId("5d120a10d7ad1a4e1026ba85"); + public static readonly MongoId STOCK_AR15_ERGO_F93_PRO = new MongoId("5b0800175acfc400153aebd4"); + public static readonly MongoId STOCK_AR15_FAB_DEFENSE_GLCORE_BUTT = new MongoId("602e620f9b513876d4338d9a"); + public static readonly MongoId STOCK_AR15_FAB_DEFENSE_GLR16S = new MongoId("5bfe86df0db834001b734685"); + public static readonly MongoId STOCK_AR15_FAB_DEFENSE_GLSHOCK_BUTT = new MongoId("5a9eb32da2750c00171b3f9c"); + public static readonly MongoId STOCK_AR15_HERA_ARMS_CQR_PISTOL_GRIPBUTT = new MongoId("5a33e75ac4a2826c6e06d759"); + public static readonly MongoId STOCK_AR15_HIGH_STANDARD_M4SS = new MongoId("55d4ae6c4bdc2d8b2f8b456e"); public static readonly MongoId STOCK_AR15_HK_E1_BUTT = new MongoId("5c87a07c2e2216001219d4a2"); - public static readonly MongoId STOCK_AR15_HK_SLIM_LINE_BUTT = new MongoId( - "5bb20e70d4351e0035629f8f" - ); - public static readonly MongoId STOCK_AR15_KRISS_DEFIANCE_DS150_STOCK_BLACK = new MongoId( - "5fbbaa86f9986c4cff3fe5f6" - ); - public static readonly MongoId STOCK_AR15_KRISS_DEFIANCE_DS150_STOCK_FDE = new MongoId( - "5fce16961f152d4312622bc9" - ); + public static readonly MongoId STOCK_AR15_HK_SLIM_LINE_BUTT = new MongoId("5bb20e70d4351e0035629f8f"); + public static readonly MongoId STOCK_AR15_KRISS_DEFIANCE_DS150_STOCK_BLACK = new MongoId("5fbbaa86f9986c4cff3fe5f6"); + public static readonly MongoId STOCK_AR15_KRISS_DEFIANCE_DS150_STOCK_FDE = new MongoId("5fce16961f152d4312622bc9"); public static readonly MongoId STOCK_AR15_LMT_SOPMOD = new MongoId("5ae30c9a5acfc408fb139a03"); - public static readonly MongoId STOCK_AR15_MAGPUL_CTR_CARBINE_STOCK_BLACK = new MongoId( - "5d135e83d7ad1a21b83f42d8" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_CTR_CARBINE_STOCK_FDE = new MongoId( - "5d135ecbd7ad1a21c176542e" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_BLACK = new MongoId( - "56eabf3bd2720b75698b4569" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_FDE = new MongoId( - "58d2946386f774496974c37e" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_FOLIAGE_GREEN = new MongoId( - "58d2946c86f7744e271174b5" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_OLIVE_DRAB = new MongoId( - "58d2947686f774485c6a1ee5" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_STEALTH_GREY = new MongoId( - "58d2947e86f77447aa070d53" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_MOE_SLK_BUTTSTOCK_COYOTE_TAN = new MongoId( - "6529370c405a5f51dd023db8" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_PRS_GEN2_STOCK_FDE = new MongoId( - "5a33cae9c4a28232980eb086" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_PRS_GEN3_STOCK_BLACK = new MongoId( - "5d44069ca4b9361ebd26fc37" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_PRS_GEN3_STOCK_GREY = new MongoId( - "5d4406a8a4b9361e4f6eb8b7" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_UBR_GEN2_STOCK_BLACK = new MongoId( - "5947e98b86f774778f1448bc" - ); - public static readonly MongoId STOCK_AR15_MAGPUL_UBR_GEN2_STOCK_FDE = new MongoId( - "5947eab886f77475961d96c5" - ); + public static readonly MongoId STOCK_AR15_MAGPUL_CTR_CARBINE_STOCK_BLACK = new MongoId("5d135e83d7ad1a21b83f42d8"); + public static readonly MongoId STOCK_AR15_MAGPUL_CTR_CARBINE_STOCK_FDE = new MongoId("5d135ecbd7ad1a21c176542e"); + public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_BLACK = new MongoId("56eabf3bd2720b75698b4569"); + public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_FDE = new MongoId("58d2946386f774496974c37e"); + public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_FOLIAGE_GREEN = new MongoId("58d2946c86f7744e271174b5"); + public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_OLIVE_DRAB = new MongoId("58d2947686f774485c6a1ee5"); + public static readonly MongoId STOCK_AR15_MAGPUL_MOE_CARBINE_STOCK_STEALTH_GREY = new MongoId("58d2947e86f77447aa070d53"); + public static readonly MongoId STOCK_AR15_MAGPUL_MOE_SLK_BUTTSTOCK_COYOTE_TAN = new MongoId("6529370c405a5f51dd023db8"); + public static readonly MongoId STOCK_AR15_MAGPUL_PRS_GEN2_STOCK_FDE = new MongoId("5a33cae9c4a28232980eb086"); + public static readonly MongoId STOCK_AR15_MAGPUL_PRS_GEN3_STOCK_BLACK = new MongoId("5d44069ca4b9361ebd26fc37"); + public static readonly MongoId STOCK_AR15_MAGPUL_PRS_GEN3_STOCK_GREY = new MongoId("5d4406a8a4b9361e4f6eb8b7"); + public static readonly MongoId STOCK_AR15_MAGPUL_UBR_GEN2_STOCK_BLACK = new MongoId("5947e98b86f774778f1448bc"); + public static readonly MongoId STOCK_AR15_MAGPUL_UBR_GEN2_STOCK_FDE = new MongoId("5947eab886f77475961d96c5"); public static readonly MongoId STOCK_AR15_MFT_BUS = new MongoId("5947c73886f7747701588af5"); - public static readonly MongoId STOCK_AR15_RTM_ATP_BUFFER_TUBE = new MongoId( - "638de3603a1a4031d8260b8c" + public static readonly MongoId STOCK_AR15_RTM_ATP_BUFFER_TUBE = new MongoId("638de3603a1a4031d8260b8c"); + public static readonly MongoId STOCK_AR15_SB_TACTICAL_SBA3_BRACE = new MongoId("628a85ee6b1d481ff772e9d5"); + public static readonly MongoId STOCK_AR15_SOYUZTM_BUFFER_TUBE = new MongoId("602e3f1254072b51b239f713"); + public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_ADVANCED_RECEIVER_EXTENSION_BUFFER_TUBE = new MongoId( + "5c793fb92e221644f31bfb64" ); - public static readonly MongoId STOCK_AR15_SB_TACTICAL_SBA3_BRACE = new MongoId( - "628a85ee6b1d481ff772e9d5" - ); - public static readonly MongoId STOCK_AR15_SOYUZTM_BUFFER_TUBE = new MongoId( - "602e3f1254072b51b239f713" - ); - public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_ADVANCED_RECEIVER_EXTENSION_BUFFER_TUBE = - new MongoId("5c793fb92e221644f31bfb64"); - public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_ADVANCED_RECEIVER_EXTENSION_BUFFER_TUBE_ANODIZED_RED = - new MongoId("5c793fc42e221600114ca25d"); - public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_VIPER_MOD_1 = new MongoId( - "5c793fde2e221601da358614" - ); - public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_VIPER_PDW = new MongoId( - "627254cc9c563e6e442c398f" - ); - public static readonly MongoId STOCK_AR15_TROY_M7A1_PDW_STOCK_BLACK = new MongoId( - "591aef7986f774139d495f03" - ); - public static readonly MongoId STOCK_AR15_TROY_M7A1_PDW_STOCK_FDE = new MongoId( - "591af10186f774139d495f0e" + public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_ADVANCED_RECEIVER_EXTENSION_BUFFER_TUBE_ANODIZED_RED = new MongoId( + "5c793fc42e221600114ca25d" ); + public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_VIPER_MOD_1 = new MongoId("5c793fde2e221601da358614"); + public static readonly MongoId STOCK_AR15_STRIKE_INDUSTRIES_VIPER_PDW = new MongoId("627254cc9c563e6e442c398f"); + public static readonly MongoId STOCK_AR15_TROY_M7A1_PDW_STOCK_BLACK = new MongoId("591aef7986f774139d495f03"); + public static readonly MongoId STOCK_AR15_TROY_M7A1_PDW_STOCK_FDE = new MongoId("591af10186f774139d495f0e"); public static readonly MongoId STOCK_AR15_VLTOR_EMOD = new MongoId("5b39f8db5acfc40016387a1b"); public static readonly MongoId STOCK_ARMACON_BASKAK = new MongoId("57ade1442459771557167e15"); public static readonly MongoId STOCK_AS_VAL_SKELETON = new MongoId("57c450252459772d28133253"); public static readonly MongoId STOCK_AVT40_WOODEN = new MongoId("6410745d5dd49d77bd078485"); - public static readonly MongoId STOCK_BENELLI_M3_MESA_TACTICAL_URBINO = new MongoId( - "625eb0faa6e3a82193267ad9" - ); - public static readonly MongoId STOCK_BENELLI_M3_TELESCOPIC = new MongoId( - "6259c3387d6aab70bc23a18d" - ); - public static readonly MongoId STOCK_CNC_GUNS_OVSV98_M12B = new MongoId( - "624c29ce09cd027dff2f8cd7" - ); - public static readonly MongoId STOCK_DANIEL_DEFENSE_TCS_12MM_BUTTPAD = new MongoId( - "6516e9bc5901745209404287" - ); - public static readonly MongoId STOCK_DANIEL_DEFENSE_TCS_20MM_BUTTPAD = new MongoId( - "6516e9d7e239bd0c487e3766" - ); - public static readonly MongoId STOCK_DOUBLESTAR_ACE_RECOIL_PAD = new MongoId( - "5d120a28d7ad1a1c8962e295" - ); - public static readonly MongoId STOCK_DVL10_LOBAEV_ARMS = new MongoId( - "58889d0c2459775bc215d981" - ); - public static readonly MongoId STOCK_FAB_DEFENSE_BUFFER_TUBE_FOR_AGR870 = new MongoId( - "5bfe89510db834001808a127" - ); + public static readonly MongoId STOCK_BENELLI_M3_MESA_TACTICAL_URBINO = new MongoId("625eb0faa6e3a82193267ad9"); + public static readonly MongoId STOCK_BENELLI_M3_TELESCOPIC = new MongoId("6259c3387d6aab70bc23a18d"); + public static readonly MongoId STOCK_CNC_GUNS_OVSV98_M12B = new MongoId("624c29ce09cd027dff2f8cd7"); + public static readonly MongoId STOCK_DANIEL_DEFENSE_TCS_12MM_BUTTPAD = new MongoId("6516e9bc5901745209404287"); + public static readonly MongoId STOCK_DANIEL_DEFENSE_TCS_20MM_BUTTPAD = new MongoId("6516e9d7e239bd0c487e3766"); + public static readonly MongoId STOCK_DOUBLESTAR_ACE_RECOIL_PAD = new MongoId("5d120a28d7ad1a1c8962e295"); + public static readonly MongoId STOCK_DVL10_LOBAEV_ARMS = new MongoId("58889d0c2459775bc215d981"); + public static readonly MongoId STOCK_FAB_DEFENSE_BUFFER_TUBE_FOR_AGR870 = new MongoId("5bfe89510db834001808a127"); public static readonly MongoId STOCK_FN_P90 = new MongoId("5cc700b9e4a949000f0f0f25"); public static readonly MongoId STOCK_FN_P90_BUTTPAD = new MongoId("5cc700cae4a949035e43ba72"); - public static readonly MongoId STOCK_FN_P90_DAMAGE_INDUSTRIES_BUTTPAD = new MongoId( - "5cc700d4e4a949000f0f0f28" - ); + public static readonly MongoId STOCK_FN_P90_DAMAGE_INDUSTRIES_BUTTPAD = new MongoId("5cc700d4e4a949000f0f0f28"); public static readonly MongoId STOCK_FN_PS90 = new MongoId("5cebec10d7f00c065703d185"); - public static readonly MongoId STOCK_FN_SCAR_CHEEK_REST = new MongoId( - "618167441cb55961fa0fdc71" - ); - public static readonly MongoId STOCK_FN_SCAR_CHEEK_REST_FDE = new MongoId( - "61825d24d3a39d50044c13af" - ); - public static readonly MongoId STOCK_FN_SCAR_FOLDING_POLYMER = new MongoId( - "61816734d8e3106d9806c1f3" - ); - public static readonly MongoId STOCK_FN_SCAR_FOLDING_POLYMER_STOCK_FDE = new MongoId( - "61825d06d92c473c770215de" - ); - public static readonly MongoId STOCK_FN_SCAR_JMAC_CUSTOMS_RSASCAR_1913_ADAPTER = new MongoId( - "66ffc246a81a4f85e70d4d06" - ); - public static readonly MongoId STOCK_FN_SCAR_RETRACTABLE_POLYMER = new MongoId( - "618167528004cc50514c34f9" - ); - public static readonly MongoId STOCK_FN_SCAR_RETRACTABLE_POLYMER_STOCK_FDE = new MongoId( - "61825d136ef05c2ce828f1cc" - ); - public static readonly MongoId STOCK_FN_SCAR_RUBBER_BUTTPAD = new MongoId( - "618167616ef05c2ce828f1a8" - ); - public static readonly MongoId STOCK_FN_SCAR_VLTOR_RESCAR_STOCK_ADAPTER = new MongoId( - "66ffbfb1a73a7bce3d0b45a8" - ); - public static readonly MongoId STOCK_FN_SCAR_VLTOR_RESCAR_STOCK_ADAPTER_PATRIOT_BROWN = - new MongoId("66ffc20ba73a7bce3d0b45ab"); - public static readonly MongoId STOCK_FN_SCAR_VLTOR_VSS11_POLYMER = new MongoId( - "66ffc2bd132225f0fe0611d8" - ); - public static readonly MongoId STOCK_FN_SCAR_VLTOR_VSS11_POLYMER_STOCK_PATRIOT_BROWN = - new MongoId("66ffc2ecfe9b3825960652f7"); - public static readonly MongoId STOCK_GLOCK_FAB_DEFENSE_GLR17 = new MongoId( - "5d1c702ad7ad1a632267f429" - ); - public static readonly MongoId STOCK_HK_416_ENHANCED_BUFFER_TUBE = new MongoId( - "5bb20e58d4351e00320205d7" - ); - public static readonly MongoId STOCK_HK_ADJUSTABLE_BUTTSTOCK_CHEEK_REST = new MongoId( - "61715e7e67085e45ef140b33" - ); - public static readonly MongoId STOCK_HK_G28_BUFFER_TUBE = new MongoId( - "617153016c780c1e710c9a2f" - ); - public static readonly MongoId STOCK_HK_G36_IDZ_ADJUSTABLE = new MongoId( - "67110d06723c2733410161e8" - ); - public static readonly MongoId STOCK_HK_G36_IDZ_CONCAVE_BUTTPAD = new MongoId( - "67110d6fa71d1f123d021cd3" - ); - public static readonly MongoId STOCK_HK_G36_IDZ_CONVEX_BUTTPAD = new MongoId( - "67110d5ed1758189fc0bd221" - ); - public static readonly MongoId STOCK_HK_G36_KV_ADJUSTABLE = new MongoId( - "622f14e899892a7f9e08f6c5" - ); + public static readonly MongoId STOCK_FN_SCAR_CHEEK_REST = new MongoId("618167441cb55961fa0fdc71"); + public static readonly MongoId STOCK_FN_SCAR_CHEEK_REST_FDE = new MongoId("61825d24d3a39d50044c13af"); + public static readonly MongoId STOCK_FN_SCAR_FOLDING_POLYMER = new MongoId("61816734d8e3106d9806c1f3"); + public static readonly MongoId STOCK_FN_SCAR_FOLDING_POLYMER_STOCK_FDE = new MongoId("61825d06d92c473c770215de"); + public static readonly MongoId STOCK_FN_SCAR_JMAC_CUSTOMS_RSASCAR_1913_ADAPTER = new MongoId("66ffc246a81a4f85e70d4d06"); + public static readonly MongoId STOCK_FN_SCAR_RETRACTABLE_POLYMER = new MongoId("618167528004cc50514c34f9"); + public static readonly MongoId STOCK_FN_SCAR_RETRACTABLE_POLYMER_STOCK_FDE = new MongoId("61825d136ef05c2ce828f1cc"); + public static readonly MongoId STOCK_FN_SCAR_RUBBER_BUTTPAD = new MongoId("618167616ef05c2ce828f1a8"); + public static readonly MongoId STOCK_FN_SCAR_VLTOR_RESCAR_STOCK_ADAPTER = new MongoId("66ffbfb1a73a7bce3d0b45a8"); + public static readonly MongoId STOCK_FN_SCAR_VLTOR_RESCAR_STOCK_ADAPTER_PATRIOT_BROWN = new MongoId("66ffc20ba73a7bce3d0b45ab"); + public static readonly MongoId STOCK_FN_SCAR_VLTOR_VSS11_POLYMER = new MongoId("66ffc2bd132225f0fe0611d8"); + public static readonly MongoId STOCK_FN_SCAR_VLTOR_VSS11_POLYMER_STOCK_PATRIOT_BROWN = new MongoId("66ffc2ecfe9b3825960652f7"); + public static readonly MongoId STOCK_GLOCK_FAB_DEFENSE_GLR17 = new MongoId("5d1c702ad7ad1a632267f429"); + public static readonly MongoId STOCK_HK_416_ENHANCED_BUFFER_TUBE = new MongoId("5bb20e58d4351e00320205d7"); + public static readonly MongoId STOCK_HK_ADJUSTABLE_BUTTSTOCK_CHEEK_REST = new MongoId("61715e7e67085e45ef140b33"); + public static readonly MongoId STOCK_HK_G28_BUFFER_TUBE = new MongoId("617153016c780c1e710c9a2f"); + public static readonly MongoId STOCK_HK_G36_IDZ_ADJUSTABLE = new MongoId("67110d06723c2733410161e8"); + public static readonly MongoId STOCK_HK_G36_IDZ_CONCAVE_BUTTPAD = new MongoId("67110d6fa71d1f123d021cd3"); + public static readonly MongoId STOCK_HK_G36_IDZ_CONVEX_BUTTPAD = new MongoId("67110d5ed1758189fc0bd221"); + public static readonly MongoId STOCK_HK_G36_KV_ADJUSTABLE = new MongoId("622f14e899892a7f9e08f6c5"); public static readonly MongoId STOCK_HK_G36_POLYMER = new MongoId("622f140da5958f63c67f1735"); - public static readonly MongoId STOCK_HK_G36_TOMMY_BUILT_AR_STOCK_ADAPTER = new MongoId( - "6706a159c67236b2f703bb95" - ); + public static readonly MongoId STOCK_HK_G36_TOMMY_BUILT_AR_STOCK_ADAPTER = new MongoId("6706a159c67236b2f703bb95"); public static readonly MongoId STOCK_HK_MP5_A2 = new MongoId("5926d3c686f77410de68ebc8"); - public static readonly MongoId STOCK_HK_MP5_A3_OLD_MODEL = new MongoId( - "5926d40686f7740f152b6b7e" - ); + public static readonly MongoId STOCK_HK_MP5_A3_OLD_MODEL = new MongoId("5926d40686f7740f152b6b7e"); public static readonly MongoId STOCK_HK_MP5_END_CAP = new MongoId("5c07c9660db834001a66b588"); public static readonly MongoId STOCK_HK_MP5K_END_CAP = new MongoId("5d2f25bc48f03502573e5d85"); public static readonly MongoId STOCK_HK_MP7A1 = new MongoId("5bcf0213d4351e0085327c17"); public static readonly MongoId STOCK_HK_MP7A2 = new MongoId("5bd704e7209c4d00d7167c31"); public static readonly MongoId STOCK_HK_UMP_POLYMER = new MongoId("5fc3e4ee7283c4046c5814af"); - public static readonly MongoId STOCK_HK417_ADJUSTABLE_BUTT = new MongoId( - "617155ee50224f204c1da3cd" - ); + public static readonly MongoId STOCK_HK417_ADJUSTABLE_BUTT = new MongoId("617155ee50224f204c1da3cd"); public static readonly MongoId STOCK_HK417_E2_BUTT = new MongoId("617154aa1cb55961fa0fdb3b"); - public static readonly MongoId STOCK_KRISS_VECTOR_GEN2_FOLDING = new MongoId( - "5fb6558ad6f0b2136f2d7eb7" - ); - public static readonly MongoId STOCK_KRISS_VECTOR_NONFOLDING_STOCK_ADAPTER = new MongoId( - "5fb655b748c711690e3a8d5a" - ); - public static readonly MongoId STOCK_KRISS_VECTOR_PISTOL_SLING_ADAPTER = new MongoId( - "5fb655a72b1b027b1f50bd06" - ); + public static readonly MongoId STOCK_KRISS_VECTOR_GEN2_FOLDING = new MongoId("5fb6558ad6f0b2136f2d7eb7"); + public static readonly MongoId STOCK_KRISS_VECTOR_NONFOLDING_STOCK_ADAPTER = new MongoId("5fb655b748c711690e3a8d5a"); + public static readonly MongoId STOCK_KRISS_VECTOR_PISTOL_SLING_ADAPTER = new MongoId("5fb655a72b1b027b1f50bd06"); public static readonly MongoId STOCK_KS23_WOODEN = new MongoId("5e848db4681bea2ada00daa9"); public static readonly MongoId STOCK_KS23M_WIRE = new MongoId("5e848dc4e4dbc5266a4ec63d"); - public static readonly MongoId STOCK_M14_SAGE_INTERNATIONAL_M14ALCS_CHASSIS = new MongoId( - "5addc7005acfc4001669f275" - ); - public static readonly MongoId STOCK_M14_SAGE_INTERNATIONAL_M14ALCS_MOD0 = new MongoId( - "5addc7ac5acfc400194dbd90" - ); - public static readonly MongoId STOCK_M14_TROY_SASS_CHASSIS = new MongoId( - "5ab372a310e891001717f0d8" - ); - public static readonly MongoId STOCK_M1A_PROMAG_ARCHANGEL_CHASSIS = new MongoId( - "5addbf175acfc408fb13965b" - ); + public static readonly MongoId STOCK_M14_SAGE_INTERNATIONAL_M14ALCS_CHASSIS = new MongoId("5addc7005acfc4001669f275"); + public static readonly MongoId STOCK_M14_SAGE_INTERNATIONAL_M14ALCS_MOD0 = new MongoId("5addc7ac5acfc400194dbd90"); + public static readonly MongoId STOCK_M14_TROY_SASS_CHASSIS = new MongoId("5ab372a310e891001717f0d8"); + public static readonly MongoId STOCK_M1A_PROMAG_ARCHANGEL_CHASSIS = new MongoId("5addbf175acfc408fb13965b"); public static readonly MongoId STOCK_M1A_SOCOM_16 = new MongoId("5aaf8e43e5b5b00015693246"); public static readonly MongoId STOCK_M60E4_BUTT = new MongoId("660126161347bc1a5f0f4dba"); public static readonly MongoId STOCK_M60E6_BUTT = new MongoId("6615202b96461aa8360271eb"); - public static readonly MongoId STOCK_M60E6_BUTTSTOCK_FDE = new MongoId( - "661520fb6f8e1a96340afaa6" - ); - public static readonly MongoId STOCK_M700_AB_ARMS_MODX_BUFFER_TUBE_ADAPTER = new MongoId( - "5cde77a9d7f00c000f261009" - ); - public static readonly MongoId STOCK_M700_AB_ARMS_MODX_GEN_3_CHASSIS = new MongoId( - "5cde739cd7f00c0010373bd3" - ); - public static readonly MongoId STOCK_M700_AI_AT_AICS_POLYMER_CHASSIS = new MongoId( - "5d25d0ac8abbc3054f3e61f7" - ); - public static readonly MongoId STOCK_M700_HOGUE_OVERMOLDED_GHILLIE = new MongoId( - "5bfeb32b0db834001a6694d9" - ); - public static readonly MongoId STOCK_M700_MAGPUL_PRO_700_CHASSIS = new MongoId( - "5cdeac22d7f00c000f26168f" - ); - public static readonly MongoId STOCK_M700_MAGPUL_PRO_700_FOLDING = new MongoId( - "5cdeac42d7f00c000d36ba73" - ); - public static readonly MongoId STOCK_M700_PROMAG_ARCHANGEL_CHASSIS = new MongoId( - "5cf13123d7f00c1085616a50" - ); - public static readonly MongoId STOCK_M870_MAGPUL_SGA_POLYMER = new MongoId( - "5a78813bc5856700186c4abe" - ); - public static readonly MongoId STOCK_M870_MESA_TACTICAL_LEO_STOCK_ADAPTER = new MongoId( - "5ae35b315acfc4001714e8b0" - ); - public static readonly MongoId STOCK_M870_SHOCKWAVE_RAPTOR_GRIP = new MongoId( - "5a788169c5856700142fdd9e" - ); + public static readonly MongoId STOCK_M60E6_BUTTSTOCK_FDE = new MongoId("661520fb6f8e1a96340afaa6"); + public static readonly MongoId STOCK_M700_AB_ARMS_MODX_BUFFER_TUBE_ADAPTER = new MongoId("5cde77a9d7f00c000f261009"); + public static readonly MongoId STOCK_M700_AB_ARMS_MODX_GEN_3_CHASSIS = new MongoId("5cde739cd7f00c0010373bd3"); + public static readonly MongoId STOCK_M700_AI_AT_AICS_POLYMER_CHASSIS = new MongoId("5d25d0ac8abbc3054f3e61f7"); + public static readonly MongoId STOCK_M700_HOGUE_OVERMOLDED_GHILLIE = new MongoId("5bfeb32b0db834001a6694d9"); + public static readonly MongoId STOCK_M700_MAGPUL_PRO_700_CHASSIS = new MongoId("5cdeac22d7f00c000f26168f"); + public static readonly MongoId STOCK_M700_MAGPUL_PRO_700_FOLDING = new MongoId("5cdeac42d7f00c000d36ba73"); + public static readonly MongoId STOCK_M700_PROMAG_ARCHANGEL_CHASSIS = new MongoId("5cf13123d7f00c1085616a50"); + public static readonly MongoId STOCK_M870_MAGPUL_SGA_POLYMER = new MongoId("5a78813bc5856700186c4abe"); + public static readonly MongoId STOCK_M870_MESA_TACTICAL_LEO_STOCK_ADAPTER = new MongoId("5ae35b315acfc4001714e8b0"); + public static readonly MongoId STOCK_M870_SHOCKWAVE_RAPTOR_GRIP = new MongoId("5a788169c5856700142fdd9e"); public static readonly MongoId STOCK_M870_SPS_POLYMER = new MongoId("5a7880d0c5856700142fdd9d"); - public static readonly MongoId STOCK_MAGPUL_MOE_CARBINE_RUBBER_BUTTPAD = new MongoId( - "58d2912286f7744e27117493" - ); - public static readonly MongoId STOCK_MESA_TACTICAL_CROSSHAIR_HYDRAULIC_BUFFER_TUBE = - new MongoId("5ef1ba28c64c5d0dfc0571a5"); - public static readonly MongoId STOCK_MOSIN_RIFLE_AIM_SPORTS_RECOIL_PAD = new MongoId( - "5bbde409d4351e003562b036" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_ATI_MONTE_CARLO = new MongoId( - "5bbdb870d4351e00367fb67d" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_CARBINE = new MongoId( - "5bfd384c0db834001a6691d3" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_INFANTRY = new MongoId( - "5bfd35380db83400232fe5cc" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_PROMAG_ARCHANGEL_OPFOR_PRS_CHASSIS = - new MongoId("5bae13bad4351e00320204af"); - public static readonly MongoId STOCK_MOSIN_RIFLE_SAWEDOFF = new MongoId( - "5bfd36ad0db834001c38ef66" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_SAWEDOFF_SNIPER = new MongoId( - "5bfd36290db834001966869a" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_SNIPER_CARBINE = new MongoId( - "5bfd37c80db834001d23e842" - ); - public static readonly MongoId STOCK_MOSIN_RIFLE_STANDARD = new MongoId( - "5ae096d95acfc400185c2c81" - ); - public static readonly MongoId STOCK_MOSSBERG_590A1_MAGPUL_SGA = new MongoId( - "5eea217fc64c5d0dfc05712a" - ); - public static readonly MongoId STOCK_MOSSBERG_590A1_MESA_TACTICAL_LEO_GEN1_STOCK_ADAPTER = - new MongoId("5ef1b9f0c64c5d0dfc0571a1"); - public static readonly MongoId STOCK_MOSSBERG_590A1_POLYMER = new MongoId( - "5e87116b81c4ed43e83cefdd" - ); + public static readonly MongoId STOCK_MAGPUL_MOE_CARBINE_RUBBER_BUTTPAD = new MongoId("58d2912286f7744e27117493"); + public static readonly MongoId STOCK_MESA_TACTICAL_CROSSHAIR_HYDRAULIC_BUFFER_TUBE = new MongoId("5ef1ba28c64c5d0dfc0571a5"); + public static readonly MongoId STOCK_MOSIN_RIFLE_AIM_SPORTS_RECOIL_PAD = new MongoId("5bbde409d4351e003562b036"); + public static readonly MongoId STOCK_MOSIN_RIFLE_ATI_MONTE_CARLO = new MongoId("5bbdb870d4351e00367fb67d"); + public static readonly MongoId STOCK_MOSIN_RIFLE_CARBINE = new MongoId("5bfd384c0db834001a6691d3"); + public static readonly MongoId STOCK_MOSIN_RIFLE_INFANTRY = new MongoId("5bfd35380db83400232fe5cc"); + public static readonly MongoId STOCK_MOSIN_RIFLE_PROMAG_ARCHANGEL_OPFOR_PRS_CHASSIS = new MongoId("5bae13bad4351e00320204af"); + public static readonly MongoId STOCK_MOSIN_RIFLE_SAWEDOFF = new MongoId("5bfd36ad0db834001c38ef66"); + public static readonly MongoId STOCK_MOSIN_RIFLE_SAWEDOFF_SNIPER = new MongoId("5bfd36290db834001966869a"); + public static readonly MongoId STOCK_MOSIN_RIFLE_SNIPER_CARBINE = new MongoId("5bfd37c80db834001d23e842"); + public static readonly MongoId STOCK_MOSIN_RIFLE_STANDARD = new MongoId("5ae096d95acfc400185c2c81"); + public static readonly MongoId STOCK_MOSSBERG_590A1_MAGPUL_SGA = new MongoId("5eea217fc64c5d0dfc05712a"); + public static readonly MongoId STOCK_MOSSBERG_590A1_MESA_TACTICAL_LEO_GEN1_STOCK_ADAPTER = new MongoId("5ef1b9f0c64c5d0dfc0571a1"); + public static readonly MongoId STOCK_MOSSBERG_590A1_POLYMER = new MongoId("5e87116b81c4ed43e83cefdd"); public static readonly MongoId STOCK_MP133153_PLASTIC = new MongoId("56083be64bdc2d20478b456f"); - public static readonly MongoId STOCK_MP133153_PLASTIC_PISTOL_GRIP = new MongoId( - "56083a334bdc2dc8488b4571" - ); + public static readonly MongoId STOCK_MP133153_PLASTIC_PISTOL_GRIP = new MongoId("56083a334bdc2dc8488b4571"); public static readonly MongoId STOCK_MP133153_WOODEN = new MongoId("56083cba4bdc2de22e8b456f"); - public static readonly MongoId STOCK_MP155_ULTIMA_LARGE_RECOIL_PAD = new MongoId( - "606f263a8900dc2d9a55b68d" - ); - public static readonly MongoId STOCK_MP155_ULTIMA_MEDIUM_RECOIL_PAD = new MongoId( - "606f262c6d0bd7580617bafa" - ); - public static readonly MongoId STOCK_MP155_ULTIMA_POLYMER = new MongoId( - "606eef756d0bd7580617baf8" - ); - public static readonly MongoId STOCK_MP155_ULTIMA_THIN_RECOIL_PAD = new MongoId( - "606ef0812535c57a13424d20" - ); + public static readonly MongoId STOCK_MP155_ULTIMA_LARGE_RECOIL_PAD = new MongoId("606f263a8900dc2d9a55b68d"); + public static readonly MongoId STOCK_MP155_ULTIMA_MEDIUM_RECOIL_PAD = new MongoId("606f262c6d0bd7580617bafa"); + public static readonly MongoId STOCK_MP155_ULTIMA_POLYMER = new MongoId("606eef756d0bd7580617baf8"); + public static readonly MongoId STOCK_MP155_ULTIMA_THIN_RECOIL_PAD = new MongoId("606ef0812535c57a13424d20"); public static readonly MongoId STOCK_MP155_WALNUT = new MongoId("607d5a891246154cad35d6aa"); public static readonly MongoId STOCK_MP18_POLYMER = new MongoId("61f803b8ced75b2e852e35f8"); public static readonly MongoId STOCK_MP18_WOODEN = new MongoId("61f7b234ea4ab34f2f59c3ec"); public static readonly MongoId STOCK_MP431C_BUTTPAD = new MongoId("611a31ce5b7ffe001b4649d1"); public static readonly MongoId STOCK_MP9 = new MongoId("5de910da8b6c4240ba2651b5"); - public static readonly MongoId STOCK_MPXMCX_MAXIM_DEFENSE_CQB = new MongoId( - "5c5db6ee2e221600113fba54" - ); + public static readonly MongoId STOCK_MPXMCX_MAXIM_DEFENSE_CQB = new MongoId("5c5db6ee2e221600113fba54"); public static readonly MongoId STOCK_MPXMCX_PMM_ULSS = new MongoId("5c5db6f82e2216003a0fe914"); public static readonly MongoId STOCK_MTS_2001 = new MongoId("5adf23995acfc400185c2aeb"); public static readonly MongoId STOCK_MTS25512_WOODEN = new MongoId("612781056f3d944a17348d60"); public static readonly MongoId STOCK_OPSKS_WOODEN = new MongoId("587e0531245977466077a0f7"); public static readonly MongoId STOCK_ORSIS_T5000M = new MongoId("5df35ddddfc58d14537c2036"); - public static readonly MongoId STOCK_ORSIS_T5000M_ALUMINIUM_BODY = new MongoId( - "5df35e59c41b2312ea3334d5" - ); - public static readonly MongoId STOCK_PK_ZENIT_PT2_KLASSIKA = new MongoId( - "6492d7847363b8a52206bc52" - ); + public static readonly MongoId STOCK_ORSIS_T5000M_ALUMINIUM_BODY = new MongoId("5df35e59c41b2312ea3334d5"); + public static readonly MongoId STOCK_PK_ZENIT_PT2_KLASSIKA = new MongoId("6492d7847363b8a52206bc52"); public static readonly MongoId STOCK_PKM_WOODEN = new MongoId("646371a9f2404ab67905c8e6"); public static readonly MongoId STOCK_PKP_POLYMER = new MongoId("6492e3a97df7d749100e29ee"); - public static readonly MongoId STOCK_PP1901_VITYAZ_METAL_SKELETON = new MongoId( - "599851db86f77467372f0a18" - ); + public static readonly MongoId STOCK_PP1901_VITYAZ_METAL_SKELETON = new MongoId("599851db86f77467372f0a18"); public static readonly MongoId STOCK_PPSH41 = new MongoId("5ea03e9400685063ec28bfa4"); public static readonly MongoId STOCK_RPD_WOODEN = new MongoId("6513f1798cb24472490ee331"); - public static readonly MongoId STOCK_RPK16_BUFFER_TUBE = new MongoId( - "5beec8b20db834001961942a" - ); + public static readonly MongoId STOCK_RPK16_BUFFER_TUBE = new MongoId("5beec8b20db834001961942a"); public static readonly MongoId STOCK_SA58_BRS = new MongoId("5b7d64555acfc4001876c8e2"); - public static readonly MongoId STOCK_SA58_BUFFER_TUBE_ADAPTER = new MongoId( - "5b099bf25acfc4001637e683" - ); + public static readonly MongoId STOCK_SA58_BUFFER_TUBE_ADAPTER = new MongoId("5b099bf25acfc4001637e683"); public static readonly MongoId STOCK_SA58_FOLDING = new MongoId("5b7d63cf5acfc4001876c8df"); - public static readonly MongoId STOCK_SA58_HUMPBACK_POLYMER = new MongoId( - "5b7d645e5acfc400170e2f90" - ); + public static readonly MongoId STOCK_SA58_HUMPBACK_POLYMER = new MongoId("5b7d645e5acfc400170e2f90"); public static readonly MongoId STOCK_SA58_SPR = new MongoId("5b7d63de5acfc400170e2f8d"); - public static readonly MongoId STOCK_SA58FAL_MAGPUL_PRS_2_POLYMER = new MongoId( - "5b7d63b75acfc400170e2f8a" - ); - public static readonly MongoId STOCK_SAKO_TRG_M10_CHASSIS = new MongoId( - "673cb212e695740be0047a46" - ); - public static readonly MongoId STOCK_SB_TACTICAL_MPX_PISTOL_STABILIZING_BRACE = new MongoId( - "6761496fe2cf1419500357e9" - ); - public static readonly MongoId STOCK_SIG_SAUER_COLLAPSINGTELESCOPING = new MongoId( - "5894a13e86f7742405482982" - ); - public static readonly MongoId STOCK_SIG_SAUER_FOLDING_KNUCKLE_STOCK_ADAPTER = new MongoId( - "58ac1bf086f77420ed183f9f" - ); - public static readonly MongoId STOCK_SIG_SAUER_LOCKING_STOCK_HINGE_ASSEMBLY = new MongoId( - "6529348224cbe3c74a05e5c4" - ); - public static readonly MongoId STOCK_SIG_SAUER_STOCK_ADAPTER_LOW_PROFILE_TUBE_COYOTE_TAN = - new MongoId("6529366450dc782999054ba0"); - public static readonly MongoId STOCK_SIG_SAUER_TELESCOPINGFOLDING = new MongoId( - "5fbcc429900b1d5091531dd7" - ); - public static readonly MongoId STOCK_SIG_SAUER_THIN_SIDEFOLDING = new MongoId( - "5fbcc437d724d907e2077d5c" - ); - public static readonly MongoId STOCK_SKS_ATI_MONTE_CARLO = new MongoId( - "653ecef836fae5a82f02b869" - ); - public static readonly MongoId STOCK_SKS_FAB_DEFENSE_UAS_BUTT = new MongoId( - "653ed132896b99b40a0292e6" - ); - public static readonly MongoId STOCK_SKS_FAB_DEFENSE_UAS_CHASSIS = new MongoId( - "5d0236dad7ad1a0940739d29" - ); - public static readonly MongoId STOCK_SKS_TAPCO_INTRAFUSE_BUFFER_TUBE = new MongoId( - "5afd7e095acfc40017541f61" - ); - public static readonly MongoId STOCK_SKS_TAPCO_INTRAFUSE_CHASSIS = new MongoId( - "5afd7ded5acfc40017541f5e" - ); - public static readonly MongoId STOCK_SKS_TOZ_WOODEN_STOCK_56A231_SB5 = new MongoId( - "574dad8024597745964bf05c" - ); + public static readonly MongoId STOCK_SA58FAL_MAGPUL_PRS_2_POLYMER = new MongoId("5b7d63b75acfc400170e2f8a"); + public static readonly MongoId STOCK_SAKO_TRG_M10_CHASSIS = new MongoId("673cb212e695740be0047a46"); + public static readonly MongoId STOCK_SB_TACTICAL_MPX_PISTOL_STABILIZING_BRACE = new MongoId("6761496fe2cf1419500357e9"); + public static readonly MongoId STOCK_SIG_SAUER_COLLAPSINGTELESCOPING = new MongoId("5894a13e86f7742405482982"); + public static readonly MongoId STOCK_SIG_SAUER_FOLDING_KNUCKLE_STOCK_ADAPTER = new MongoId("58ac1bf086f77420ed183f9f"); + public static readonly MongoId STOCK_SIG_SAUER_LOCKING_STOCK_HINGE_ASSEMBLY = new MongoId("6529348224cbe3c74a05e5c4"); + public static readonly MongoId STOCK_SIG_SAUER_STOCK_ADAPTER_LOW_PROFILE_TUBE_COYOTE_TAN = new MongoId("6529366450dc782999054ba0"); + public static readonly MongoId STOCK_SIG_SAUER_TELESCOPINGFOLDING = new MongoId("5fbcc429900b1d5091531dd7"); + public static readonly MongoId STOCK_SIG_SAUER_THIN_SIDEFOLDING = new MongoId("5fbcc437d724d907e2077d5c"); + public static readonly MongoId STOCK_SKS_ATI_MONTE_CARLO = new MongoId("653ecef836fae5a82f02b869"); + public static readonly MongoId STOCK_SKS_FAB_DEFENSE_UAS_BUTT = new MongoId("653ed132896b99b40a0292e6"); + public static readonly MongoId STOCK_SKS_FAB_DEFENSE_UAS_CHASSIS = new MongoId("5d0236dad7ad1a0940739d29"); + public static readonly MongoId STOCK_SKS_TAPCO_INTRAFUSE_BUFFER_TUBE = new MongoId("5afd7e095acfc40017541f61"); + public static readonly MongoId STOCK_SKS_TAPCO_INTRAFUSE_CHASSIS = new MongoId("5afd7ded5acfc40017541f5e"); + public static readonly MongoId STOCK_SKS_TOZ_WOODEN_STOCK_56A231_SB5 = new MongoId("574dad8024597745964bf05c"); public static readonly MongoId STOCK_SOK12_AKSTYLE = new MongoId("57616ca52459773c69055192"); public static readonly MongoId STOCK_SR2M_TOPFOLDING = new MongoId("62e292e7b6c0ee2f230cee00"); public static readonly MongoId STOCK_SR2MP_TOPFOLDING = new MongoId("62e2969582ebf260c20539c2"); - public static readonly MongoId STOCK_SV98_CNC_GUNS_OVSV98_CHASSIS = new MongoId( - "623b2e9d11c3296b440d1638" - ); + public static readonly MongoId STOCK_SV98_CNC_GUNS_OVSV98_CHASSIS = new MongoId("623b2e9d11c3296b440d1638"); public static readonly MongoId STOCK_SV98_WOODEN = new MongoId("61faa91878830f069b6b7967"); - public static readonly MongoId STOCK_SVDS_LYNX_ARMS_HINGE_BUFFER_TUBE_ADAPTER = new MongoId( - "6197b229af1f5202c57a9bea" - ); + public static readonly MongoId STOCK_SVDS_LYNX_ARMS_HINGE_BUFFER_TUBE_ADAPTER = new MongoId("6197b229af1f5202c57a9bea"); public static readonly MongoId STOCK_SVDS_POLYMER = new MongoId("5c471b5d2e221602b21d4e14"); public static readonly MongoId STOCK_TOZ106 = new MongoId("5a38ef1fc4a282000b1521f6"); - public static readonly MongoId STOCK_TOZ106_CUSTOM_CUT_MOSIN = new MongoId( - "5c99f3592e221644fc633070" - ); - public static readonly MongoId STOCK_TOZ106_FAB_DEFENSE_GPCP_CHEEK_REST = new MongoId( - "626a8ae89e664a2e2a75f409" - ); - public static readonly MongoId STOCK_UZI_PRO_A3_TACTICAL_MODULAR_FOLDING_BRACE = new MongoId( - "6686717ffb75ee4a5e02eb19" - ); - public static readonly MongoId STOCK_UZI_PRO_A3_TACTICAL_REAR_STOCK_ADAPTER = new MongoId( - "668672b8c99550c6fd0f0b29" - ); - public static readonly MongoId STOCK_UZI_PRO_BACKPLATE = new MongoId( - "66881008f23233ee9a0742e7" - ); - public static readonly MongoId STOCK_UZI_PRO_CSM_STOCK_ADAPTER = new MongoId( - "669cf78806768ff39504fc1c" - ); + public static readonly MongoId STOCK_TOZ106_CUSTOM_CUT_MOSIN = new MongoId("5c99f3592e221644fc633070"); + public static readonly MongoId STOCK_TOZ106_FAB_DEFENSE_GPCP_CHEEK_REST = new MongoId("626a8ae89e664a2e2a75f409"); + public static readonly MongoId STOCK_UZI_PRO_A3_TACTICAL_MODULAR_FOLDING_BRACE = new MongoId("6686717ffb75ee4a5e02eb19"); + public static readonly MongoId STOCK_UZI_PRO_A3_TACTICAL_REAR_STOCK_ADAPTER = new MongoId("668672b8c99550c6fd0f0b29"); + public static readonly MongoId STOCK_UZI_PRO_BACKPLATE = new MongoId("66881008f23233ee9a0742e7"); + public static readonly MongoId STOCK_UZI_PRO_CSM_STOCK_ADAPTER = new MongoId("669cf78806768ff39504fc1c"); public static readonly MongoId STOCK_UZI_PRO_SBR_BUTT = new MongoId("66867310f3734a938b077f79"); - public static readonly MongoId STOCK_UZI_PRO_STABILIZING_BRACE = new MongoId( - "668032ba74b8f2050c0b917d" - ); - public static readonly MongoId STOCK_UZI_STORMWERKZ_STOCK_ADAPTER = new MongoId( - "66992f4db9f31ddda10dd1c8" - ); + public static readonly MongoId STOCK_UZI_PRO_STABILIZING_BRACE = new MongoId("668032ba74b8f2050c0b917d"); + public static readonly MongoId STOCK_UZI_STORMWERKZ_STOCK_ADAPTER = new MongoId("66992f4db9f31ddda10dd1c8"); public static readonly MongoId STOCK_UZI_TYPE_3_BUTT = new MongoId("6698c9ed36ba38d291017713"); public static readonly MongoId STOCK_UZI_TYPE_5_BUTT = new MongoId("6699249f3c4fda6471005cba"); public static readonly MongoId STOCK_UZI_TYPE_6_BUTT = new MongoId("669924a69950f5f4cd060295"); public static readonly MongoId STOCK_UZI_TYPE_7_BUTT = new MongoId("6698c9e07356874dfe0a0b88"); - public static readonly MongoId STOCK_VPO101_SVDSTYLE_WALNUT = new MongoId( - "5f63405df5750b524b45f114" - ); + public static readonly MongoId STOCK_VPO101_SVDSTYLE_WALNUT = new MongoId("5f63405df5750b524b45f114"); public static readonly MongoId STOCK_VPO101_WOODEN = new MongoId("5c503af12e221602b177ca02"); - public static readonly MongoId STOCK_VPO136_VEPRKM_WOODEN = new MongoId( - "59e6227d86f77440d64f5dc2" - ); + public static readonly MongoId STOCK_VPO136_VEPRKM_WOODEN = new MongoId("59e6227d86f77440d64f5dc2"); public static readonly MongoId STOCK_VPO209_WOODEN = new MongoId("59e89d0986f77427600d226e"); public static readonly MongoId STOCK_VPO215_WOODEN = new MongoId("5de655be4a9f347bc92edb88"); public static readonly MongoId STOCK_VSK94 = new MongoId("6452519e3d52156624001fd5"); public static readonly MongoId STOCK_VSS_WOODEN = new MongoId("578395e82459774a0e553c7b"); - public static readonly MongoId TACTICALCOMBO_BE_MEYERS_MAWLC1_TACTICAL_DEVICE = new MongoId( - "644a3df63b0b6f03e101e065" + public static readonly MongoId TACTICALCOMBO_BE_MEYERS_MAWLC1_TACTICAL_DEVICE = new MongoId("644a3df63b0b6f03e101e065"); + public static readonly MongoId TACTICALCOMBO_GLOCK_GTL_21_TACTICAL_FLASHLIGHT_WITH_LASER = new MongoId("5a800961159bd4315e3a1657"); + public static readonly MongoId TACTICALCOMBO_HOLOSUN_LS321_TACTICAL_DEVICE = new MongoId("57fd23e32459772d0805bcf1"); + public static readonly MongoId TACTICALCOMBO_INSIGHT_ANPEQ2_TACTICAL_DEVICE = new MongoId("5d10b49bd7ad1a1a560708b0"); + public static readonly MongoId TACTICALCOMBO_INSIGHT_WMX200_TACTICAL_FLASHLIGHT = new MongoId("626becf9582c3e319310b837"); + public static readonly MongoId TACTICALCOMBO_L3HARRIS_ANPEQ15_TACTICAL_DEVICE = new MongoId("544909bb4bdc2d6f028b4577"); + public static readonly MongoId TACTICALCOMBO_L3HARRIS_LA5BPEQ_TACTICAL_DEVICE = new MongoId("5c06595c0db834001a66af6c"); + public static readonly MongoId TACTICALCOMBO_NCSTAR_TACTICAL_BLUE_LASER = new MongoId("5cc9c20cd7f00c001336c65d"); + public static readonly MongoId TACTICALCOMBO_OLIGHT_BALDR_PRO_TACTICAL_FLASHLIGHT_WITH_LASER = new MongoId("6272370ee4013c5d7e31f418"); + public static readonly MongoId TACTICALCOMBO_OLIGHT_BALDR_PRO_TACTICAL_FLASHLIGHT_WITH_LASER_TAN = new MongoId( + "6272379924e29f06af4d5ecb" ); - public static readonly MongoId TACTICALCOMBO_GLOCK_GTL_21_TACTICAL_FLASHLIGHT_WITH_LASER = - new MongoId("5a800961159bd4315e3a1657"); - public static readonly MongoId TACTICALCOMBO_HOLOSUN_LS321_TACTICAL_DEVICE = new MongoId( - "57fd23e32459772d0805bcf1" - ); - public static readonly MongoId TACTICALCOMBO_INSIGHT_ANPEQ2_TACTICAL_DEVICE = new MongoId( - "5d10b49bd7ad1a1a560708b0" - ); - public static readonly MongoId TACTICALCOMBO_INSIGHT_WMX200_TACTICAL_FLASHLIGHT = new MongoId( - "626becf9582c3e319310b837" - ); - public static readonly MongoId TACTICALCOMBO_L3HARRIS_ANPEQ15_TACTICAL_DEVICE = new MongoId( - "544909bb4bdc2d6f028b4577" - ); - public static readonly MongoId TACTICALCOMBO_L3HARRIS_LA5BPEQ_TACTICAL_DEVICE = new MongoId( - "5c06595c0db834001a66af6c" - ); - public static readonly MongoId TACTICALCOMBO_NCSTAR_TACTICAL_BLUE_LASER = new MongoId( - "5cc9c20cd7f00c001336c65d" - ); - public static readonly MongoId TACTICALCOMBO_OLIGHT_BALDR_PRO_TACTICAL_FLASHLIGHT_WITH_LASER = - new MongoId("6272370ee4013c5d7e31f418"); - public static readonly MongoId TACTICALCOMBO_OLIGHT_BALDR_PRO_TACTICAL_FLASHLIGHT_WITH_LASER_TAN = - new MongoId("6272379924e29f06af4d5ecb"); - public static readonly MongoId TACTICALCOMBO_STEINER_DBALPL_TACTICAL_DEVICE = new MongoId( - "5d2369418abbc306c62e0c80" - ); - public static readonly MongoId TACTICALCOMBO_STEINER_LASTAC_2_TACTICAL_FLASHLIGHT = new MongoId( - "5b07dd285acfc4001754240d" - ); - public static readonly MongoId TACTICALCOMBO_SUREFIRE_X400_ULTRA_TACTICAL_FLASHLIGHT_WITH_LASER = - new MongoId("56def37dd2720bec348b456a"); - public static readonly MongoId TACTICALCOMBO_SUREFIRE_XC1_TACTICAL_FLASHLIGHT = new MongoId( - "5a7b483fe899ef0016170d15" - ); - public static readonly MongoId TACTICALCOMBO_TT_DLP_TACTICAL_PRECISION_LASER_SIGHT = - new MongoId("5c079ed60db834001a66b372"); - public static readonly MongoId TACTICALCOMBO_WILCOX_RAPTAR_ES_TACTICAL_RANGEFINDER = - new MongoId("61605d88ffa6e502ac5e7eeb"); - public static readonly MongoId TACTICALCOMBO_ZENIT_KLESCH2IKS_IR_ILLUMINATOR_WITH_LASER = - new MongoId("5a5f1ce64f39f90b401987bc"); - public static readonly MongoId TACTICALCOMBO_ZENIT_KLESCH2P_FLASHLIGHT_WITH_LASER = new MongoId( - "560d657b4bdc2da74d8b4572" - ); - public static readonly MongoId TACTICALCOMBO_ZENIT_KLESCH2U_TACTICAL_FLASHLIGHT = new MongoId( - "5b3a337e5acfc4704b4a19a0" - ); - public static readonly MongoId TACTICALCOMBO_ZENIT_PERST3_TACTICAL_DEVICE = new MongoId( - "5c5952732e2216398b5abda2" - ); - public static readonly MongoId THERMALVISION_T7_THERMAL_GOGGLES_WITH_A_NIGHT_VISION_MOUNT = - new MongoId("5c110624d174af029e69734c"); - public static readonly MongoId VEST_511_TACTICAL_TACTEC_PLATE_CARRIER_RANGER_GREEN = - new MongoId("5b44cad286f77402a54ae7e5"); - public static readonly MongoId VEST_511_TACTICAL_TACTEC_PLATE_CARRIER_STORM = new MongoId( - "67ab4b2d6f7ae4aa550bbcf6" - ); - public static readonly MongoId VEST_6B3TM01_ARMORED_RIG_KHAKI = new MongoId( - "5d5d646386f7742797261fd9" - ); - public static readonly MongoId VEST_6B515_ZH86_ULEY_ARMORED_RIG_FLORA = new MongoId( - "5c0e446786f7742013381639" - ); - public static readonly MongoId VEST_6B516_ZH86_ULEY_ARMORED_RIG_KHAKI = new MongoId( - "5c0e3eb886f7742015526062" - ); - public static readonly MongoId VEST_ANA_TACTICAL_ALPHA_CHEST_RIG_MULTICAM = new MongoId( - "67ab3ea96d7ece17bf0096f6" - ); - public static readonly MongoId VEST_ANA_TACTICAL_ALPHA_CHEST_RIG_OLIVE_DRAB = new MongoId( - "592c2d1a86f7746dbe2af32a" - ); - public static readonly MongoId VEST_ANA_TACTICAL_M1_PLATE_CARRIER_OLIVE_DRAB = new MongoId( - "5c0e722886f7740458316a57" - ); - public static readonly MongoId VEST_ANA_TACTICAL_M2_PLATE_CARRIER_EMR = new MongoId( - "5ab8dced86f774646209ec87" - ); - public static readonly MongoId VEST_ARS_ARMA_A18_SKANDA_PLATE_CARRIER_MULTICAM = new MongoId( - "5d5d87f786f77427997cfaef" - ); - public static readonly MongoId VEST_ARS_ARMA_CPC_MOD1_PLATE_CARRIER_ATACS_FG = new MongoId( - "5e4ac41886f77406a511c9a8" - ); - public static readonly MongoId VEST_AZIMUT_SS_KHAMELION_CHEST_HARNESS_OLIVE = new MongoId( - "63611865ba5b90db0c0399d1" - ); - public static readonly MongoId VEST_AZIMUT_SS_ZHUK_CHEST_HARNESS_BLACK = new MongoId( - "603648ff5a45383c122086ac" - ); - public static readonly MongoId VEST_AZIMUT_SS_ZHUK_CHEST_HARNESS_SURPAT = new MongoId( - "6040dd4ddcf9592f401632d2" - ); - public static readonly MongoId VEST_BLACKHAWK_COMMANDO_CHEST_HARNESS_BLACK = new MongoId( - "5c0e9f2c86f77432297fe0a3" - ); - public static readonly MongoId VEST_BLACKHAWK_COMMANDO_CHEST_HARNESS_DESERT_TAN = new MongoId( - "5b44c8ea86f7742d1627baf1" - ); - public static readonly MongoId VEST_BLACKROCK_CHEST_RIG_GRAY = new MongoId( - "5648a69d4bdc2ded0b8b457b" - ); - public static readonly MongoId VEST_BLACKROCK_CHEST_RIG_KHAKI = new MongoId( - "67ab3f146d7ece17bf0096ff" - ); - public static readonly MongoId VEST_CQC_OSPREY_MK4A_PLATE_CARRIER_ASSAULT_MTP = new MongoId( - "60a3c70cde5f453f634816a3" - ); - public static readonly MongoId VEST_CQC_OSPREY_MK4A_PLATE_CARRIER_PROTECTION_MTP = new MongoId( - "60a3c68c37ea821725773ef5" - ); - public static readonly MongoId VEST_CRYE_PRECISION_AVS_PLATE_CARRIER_MULTICAM = new MongoId( - "67ab49aab9c7a1e18c095686" - ); - public static readonly MongoId VEST_CRYE_PRECISION_AVS_PLATE_CARRIER_RANGER_GREEN = new MongoId( - "544a5caa4bdc2d1a388b4568" - ); - public static readonly MongoId VEST_CRYE_PRECISION_AVS_PLATE_CARRIER_TAGILLA_EDITION = - new MongoId("609e860ebd219504d8507525"); - public static readonly MongoId VEST_CRYE_PRECISION_CPC_PLATE_CARRIER_GOONS_EDITION = - new MongoId("628b9c7d45122232a872358f"); - public static readonly MongoId VEST_CSA_CHEST_RIG_BLACK = new MongoId( - "6034d0230ca681766b6a0fb5" - ); - public static readonly MongoId VEST_DIRECT_ACTION_THUNDERBOLT_COMPACT_CHEST_RIG_SHADOW_GREY = - new MongoId("5f5f41f56760b4138443b352"); - public static readonly MongoId VEST_DIY_IDEA_CHEST_RIG = new MongoId( - "5fd4c4fa16cac650092f6771" - ); - public static readonly MongoId VEST_DYNAFORCE_TRITON_M43A_CHEST_HARNESS_BLACK = new MongoId( - "5ca20abf86f77418567a43f2" - ); - public static readonly MongoId VEST_EAGLE_ALLIED_INDUSTRIES_MBSS_PLATE_CARRIER_COYOTE_BROWN = - new MongoId("64a5366719bab53bd203bf33"); - public static readonly MongoId VEST_EAGLE_INDUSTRIES_MMAC_PLATE_CARRIER_RANGER_GREEN = - new MongoId("61bc85697113f767765c7fe7"); - public static readonly MongoId VEST_ECLIPSE_RBAVAF_PLATE_CARRIER_RANGER_GREEN = new MongoId( - "628dc750b910320f4c27a732" - ); - public static readonly MongoId VEST_FIRSTSPEAR_STRANDHOGG_PLATE_CARRIER_RANGER_GREEN = - new MongoId("61bcc89aef0f505f0c6cd0fc"); - public static readonly MongoId VEST_GEAR_CRAFT_GCBSSMK1_CHEST_RIG_ATACS_FG = new MongoId( - "5fd4c60f875c30179f5d04c2" - ); - public static readonly MongoId VEST_HALEY_STRATEGIC_D3CRX_CHEST_HARNESS_RANGER_GREEN = - new MongoId("5d5d85c586f774279a21cbdb"); - public static readonly MongoId VEST_LBT1961A_LOAD_BEARING_CHEST_RIG_GOONS_EDITION = new MongoId( - "628baf0b967de16aab5a4f36" - ); - public static readonly MongoId VEST_LBT1961A_LOAD_BEARING_CHEST_RIG_MAS_GREY = new MongoId( - "5e9db13186f7742f845ee9d3" - ); - public static readonly MongoId VEST_NPP_KLASS_BAGARIY_PLATE_CARRIER_EMR = new MongoId( - "628d0618d1ba6e4fa07ce5a4" - ); - public static readonly MongoId VEST_POYASA_POYASB_GEAR_RIG = new MongoId( - "5c0e6a1586f77404597b4965" + public static readonly MongoId TACTICALCOMBO_STEINER_DBALPL_TACTICAL_DEVICE = new MongoId("5d2369418abbc306c62e0c80"); + public static readonly MongoId TACTICALCOMBO_STEINER_LASTAC_2_TACTICAL_FLASHLIGHT = new MongoId("5b07dd285acfc4001754240d"); + public static readonly MongoId TACTICALCOMBO_SUREFIRE_X400_ULTRA_TACTICAL_FLASHLIGHT_WITH_LASER = new MongoId( + "56def37dd2720bec348b456a" ); + public static readonly MongoId TACTICALCOMBO_SUREFIRE_XC1_TACTICAL_FLASHLIGHT = new MongoId("5a7b483fe899ef0016170d15"); + public static readonly MongoId TACTICALCOMBO_TT_DLP_TACTICAL_PRECISION_LASER_SIGHT = new MongoId("5c079ed60db834001a66b372"); + public static readonly MongoId TACTICALCOMBO_WILCOX_RAPTAR_ES_TACTICAL_RANGEFINDER = new MongoId("61605d88ffa6e502ac5e7eeb"); + public static readonly MongoId TACTICALCOMBO_ZENIT_KLESCH2IKS_IR_ILLUMINATOR_WITH_LASER = new MongoId("5a5f1ce64f39f90b401987bc"); + public static readonly MongoId TACTICALCOMBO_ZENIT_KLESCH2P_FLASHLIGHT_WITH_LASER = new MongoId("560d657b4bdc2da74d8b4572"); + public static readonly MongoId TACTICALCOMBO_ZENIT_KLESCH2U_TACTICAL_FLASHLIGHT = new MongoId("5b3a337e5acfc4704b4a19a0"); + public static readonly MongoId TACTICALCOMBO_ZENIT_PERST3_TACTICAL_DEVICE = new MongoId("5c5952732e2216398b5abda2"); + public static readonly MongoId THERMALVISION_T7_THERMAL_GOGGLES_WITH_A_NIGHT_VISION_MOUNT = new MongoId("5c110624d174af029e69734c"); + public static readonly MongoId VEST_511_TACTICAL_TACTEC_PLATE_CARRIER_RANGER_GREEN = new MongoId("5b44cad286f77402a54ae7e5"); + public static readonly MongoId VEST_511_TACTICAL_TACTEC_PLATE_CARRIER_STORM = new MongoId("67ab4b2d6f7ae4aa550bbcf6"); + public static readonly MongoId VEST_6B3TM01_ARMORED_RIG_KHAKI = new MongoId("5d5d646386f7742797261fd9"); + public static readonly MongoId VEST_6B515_ZH86_ULEY_ARMORED_RIG_FLORA = new MongoId("5c0e446786f7742013381639"); + public static readonly MongoId VEST_6B516_ZH86_ULEY_ARMORED_RIG_KHAKI = new MongoId("5c0e3eb886f7742015526062"); + public static readonly MongoId VEST_ANA_TACTICAL_ALPHA_CHEST_RIG_MULTICAM = new MongoId("67ab3ea96d7ece17bf0096f6"); + public static readonly MongoId VEST_ANA_TACTICAL_ALPHA_CHEST_RIG_OLIVE_DRAB = new MongoId("592c2d1a86f7746dbe2af32a"); + public static readonly MongoId VEST_ANA_TACTICAL_M1_PLATE_CARRIER_OLIVE_DRAB = new MongoId("5c0e722886f7740458316a57"); + public static readonly MongoId VEST_ANA_TACTICAL_M2_PLATE_CARRIER_EMR = new MongoId("5ab8dced86f774646209ec87"); + public static readonly MongoId VEST_ARS_ARMA_A18_SKANDA_PLATE_CARRIER_MULTICAM = new MongoId("5d5d87f786f77427997cfaef"); + public static readonly MongoId VEST_ARS_ARMA_CPC_MOD1_PLATE_CARRIER_ATACS_FG = new MongoId("5e4ac41886f77406a511c9a8"); + public static readonly MongoId VEST_AZIMUT_SS_KHAMELION_CHEST_HARNESS_OLIVE = new MongoId("63611865ba5b90db0c0399d1"); + public static readonly MongoId VEST_AZIMUT_SS_ZHUK_CHEST_HARNESS_BLACK = new MongoId("603648ff5a45383c122086ac"); + public static readonly MongoId VEST_AZIMUT_SS_ZHUK_CHEST_HARNESS_SURPAT = new MongoId("6040dd4ddcf9592f401632d2"); + public static readonly MongoId VEST_BLACKHAWK_COMMANDO_CHEST_HARNESS_BLACK = new MongoId("5c0e9f2c86f77432297fe0a3"); + public static readonly MongoId VEST_BLACKHAWK_COMMANDO_CHEST_HARNESS_DESERT_TAN = new MongoId("5b44c8ea86f7742d1627baf1"); + public static readonly MongoId VEST_BLACKROCK_CHEST_RIG_GRAY = new MongoId("5648a69d4bdc2ded0b8b457b"); + public static readonly MongoId VEST_BLACKROCK_CHEST_RIG_KHAKI = new MongoId("67ab3f146d7ece17bf0096ff"); + public static readonly MongoId VEST_CQC_OSPREY_MK4A_PLATE_CARRIER_ASSAULT_MTP = new MongoId("60a3c70cde5f453f634816a3"); + public static readonly MongoId VEST_CQC_OSPREY_MK4A_PLATE_CARRIER_PROTECTION_MTP = new MongoId("60a3c68c37ea821725773ef5"); + public static readonly MongoId VEST_CRYE_PRECISION_AVS_PLATE_CARRIER_MULTICAM = new MongoId("67ab49aab9c7a1e18c095686"); + public static readonly MongoId VEST_CRYE_PRECISION_AVS_PLATE_CARRIER_RANGER_GREEN = new MongoId("544a5caa4bdc2d1a388b4568"); + public static readonly MongoId VEST_CRYE_PRECISION_AVS_PLATE_CARRIER_TAGILLA_EDITION = new MongoId("609e860ebd219504d8507525"); + public static readonly MongoId VEST_CRYE_PRECISION_CPC_PLATE_CARRIER_GOONS_EDITION = new MongoId("628b9c7d45122232a872358f"); + public static readonly MongoId VEST_CSA_CHEST_RIG_BLACK = new MongoId("6034d0230ca681766b6a0fb5"); + public static readonly MongoId VEST_DIRECT_ACTION_THUNDERBOLT_COMPACT_CHEST_RIG_SHADOW_GREY = new MongoId("5f5f41f56760b4138443b352"); + public static readonly MongoId VEST_DIY_IDEA_CHEST_RIG = new MongoId("5fd4c4fa16cac650092f6771"); + public static readonly MongoId VEST_DYNAFORCE_TRITON_M43A_CHEST_HARNESS_BLACK = new MongoId("5ca20abf86f77418567a43f2"); + public static readonly MongoId VEST_EAGLE_ALLIED_INDUSTRIES_MBSS_PLATE_CARRIER_COYOTE_BROWN = new MongoId("64a5366719bab53bd203bf33"); + public static readonly MongoId VEST_EAGLE_INDUSTRIES_MMAC_PLATE_CARRIER_RANGER_GREEN = new MongoId("61bc85697113f767765c7fe7"); + public static readonly MongoId VEST_ECLIPSE_RBAVAF_PLATE_CARRIER_RANGER_GREEN = new MongoId("628dc750b910320f4c27a732"); + public static readonly MongoId VEST_FIRSTSPEAR_STRANDHOGG_PLATE_CARRIER_RANGER_GREEN = new MongoId("61bcc89aef0f505f0c6cd0fc"); + public static readonly MongoId VEST_GEAR_CRAFT_GCBSSMK1_CHEST_RIG_ATACS_FG = new MongoId("5fd4c60f875c30179f5d04c2"); + public static readonly MongoId VEST_HALEY_STRATEGIC_D3CRX_CHEST_HARNESS_RANGER_GREEN = new MongoId("5d5d85c586f774279a21cbdb"); + public static readonly MongoId VEST_LBT1961A_LOAD_BEARING_CHEST_RIG_GOONS_EDITION = new MongoId("628baf0b967de16aab5a4f36"); + public static readonly MongoId VEST_LBT1961A_LOAD_BEARING_CHEST_RIG_MAS_GREY = new MongoId("5e9db13186f7742f845ee9d3"); + public static readonly MongoId VEST_NPP_KLASS_BAGARIY_PLATE_CARRIER_EMR = new MongoId("628d0618d1ba6e4fa07ce5a4"); + public static readonly MongoId VEST_POYASA_POYASB_GEAR_RIG = new MongoId("5c0e6a1586f77404597b4965"); public static readonly MongoId VEST_SCAV = new MongoId("572b7adb24597762ae139821"); public static readonly MongoId VEST_SECURITY = new MongoId("5fd4c5477a8d854fa0105061"); - public static readonly MongoId VEST_SHELLBACK_TACTICAL_BANSHEE_PLATE_CARRIER_ATACS_AU = - new MongoId("639343fce101f4caa40a4ef3"); - public static readonly MongoId VEST_SOE_MICRO_RIG_MULTICAM = new MongoId( - "5d5d8ca986f7742798716522" - ); - public static readonly MongoId VEST_SPIRITUS_SYSTEMS_BANK_ROBBER_CHEST_RIG_MULTICAM_ALPINE = - new MongoId("674589d98dd67746010329e6"); - public static readonly MongoId VEST_SPIRITUS_SYSTEMS_BANK_ROBBER_CHEST_RIG_MULTICAM_BLACK = - new MongoId("5e4abc1f86f774069619fbaa"); - public static readonly MongoId VEST_SPLAV_TARZAN_M22_CHEST_RIG_SMOG = new MongoId( - "5e4abfed86f77406a2713cf7" - ); - public static readonly MongoId VEST_SS_PRECISION_PLATEFRAME_PLATE_CARRIER_GOONS_EDITION = - new MongoId("628b9784bcf6e2659e09b8a2"); - public static readonly MongoId VEST_STICH_PROFI_CHEST_RIG_MK2_ASSAULT_ATACS_FG = new MongoId( - "60a621c49c197e4e8c4455e6" - ); - public static readonly MongoId VEST_STICH_PROFI_CHEST_RIG_MK2_RECON_ATACS_FG = new MongoId( - "60a6220e953894617404b00a" - ); - public static readonly MongoId VEST_STICH_PROFI_PLATE_CARRIER_V2_BLACK = new MongoId( - "66b6296d7994640992013b17" - ); - public static readonly MongoId VEST_STICH_PROFI_STICH_DEFENSE_MOD2_PLATE_CARRIER_MULTICAM = - new MongoId("66b6295178bbc0200425f995"); - public static readonly MongoId VEST_TASMANIAN_TIGER_PLATE_CARRIER_MKIII_COYOTE_BROWN = - new MongoId("66b6295a8ca68c6461709efa"); - public static readonly MongoId VEST_TASMANIAN_TIGER_SK_PLATE_CARRIER_MULTICAM_BLACK = - new MongoId("628cd624459354321c4b7fa2"); - public static readonly MongoId VEST_TYPE_56_CHICOM_CHEST_HARNESS = new MongoId( - "64be7110bf597ba84a0a41ea" - ); - public static readonly MongoId VEST_UMKA_M33SET1_HUNTER_VEST_OLIVE_DRAB = new MongoId( - "6034cf5fffd42c541047f72e" - ); - public static readonly MongoId VEST_UMTBS_6SH112_SCOUTSNIPER_CHEST_RIG_EMR = new MongoId( - "5929a2a086f7744f4b234d43" - ); - public static readonly MongoId VEST_VELOCITY_SYSTEMS_MPPV_MULTIPURPOSE_PATROL_VEST_WOLF_GREY = - new MongoId("5df8a42886f77412640e2e75"); - public static readonly MongoId VEST_WARTECH_MK3_TV104_CHEST_RIG_MULTICAM = new MongoId( - "5ab8dab586f77441cd04f2a2" - ); - public static readonly MongoId VEST_WARTECH_TV109_TV106_CHEST_RIG_ATACS_FG = new MongoId( - "59e7643b86f7742cbf2c109a" - ); - public static readonly MongoId VEST_WARTECH_TV110_PLATE_CARRIER_COYOTE = new MongoId( - "5c0e746986f7741453628fe5" - ); - public static readonly MongoId VEST_WARTECH_TV115_PLATE_CARRIER_OLIVE_DRAB = new MongoId( - "64a536392d2c4e6e970f4121" - ); - public static readonly MongoId VEST_ZULU_NYLON_GEAR_M4_REDUCED_SIGNATURE_CHEST_RIG_RANGER_GREEN = - new MongoId("64be7095047e826eae02b0c1"); - public static readonly MongoId VISORS_6B34_ANTIFRAGMENTATION_GLASSES = new MongoId( - "5b432be65acfc433000ed01f" - ); - public static readonly MongoId VISORS_ANTIFRAGMENTATION_GLASSES = new MongoId( - "59e770b986f7742cbd762754" - ); - public static readonly MongoId VISORS_DUNDUKK_SPORT_SUNGLASSES = new MongoId( - "5aa2b986e5b5b00014028f4c" - ); - public static readonly MongoId VISORS_DUNDUKK_SPORT_SUNGLASSES_ORANGE_LENSES = new MongoId( - "67af41dd1eb308667602db4a" - ); - public static readonly MongoId VISORS_ESS_CROSSBOW_TACTICAL_GLASSES = new MongoId( - "5d5fca1ea4b93635fd598c07" - ); - public static readonly MongoId VISORS_GAS_WELDER_SAFETY_GOGGLES = new MongoId( - "61c18d83b00456371a66814b" - ); - public static readonly MongoId VISORS_JOHNB_LIQUID_DNB_GLASSES = new MongoId( - "62a09e410b9d3c46de5b6e78" - ); - public static readonly MongoId VISORS_NPP_KLASS_CONDOR_GLASSES = new MongoId( - "603409c80ca681766b6a0fb2" - ); - public static readonly MongoId VISORS_OAKLEY_SI_BATWOLF_GLASSES = new MongoId( - "62a61c988ec41a51b34758d5" - ); - public static readonly MongoId VISORS_OAKLEY_SI_GASCAN_GLASSES = new MongoId( - "5d6d2e22a4b9361bd5780d05" - ); - public static readonly MongoId VISORS_OAKLEY_SI_M_FRAME_SAFETY_GLASSES = new MongoId( - "5c1a1cc52e221602b3136e3d" - ); - public static readonly MongoId VISORS_OAKLEY_SI_M_FRAME_SAFETY_GLASSES_ORANGE_LENSES = - new MongoId("67af42942676ade5750b50e8"); - public static readonly MongoId VISORS_PYRAMEX_PROXIMITY_SAFETY_GLASSES = new MongoId( - "5c0d32fcd174af02a1659c75" - ); - public static readonly MongoId VISORS_RAYBENCH_AVIATOR_GLASSES = new MongoId( - "5d6d2ef3a4b93618084f58bd" - ); - public static readonly MongoId VISORS_RAYBENCH_AVIATOR_GLASSES_GREEN_LENSES = new MongoId( - "67af425c2676ade5750b50e6" - ); - public static readonly MongoId VISORS_RAYBENCH_HIPSTER_RESERVE_SUNGLASSES = new MongoId( - "5aa2b9aee5b5b00015693121" - ); - public static readonly MongoId VISORS_ROUND_FRAME_SUNGLASSES = new MongoId( - "5aa2b923e5b5b000137b7589" - ); - public static readonly MongoId VISORS_ROUND_FRAME_SUNGLASSES_GREEN_LENSES = new MongoId( - "67af42b38d9ef5c57e0d5126" - ); - public static readonly MongoId VISORS_TACTICAL_GLASSES = new MongoId( - "557ff21e4bdc2d89578b4586" - ); - public static readonly MongoId VISORS_TWITCH_RIVALS_2020_GLASSES = new MongoId( - "5e71f70186f77429ee09f183" + public static readonly MongoId VEST_SHELLBACK_TACTICAL_BANSHEE_PLATE_CARRIER_ATACS_AU = new MongoId("639343fce101f4caa40a4ef3"); + public static readonly MongoId VEST_SOE_MICRO_RIG_MULTICAM = new MongoId("5d5d8ca986f7742798716522"); + public static readonly MongoId VEST_SPIRITUS_SYSTEMS_BANK_ROBBER_CHEST_RIG_MULTICAM_ALPINE = new MongoId("674589d98dd67746010329e6"); + public static readonly MongoId VEST_SPIRITUS_SYSTEMS_BANK_ROBBER_CHEST_RIG_MULTICAM_BLACK = new MongoId("5e4abc1f86f774069619fbaa"); + public static readonly MongoId VEST_SPLAV_TARZAN_M22_CHEST_RIG_SMOG = new MongoId("5e4abfed86f77406a2713cf7"); + public static readonly MongoId VEST_SS_PRECISION_PLATEFRAME_PLATE_CARRIER_GOONS_EDITION = new MongoId("628b9784bcf6e2659e09b8a2"); + public static readonly MongoId VEST_STICH_PROFI_CHEST_RIG_MK2_ASSAULT_ATACS_FG = new MongoId("60a621c49c197e4e8c4455e6"); + public static readonly MongoId VEST_STICH_PROFI_CHEST_RIG_MK2_RECON_ATACS_FG = new MongoId("60a6220e953894617404b00a"); + public static readonly MongoId VEST_STICH_PROFI_PLATE_CARRIER_V2_BLACK = new MongoId("66b6296d7994640992013b17"); + public static readonly MongoId VEST_STICH_PROFI_STICH_DEFENSE_MOD2_PLATE_CARRIER_MULTICAM = new MongoId("66b6295178bbc0200425f995"); + public static readonly MongoId VEST_TASMANIAN_TIGER_PLATE_CARRIER_MKIII_COYOTE_BROWN = new MongoId("66b6295a8ca68c6461709efa"); + public static readonly MongoId VEST_TASMANIAN_TIGER_SK_PLATE_CARRIER_MULTICAM_BLACK = new MongoId("628cd624459354321c4b7fa2"); + public static readonly MongoId VEST_TYPE_56_CHICOM_CHEST_HARNESS = new MongoId("64be7110bf597ba84a0a41ea"); + public static readonly MongoId VEST_UMKA_M33SET1_HUNTER_VEST_OLIVE_DRAB = new MongoId("6034cf5fffd42c541047f72e"); + public static readonly MongoId VEST_UMTBS_6SH112_SCOUTSNIPER_CHEST_RIG_EMR = new MongoId("5929a2a086f7744f4b234d43"); + public static readonly MongoId VEST_VELOCITY_SYSTEMS_MPPV_MULTIPURPOSE_PATROL_VEST_WOLF_GREY = new MongoId("5df8a42886f77412640e2e75"); + public static readonly MongoId VEST_WARTECH_MK3_TV104_CHEST_RIG_MULTICAM = new MongoId("5ab8dab586f77441cd04f2a2"); + public static readonly MongoId VEST_WARTECH_TV109_TV106_CHEST_RIG_ATACS_FG = new MongoId("59e7643b86f7742cbf2c109a"); + public static readonly MongoId VEST_WARTECH_TV110_PLATE_CARRIER_COYOTE = new MongoId("5c0e746986f7741453628fe5"); + public static readonly MongoId VEST_WARTECH_TV115_PLATE_CARRIER_OLIVE_DRAB = new MongoId("64a536392d2c4e6e970f4121"); + public static readonly MongoId VEST_ZULU_NYLON_GEAR_M4_REDUCED_SIGNATURE_CHEST_RIG_RANGER_GREEN = new MongoId( + "64be7095047e826eae02b0c1" ); + public static readonly MongoId VISORS_6B34_ANTIFRAGMENTATION_GLASSES = new MongoId("5b432be65acfc433000ed01f"); + public static readonly MongoId VISORS_ANTIFRAGMENTATION_GLASSES = new MongoId("59e770b986f7742cbd762754"); + public static readonly MongoId VISORS_DUNDUKK_SPORT_SUNGLASSES = new MongoId("5aa2b986e5b5b00014028f4c"); + public static readonly MongoId VISORS_DUNDUKK_SPORT_SUNGLASSES_ORANGE_LENSES = new MongoId("67af41dd1eb308667602db4a"); + public static readonly MongoId VISORS_ESS_CROSSBOW_TACTICAL_GLASSES = new MongoId("5d5fca1ea4b93635fd598c07"); + public static readonly MongoId VISORS_GAS_WELDER_SAFETY_GOGGLES = new MongoId("61c18d83b00456371a66814b"); + public static readonly MongoId VISORS_JOHNB_LIQUID_DNB_GLASSES = new MongoId("62a09e410b9d3c46de5b6e78"); + public static readonly MongoId VISORS_NPP_KLASS_CONDOR_GLASSES = new MongoId("603409c80ca681766b6a0fb2"); + public static readonly MongoId VISORS_OAKLEY_SI_BATWOLF_GLASSES = new MongoId("62a61c988ec41a51b34758d5"); + public static readonly MongoId VISORS_OAKLEY_SI_GASCAN_GLASSES = new MongoId("5d6d2e22a4b9361bd5780d05"); + public static readonly MongoId VISORS_OAKLEY_SI_M_FRAME_SAFETY_GLASSES = new MongoId("5c1a1cc52e221602b3136e3d"); + public static readonly MongoId VISORS_OAKLEY_SI_M_FRAME_SAFETY_GLASSES_ORANGE_LENSES = new MongoId("67af42942676ade5750b50e8"); + public static readonly MongoId VISORS_PYRAMEX_PROXIMITY_SAFETY_GLASSES = new MongoId("5c0d32fcd174af02a1659c75"); + public static readonly MongoId VISORS_RAYBENCH_AVIATOR_GLASSES = new MongoId("5d6d2ef3a4b93618084f58bd"); + public static readonly MongoId VISORS_RAYBENCH_AVIATOR_GLASSES_GREEN_LENSES = new MongoId("67af425c2676ade5750b50e6"); + public static readonly MongoId VISORS_RAYBENCH_HIPSTER_RESERVE_SUNGLASSES = new MongoId("5aa2b9aee5b5b00015693121"); + public static readonly MongoId VISORS_ROUND_FRAME_SUNGLASSES = new MongoId("5aa2b923e5b5b000137b7589"); + public static readonly MongoId VISORS_ROUND_FRAME_SUNGLASSES_GREEN_LENSES = new MongoId("67af42b38d9ef5c57e0d5126"); + public static readonly MongoId VISORS_TACTICAL_GLASSES = new MongoId("557ff21e4bdc2d89578b4586"); + public static readonly MongoId VISORS_TWITCH_RIVALS_2020_GLASSES = new MongoId("5e71f70186f77429ee09f183"); } diff --git a/Libraries/SPTarkov.Server.Core/Models/Enums/QuestTpl.cs b/Libraries/SPTarkov.Server.Core/Models/Enums/QuestTpl.cs index 4e5b4306..a1d8e0b2 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Enums/QuestTpl.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Enums/QuestTpl.cs @@ -13,30 +13,20 @@ public static class QuestTpl public static readonly MongoId POSTMAN_PAT_PART_2 = new MongoId("596760e186f7741e11214d58"); public static readonly MongoId SHAKING_UP_THE_TELLER = new MongoId("5967725e86f774601a446662"); public static readonly MongoId SHORTAGE = new MongoId("5967733e86f774602332fc84"); - public static readonly MongoId SANITARY_STANDARDS_PART_1 = new MongoId( - "59689ee586f7740d1570bbd5" - ); - public static readonly MongoId OPERATION_AQUARIUS_PART_1 = new MongoId( - "59689fbd86f7740d137ebfc4" - ); - public static readonly MongoId OPERATION_AQUARIUS_PART_2 = new MongoId( - "5968eb3186f7741dde183a4d" - ); + public static readonly MongoId SANITARY_STANDARDS_PART_1 = new MongoId("59689ee586f7740d1570bbd5"); + public static readonly MongoId OPERATION_AQUARIUS_PART_1 = new MongoId("59689fbd86f7740d137ebfc4"); + public static readonly MongoId OPERATION_AQUARIUS_PART_2 = new MongoId("5968eb3186f7741dde183a4d"); public static readonly MongoId PAINKILLER = new MongoId("5969f90786f77420d2328015"); public static readonly MongoId PHARMACIST = new MongoId("5969f9e986f7741dde183a50"); public static readonly MongoId SUPPLY_PLANS = new MongoId("596a0e1686f7741ddf17dbee"); public static readonly MongoId KIND_OF_SABOTAGE = new MongoId("596a101f86f7741ddb481582"); public static readonly MongoId GENERAL_WARES = new MongoId("596a1e6c86f7741ddc2d3206"); - public static readonly MongoId SANITARY_STANDARDS_PART_2 = new MongoId( - "596a204686f774576d4c95de" - ); + public static readonly MongoId SANITARY_STANDARDS_PART_2 = new MongoId("596a204686f774576d4c95de"); public static readonly MongoId CAR_REPAIR = new MongoId("596a218586f77420d232807c"); public static readonly MongoId SUPPLIER = new MongoId("596b36c586f77450d6045ad2"); public static readonly MongoId THE_EXTORTIONIST = new MongoId("596b43fb86f77457ca186186"); public static readonly MongoId STIRRUP = new MongoId("596b455186f77457cb50eccb"); - public static readonly MongoId WHATS_ON_THE_FLASH_DRIVE = new MongoId( - "5979ed3886f77431307dc512" - ); + public static readonly MongoId WHATS_ON_THE_FLASH_DRIVE = new MongoId("5979ed3886f77431307dc512"); public static readonly MongoId GOLDEN_SWAG = new MongoId("5979eee086f774311955e614"); public static readonly MongoId POLIKHIM_HOBO = new MongoId("5979f8bb86f7743ec214c7a6"); public static readonly MongoId CHEMICAL_PART_1 = new MongoId("5979f9ba86f7740f6c3fe9f2"); @@ -78,27 +68,13 @@ public static class QuestTpl public static readonly MongoId WET_JOB_PART_4 = new MongoId("5a27bc3686f7741c73584026"); public static readonly MongoId WET_JOB_PART_5 = new MongoId("5a27bc6986f7741c7358402b"); public static readonly MongoId WET_JOB_PART_6 = new MongoId("5a27bc8586f7741b543d8ea4"); - public static readonly MongoId FRIEND_FROM_THE_WEST_PART_1 = new MongoId( - "5a27c99a86f7747d2c6bdd8e" - ); - public static readonly MongoId FRIEND_FROM_THE_WEST_PART_2 = new MongoId( - "5a27d2af86f7744e1115b323" - ); - public static readonly MongoId HEALTH_CARE_PRIVACY_PART_1 = new MongoId( - "5a68661a86f774500f48afb0" - ); - public static readonly MongoId HEALTH_CARE_PRIVACY_PART_2 = new MongoId( - "5a68663e86f774501078f78a" - ); - public static readonly MongoId HEALTH_CARE_PRIVACY_PART_3 = new MongoId( - "5a68665c86f774255929b4c7" - ); - public static readonly MongoId HEALTH_CARE_PRIVACY_PART_4 = new MongoId( - "5a68667486f7742607157d28" - ); - public static readonly MongoId HEALTH_CARE_PRIVACY_PART_5 = new MongoId( - "5a68669a86f774255929b4d4" - ); + public static readonly MongoId FRIEND_FROM_THE_WEST_PART_1 = new MongoId("5a27c99a86f7747d2c6bdd8e"); + public static readonly MongoId FRIEND_FROM_THE_WEST_PART_2 = new MongoId("5a27d2af86f7744e1115b323"); + public static readonly MongoId HEALTH_CARE_PRIVACY_PART_1 = new MongoId("5a68661a86f774500f48afb0"); + public static readonly MongoId HEALTH_CARE_PRIVACY_PART_2 = new MongoId("5a68663e86f774501078f78a"); + public static readonly MongoId HEALTH_CARE_PRIVACY_PART_3 = new MongoId("5a68665c86f774255929b4c7"); + public static readonly MongoId HEALTH_CARE_PRIVACY_PART_4 = new MongoId("5a68667486f7742607157d28"); + public static readonly MongoId HEALTH_CARE_PRIVACY_PART_5 = new MongoId("5a68669a86f774255929b4d4"); public static readonly MongoId GUNSMITH_PART_1 = new MongoId("5ac23c6186f7741247042bad"); public static readonly MongoId GUNSMITH_PART_2 = new MongoId("5ac2426c86f774138762edfe"); public static readonly MongoId GUNSMITH_PART_3 = new MongoId("5ac2428686f77412450b42bf"); @@ -124,9 +100,7 @@ public static class QuestTpl public static readonly MongoId ONLY_BUSINESS = new MongoId("5ae448a386f7744d3730fff0"); public static readonly MongoId MAKE_ULTRA_GREAT_AGAIN = new MongoId("5ae448bf86f7744d733e55ee"); public static readonly MongoId BIG_SALE = new MongoId("5ae448e586f7744dcf0c2a67"); - public static readonly MongoId THE_BLOOD_OF_WAR_PART_1 = new MongoId( - "5ae448f286f77448d73c0131" - ); + public static readonly MongoId THE_BLOOD_OF_WAR_PART_1 = new MongoId("5ae448f286f77448d73c0131"); public static readonly MongoId DRESSED_TO_KILL = new MongoId("5ae4490786f7744ca822adcc"); public static readonly MongoId DATABASE_PART_1 = new MongoId("5ae4493486f7744efa289417"); public static readonly MongoId DATABASE_PART_2 = new MongoId("5ae4493d86f7744b8e15aa8f"); @@ -135,9 +109,7 @@ public static class QuestTpl public static readonly MongoId SEW_IT_GOOD_PART_3 = new MongoId("5ae4496986f774459e77beb6"); public static readonly MongoId SEW_IT_GOOD_PART_4 = new MongoId("5ae4497b86f7744cf402ed00"); public static readonly MongoId THE_KEY_TO_SUCCESS = new MongoId("5ae4498786f7744bde357695"); - public static readonly MongoId CHARISMA_BRINGS_SUCCESS = new MongoId( - "5ae4499a86f77449783815db" - ); + public static readonly MongoId CHARISMA_BRINGS_SUCCESS = new MongoId("5ae4499a86f77449783815db"); public static readonly MongoId NO_FUSS_NEEDED = new MongoId("5ae449a586f7744bde357696"); public static readonly MongoId GRATITUDE = new MongoId("5ae449b386f77446d8741719"); public static readonly MongoId SALES_NIGHT = new MongoId("5ae449c386f7744bde357697"); @@ -147,12 +119,8 @@ public static class QuestTpl public static readonly MongoId GUNSMITH_PART_18 = new MongoId("5b477b6f86f7747290681823"); public static readonly MongoId GUNSMITH_PART_20 = new MongoId("5b477f7686f7744d1b23c4d2"); public static readonly MongoId GUNSMITH_PART_22 = new MongoId("5b47825886f77468074618d3"); - public static readonly MongoId THE_BLOOD_OF_WAR_PART_2 = new MongoId( - "5b47876e86f7744d1c353205" - ); - public static readonly MongoId LIVING_HIGH_IS_NOT_A_CRIME_PART_1 = new MongoId( - "5b47891f86f7744d1b23c571" - ); + public static readonly MongoId THE_BLOOD_OF_WAR_PART_2 = new MongoId("5b47876e86f7744d1c353205"); + public static readonly MongoId LIVING_HIGH_IS_NOT_A_CRIME_PART_1 = new MongoId("5b47891f86f7744d1b23c571"); public static readonly MongoId HOT_DELIVERY = new MongoId("5b478b1886f7744d1b23c57d"); public static readonly MongoId MINIBUS = new MongoId("5b478d0f86f7744d190d91b5"); public static readonly MongoId VITAMINS_PART_1 = new MongoId("5b478eca86f7744642012254"); @@ -160,116 +128,56 @@ public static class QuestTpl public static readonly MongoId INFORMED_MEANS_ARMED = new MongoId("5b47926a86f7747ccc057c15"); public static readonly MongoId LEND_LEASE_PART_1 = new MongoId("5b4794cb86f774598100d5d4"); public static readonly MongoId CHUMMING = new MongoId("5b4795fb86f7745876267770"); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_1 = new MongoId( - "5bc4776586f774512d07cf05" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_2 = new MongoId( - "5bc479e586f7747f376c7da3" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_3 = new MongoId( - "5bc47dbf86f7741ee74e93b9" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_4 = new MongoId( - "5bc480a686f7741af0342e29" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_5 = new MongoId( - "5bc4826c86f774106d22d88b" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_6 = new MongoId( - "5bc4836986f7740c0152911c" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_7 = new MongoId( - "5bc4856986f77454c317bea7" - ); - public static readonly MongoId THE_TARKOV_SHOOTER_PART_8 = new MongoId( - "5bc4893c86f774626f5ebf3e" - ); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_1 = new MongoId("5bc4776586f774512d07cf05"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_2 = new MongoId("5bc479e586f7747f376c7da3"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_3 = new MongoId("5bc47dbf86f7741ee74e93b9"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_4 = new MongoId("5bc480a686f7741af0342e29"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_5 = new MongoId("5bc4826c86f774106d22d88b"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_6 = new MongoId("5bc4836986f7740c0152911c"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_7 = new MongoId("5bc4856986f77454c317bea7"); + public static readonly MongoId THE_TARKOV_SHOOTER_PART_8 = new MongoId("5bc4893c86f774626f5ebf3e"); public static readonly MongoId BULLSHIT = new MongoId("5c0bbaa886f7746941031d82"); public static readonly MongoId SILENT_CALIBER = new MongoId("5c0bc91486f7746ab41857a2"); public static readonly MongoId INSOMNIA = new MongoId("5c0bd01e86f7747cdd799e56"); public static readonly MongoId TEST_DRIVE_PART_1 = new MongoId("5c0bd94186f7747a727f09b2"); public static readonly MongoId FLINT = new MongoId("5c0bdb5286f774166e38eed4"); - public static readonly MongoId A_SHOOTER_BORN_IN_HEAVEN = new MongoId( - "5c0bde0986f77479cf22c2f8" - ); + public static readonly MongoId A_SHOOTER_BORN_IN_HEAVEN = new MongoId("5c0bde0986f77479cf22c2f8"); public static readonly MongoId PSYCHO_SNIPER = new MongoId("5c0be13186f7746f016734aa"); public static readonly MongoId PRIVATE_CLINIC = new MongoId("5c0be5fc86f774467a116593"); public static readonly MongoId ATHLETE = new MongoId("5c0d0d5086f774363760aef2"); public static readonly MongoId LEND_LEASE_PART_2 = new MongoId("5c0d0f1886f77457b8210226"); public static readonly MongoId GRENADIER = new MongoId("5c0d190cd09282029f5390d8"); - public static readonly MongoId DECONTAMINATION_SERVICE = new MongoId( - "5c0d1c4cd0928202a02a6f5c" - ); + public static readonly MongoId DECONTAMINATION_SERVICE = new MongoId("5c0d1c4cd0928202a02a6f5c"); public static readonly MongoId PEACEKEEPING_MISSION = new MongoId("5c0d4c12d09282029f539173"); public static readonly MongoId THE_GUIDE = new MongoId("5c0d4e61d09282029f53920e"); - public static readonly MongoId THE_BLOOD_OF_WAR_PART_3 = new MongoId( - "5c10f94386f774227172c572" - ); + public static readonly MongoId THE_BLOOD_OF_WAR_PART_3 = new MongoId("5c10f94386f774227172c572"); public static readonly MongoId FERTILIZERS = new MongoId("5c1128e386f7746565181106"); public static readonly MongoId SCAVENGER = new MongoId("5c112d7e86f7740d6f647486"); - public static readonly MongoId LIVING_HIGH_IS_NOT_A_CRIME_PART_2 = new MongoId( - "5c1141f386f77430ff393792" - ); + public static readonly MongoId LIVING_HIGH_IS_NOT_A_CRIME_PART_2 = new MongoId("5c1141f386f77430ff393792"); public static readonly MongoId SETUP = new MongoId("5c1234c286f77406fa13baeb"); public static readonly MongoId PERFECT_MEDIATOR = new MongoId("5c12452c86f7744b83469073"); public static readonly MongoId IMPORT = new MongoId("5c139eb686f7747878361a6f"); public static readonly MongoId COLLECTOR = new MongoId("5c51aac186f77432ea65c552"); public static readonly MongoId INTRODUCTION = new MongoId("5d2495a886f77425cd51e403"); public static readonly MongoId ACQUAINTANCE = new MongoId("5d24b81486f77439c92d6ba8"); - public static readonly MongoId THE_SURVIVALIST_PATH_UNPROTECTED_BUT_DANGEROUS = new MongoId( - "5d25aed386f77442734d25d2" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_THRIFTY = new MongoId( - "5d25b6be86f77444001e1b89" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_ZHIVCHIK = new MongoId( - "5d25bfd086f77442734d3007" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_WOUNDED_BEAST = new MongoId( - "5d25c81b86f77443e625dd71" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_TOUGH_GUY = new MongoId( - "5d25cf2686f77443e75488d4" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_COLD_BLOODED = new MongoId( - "5d25d2c186f77443e35162e5" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_EAGLE_OWL = new MongoId( - "5d25e29d86f7740a22516326" - ); - public static readonly MongoId THE_SURVIVALIST_PATH_COMBAT_MEDIC = new MongoId( - "5d25e2a986f77409dd5cdf2a" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_SECURED_PERIMETER = new MongoId( - "5d25e2b486f77409de05bba0" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_TROPHY = new MongoId( - "5d25e2c386f77443e7549029" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_FOREST_CLEANING = new MongoId( - "5d25e2cc86f77443e47ae019" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_CONTROLLER = new MongoId( - "5d25e2d886f77442734d335e" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_SELLOUT = new MongoId( - "5d25e2e286f77444001e2e48" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_WOODS_KEEPER = new MongoId( - "5d25e2ee86f77443e35162ea" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_JUSTICE = new MongoId( - "5d25e43786f7740a212217fa" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_EVIL_WATCHMAN = new MongoId( - "5d25e44386f77409453bce7b" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_ERASER_PART_1 = new MongoId( - "5d25e44f86f77443e625e385" - ); - public static readonly MongoId THE_HUNTSMAN_PATH_ERASER_PART_2 = new MongoId( - "5d25e45e86f77408251c4bfa" - ); + public static readonly MongoId THE_SURVIVALIST_PATH_UNPROTECTED_BUT_DANGEROUS = new MongoId("5d25aed386f77442734d25d2"); + public static readonly MongoId THE_SURVIVALIST_PATH_THRIFTY = new MongoId("5d25b6be86f77444001e1b89"); + public static readonly MongoId THE_SURVIVALIST_PATH_ZHIVCHIK = new MongoId("5d25bfd086f77442734d3007"); + public static readonly MongoId THE_SURVIVALIST_PATH_WOUNDED_BEAST = new MongoId("5d25c81b86f77443e625dd71"); + public static readonly MongoId THE_SURVIVALIST_PATH_TOUGH_GUY = new MongoId("5d25cf2686f77443e75488d4"); + public static readonly MongoId THE_SURVIVALIST_PATH_COLD_BLOODED = new MongoId("5d25d2c186f77443e35162e5"); + public static readonly MongoId THE_SURVIVALIST_PATH_EAGLE_OWL = new MongoId("5d25e29d86f7740a22516326"); + public static readonly MongoId THE_SURVIVALIST_PATH_COMBAT_MEDIC = new MongoId("5d25e2a986f77409dd5cdf2a"); + public static readonly MongoId THE_HUNTSMAN_PATH_SECURED_PERIMETER = new MongoId("5d25e2b486f77409de05bba0"); + public static readonly MongoId THE_HUNTSMAN_PATH_TROPHY = new MongoId("5d25e2c386f77443e7549029"); + public static readonly MongoId THE_HUNTSMAN_PATH_FOREST_CLEANING = new MongoId("5d25e2cc86f77443e47ae019"); + public static readonly MongoId THE_HUNTSMAN_PATH_CONTROLLER = new MongoId("5d25e2d886f77442734d335e"); + public static readonly MongoId THE_HUNTSMAN_PATH_SELLOUT = new MongoId("5d25e2e286f77444001e2e48"); + public static readonly MongoId THE_HUNTSMAN_PATH_WOODS_KEEPER = new MongoId("5d25e2ee86f77443e35162ea"); + public static readonly MongoId THE_HUNTSMAN_PATH_JUSTICE = new MongoId("5d25e43786f7740a212217fa"); + public static readonly MongoId THE_HUNTSMAN_PATH_EVIL_WATCHMAN = new MongoId("5d25e44386f77409453bce7b"); + public static readonly MongoId THE_HUNTSMAN_PATH_ERASER_PART_1 = new MongoId("5d25e44f86f77443e625e385"); + public static readonly MongoId THE_HUNTSMAN_PATH_ERASER_PART_2 = new MongoId("5d25e45e86f77408251c4bfa"); public static readonly MongoId AMBULANCE = new MongoId("5d25e46e86f77409453bce7c"); public static readonly MongoId COURTESY_VISIT = new MongoId("5d25e48186f77443e625e386"); public static readonly MongoId SHADY_BUSINESS = new MongoId("5d25e48d86f77408251c4bfb"); @@ -278,22 +186,16 @@ public static class QuestTpl public static readonly MongoId HUNTING_TRIP = new MongoId("5d25e4ca86f77409dd5cdf2c"); public static readonly MongoId RESERVE = new MongoId("5d25e4d586f77443e625e388"); public static readonly MongoId REGULATED_MATERIALS = new MongoId("5d4bec3486f7743cac246665"); - public static readonly MongoId AN_APPLE_A_DAY_KEEPS_THE_DOCTOR_AWAY = new MongoId( - "5d6fb2c086f77449da599c24" - ); + public static readonly MongoId AN_APPLE_A_DAY_KEEPS_THE_DOCTOR_AWAY = new MongoId("5d6fb2c086f77449da599c24"); public static readonly MongoId MENTOR = new MongoId("5d6fbc2886f77449d825f9d3"); public static readonly MongoId THE_STYLISH_ONE = new MongoId("5dc53acb86f77469c740c893"); public static readonly MongoId TEXTILE_PART_1_BEAR = new MongoId("5e381b0286f77420e3417a74"); public static readonly MongoId TEXTILE_PART_1_USEC = new MongoId("5e383a6386f77465910ce1f3"); public static readonly MongoId TEXTILE_PART_2_BEAR = new MongoId("5e4d4ac186f774264f758336"); public static readonly MongoId TEXTILE_PART_2_USEC = new MongoId("5e4d515e86f77438b2195244"); - public static readonly MongoId THE_SURVIVALIST_PATH_JUNKIE = new MongoId( - "5eaaaa7c93afa0558f3b5a1c" - ); + public static readonly MongoId THE_SURVIVALIST_PATH_JUNKIE = new MongoId("5eaaaa7c93afa0558f3b5a1c"); public static readonly MongoId ANESTHESIA = new MongoId("5eda19f0edce541157209cee"); - public static readonly MongoId THE_HUNTSMAN_PATH_SADIST = new MongoId( - "5edab4b1218d181e29451435" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_SADIST = new MongoId("5edab4b1218d181e29451435"); public static readonly MongoId COLLEAGUES_PART_1 = new MongoId("5edab736cc183c769d778bc2"); public static readonly MongoId COLLEAGUES_PART_2 = new MongoId("5edaba7c0c502106f869bc02"); public static readonly MongoId RIGGED_GAME = new MongoId("5edabd13218d181e29451442"); @@ -306,9 +208,7 @@ public static class QuestTpl public static readonly MongoId SEARCH_MISSION = new MongoId("5fd9fad9c1ce6b1a3b486d00"); public static readonly MongoId HUNTER = new MongoId("600302d73b897b11364cd161"); public static readonly MongoId REVISION_RESERVE = new MongoId("6086c852c945025d41566124"); - public static readonly MongoId CLASSIFIED_TECHNOLOGIES = new MongoId( - "60896888e4a85c72ef3fa300" - ); + public static readonly MongoId CLASSIFIED_TECHNOLOGIES = new MongoId("60896888e4a85c72ef3fa300"); public static readonly MongoId DOCUMENTS = new MongoId("60896b7bfa70fc097863b8f5"); public static readonly MongoId NO_PLACE_FOR_RENEGADES = new MongoId("60896bca6ee58f38c417d4f2"); public static readonly MongoId DISEASE_HISTORY = new MongoId("60896e28e4a85c72ef3fa301"); @@ -318,9 +218,7 @@ public static class QuestTpl public static readonly MongoId INVENTORY_CHECK = new MongoId("608974af4b05530f55550c21"); public static readonly MongoId A_FUEL_MATTER = new MongoId("608974d01a66564e74191fc0"); public static readonly MongoId PEST_CONTROL = new MongoId("608a768d82e40b3c727fd17d"); - public static readonly MongoId THE_HUNTSMAN_PATH_FACTORY_CHIEF = new MongoId( - "60c0c018f7afb4354815096a" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_FACTORY_CHIEF = new MongoId("60c0c018f7afb4354815096a"); public static readonly MongoId ESCORT = new MongoId("60e71b62a0beca400d69efc4"); public static readonly MongoId CAPTURING_OUTPOSTS = new MongoId("60e71b9bbd90872cb85440f3"); public static readonly MongoId INTIMIDATOR = new MongoId("60e71bb4e456d449cd47ca75"); @@ -333,16 +231,12 @@ public static class QuestTpl public static readonly MongoId THE_COURIER = new MongoId("60e71d6d7fcf9c556f325055"); public static readonly MongoId LONG_LINE = new MongoId("60e71dc0a94be721b065bbfc"); public static readonly MongoId BOOZE = new MongoId("60e71dc67fcf9c556f325056"); - public static readonly MongoId THE_HUNTSMAN_PATH_RELENTLESS = new MongoId( - "60e71e8ed54b755a3b53eb67" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_RELENTLESS = new MongoId("60e71e8ed54b755a3b53eb67"); public static readonly MongoId SWIFT_ONE = new MongoId("60e729cf5698ee7b05057439"); public static readonly MongoId THE_CHOICE = new MongoId("60effd818b669d08a35bfad5"); public static readonly MongoId EASY_JOB_PART_1 = new MongoId("6179ac7511973d018217d0b9"); public static readonly MongoId EASY_JOB_PART_2 = new MongoId("6179acbdc760af5ad2053585"); - public static readonly MongoId THE_HUNTSMAN_PATH_OUTCASTS = new MongoId( - "6179ad0a6e9dd54ac275e3f2" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_OUTCASTS = new MongoId("6179ad0a6e9dd54ac275e3f2"); public static readonly MongoId SEASIDE_VACATION = new MongoId("6179ad56c760af5ad2053587"); public static readonly MongoId LOST_CONTACT = new MongoId("6179afd0bca27a099552e040"); public static readonly MongoId OVERPOPULATION = new MongoId("6179aff8f57fb279792c60a1"); @@ -355,24 +249,12 @@ public static class QuestTpl public static readonly MongoId THE_HERMIT = new MongoId("61904daa7d0d857927447b9c"); public static readonly MongoId LONG_ROAD = new MongoId("6193850f60b34236ee0483de"); public static readonly MongoId CARGO_X_PART_4 = new MongoId("61958c366726521dd96828ec"); - public static readonly MongoId COMPENSATION_FOR_DAMAGE_TRUST = new MongoId( - "61e6e5e0f5b9633f6719ed95" - ); - public static readonly MongoId COMPENSATION_FOR_DAMAGE_WAGER = new MongoId( - "61e6e60223374d168a4576a6" - ); - public static readonly MongoId COMPENSATION_FOR_DAMAGE_BARKEEP = new MongoId( - "61e6e615eea2935bc018a2c5" - ); - public static readonly MongoId COMPENSATION_FOR_DAMAGE_COLLECTION = new MongoId( - "61e6e621bfeab00251576265" - ); - public static readonly MongoId NETWORK_PROVIDER_PART_1 = new MongoId( - "625d6ff5ddc94657c21a1625" - ); - public static readonly MongoId NETWORK_PROVIDER_PART_2 = new MongoId( - "625d6ffaf7308432be1d44c5" - ); + public static readonly MongoId COMPENSATION_FOR_DAMAGE_TRUST = new MongoId("61e6e5e0f5b9633f6719ed95"); + public static readonly MongoId COMPENSATION_FOR_DAMAGE_WAGER = new MongoId("61e6e60223374d168a4576a6"); + public static readonly MongoId COMPENSATION_FOR_DAMAGE_BARKEEP = new MongoId("61e6e615eea2935bc018a2c5"); + public static readonly MongoId COMPENSATION_FOR_DAMAGE_COLLECTION = new MongoId("61e6e621bfeab00251576265"); + public static readonly MongoId NETWORK_PROVIDER_PART_1 = new MongoId("625d6ff5ddc94657c21a1625"); + public static readonly MongoId NETWORK_PROVIDER_PART_2 = new MongoId("625d6ffaf7308432be1d44c5"); public static readonly MongoId ASSESSMENT_PART_1 = new MongoId("625d6ffcaa168e51321d69d7"); public static readonly MongoId ASSESSMENT_PART_2 = new MongoId("625d6fff4149f1149b5b12c9"); public static readonly MongoId ASSESSMENT_PART_3 = new MongoId("625d7001c4874104f230c0c5"); @@ -387,9 +269,7 @@ public static class QuestTpl public static readonly MongoId BROADCAST_PART_1 = new MongoId("626bd75e47ea7f506e5493c5"); public static readonly MongoId STRAY_DOGS = new MongoId("626bdcc3a371ee3a7a3514c5"); public static readonly MongoId AUDIT = new MongoId("638fcd23dc65553116701d33"); - public static readonly MongoId YOUR_CAR_NEEDS_A_SERVICE = new MongoId( - "639135534b15ca31f76bc317" - ); + public static readonly MongoId YOUR_CAR_NEEDS_A_SERVICE = new MongoId("639135534b15ca31f76bc317"); public static readonly MongoId YOUVE_GOT_MAIL = new MongoId("6391359b9444fb141f4e6ee6"); public static readonly MongoId BALLET_LOVER = new MongoId("639135a7e705511c8a4a1b78"); public static readonly MongoId GLORY_TO_CPSU_PART_1 = new MongoId("639135b04ed9512be67647d7"); @@ -399,13 +279,9 @@ public static class QuestTpl public static readonly MongoId POPULATION_CENSUS = new MongoId("639135d89444fb141f4e6eea"); public static readonly MongoId URBAN_MEDICINE = new MongoId("639135e0fa894f0a866afde6"); public static readonly MongoId SURVEILLANCE = new MongoId("639135e8c115f907b14700aa"); - public static readonly MongoId REVISION_STREETS_OF_TARKOV = new MongoId( - "639135f286e646067c176a87" - ); + public static readonly MongoId REVISION_STREETS_OF_TARKOV = new MongoId("639135f286e646067c176a87"); public static readonly MongoId GREEN_CORRIDOR = new MongoId("639136d68ba6894d155e77cf"); - public static readonly MongoId THE_HUNTSMAN_PATH_ADMINISTRATOR = new MongoId( - "639136df4b15ca31f76bc31f" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_ADMINISTRATOR = new MongoId("639136df4b15ca31f76bc31f"); public static readonly MongoId CEASE_FIRE = new MongoId("639136e84ed9512be67647db"); public static readonly MongoId KINGS_OF_THE_ROOFTOPS = new MongoId("639136f086e646067c176a8b"); public static readonly MongoId WATCHING_YOU = new MongoId("639136fa9444fb141f4e6eee"); @@ -419,14 +295,10 @@ public static class QuestTpl public static readonly MongoId PAYBACK = new MongoId("63966fd9ea19ac7ed845db30"); public static readonly MongoId RETURN_THE_FAVOR = new MongoId("63966fe7ea74a47c2d3fc0e6"); public static readonly MongoId PROVOCATION = new MongoId("63966ff54c3ef01b6f3ffad8"); - public static readonly MongoId FOLLOWING_THE_BREAD_CRUMBS = new MongoId( - "639670029113f06a7c3b2377" - ); + public static readonly MongoId FOLLOWING_THE_BREAD_CRUMBS = new MongoId("639670029113f06a7c3b2377"); public static readonly MongoId SPOTTER = new MongoId("6396700fea19ac7ed845db32"); public static readonly MongoId MAKE_AN_IMPRESSION = new MongoId("6396701b9113f06a7c3b2379"); - public static readonly MongoId TROUBLE_IN_THE_BIG_CITY = new MongoId( - "63967028c4a91c5cb76abd81" - ); + public static readonly MongoId TROUBLE_IN_THE_BIG_CITY = new MongoId("63967028c4a91c5cb76abd81"); public static readonly MongoId GUNSMITH_PART_4 = new MongoId("639872f9decada40426d3447"); public static readonly MongoId GUNSMITH_PART_9 = new MongoId("639872fa9b4fb827b200d8e5"); public static readonly MongoId GUNSMITH_PART_11 = new MongoId("639872fc93ae507d5858c3a6"); @@ -448,16 +320,10 @@ public static class QuestTpl public static readonly MongoId HUSTLE = new MongoId("649567f359eab30d1b7c9585"); public static readonly MongoId TOURISTS = new MongoId("649570491bb4d158bc4d0168"); public static readonly MongoId COCKTAIL_TASTING = new MongoId("649af47d717cb30e7e4b5e26"); - public static readonly MongoId THE_HUNTSMAN_PATH_BIG_GAME = new MongoId( - "64e7b971f9d6fa49d6769b44" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_BIG_GAME = new MongoId("64e7b971f9d6fa49d6769b44"); public static readonly MongoId GENDARMERIE_MALL_COP = new MongoId("64e7b99017ab941a6f7bf9d7"); - public static readonly MongoId GENDARMERIE_TICKETS_PLEASE = new MongoId( - "64e7b9a4aac4cd0a726562cb" - ); - public static readonly MongoId GENDARMERIE_DISTRICT_PATROL = new MongoId( - "64e7b9bffd30422ed03dad38" - ); + public static readonly MongoId GENDARMERIE_TICKETS_PLEASE = new MongoId("64e7b9a4aac4cd0a726562cb"); + public static readonly MongoId GENDARMERIE_DISTRICT_PATROL = new MongoId("64e7b9bffd30422ed03dad38"); public static readonly MongoId BROADCAST_PART_5 = new MongoId("64ee99639878a0569d6ec8c9"); public static readonly MongoId THE_DOOR = new MongoId("64ee9df4496db64f9b7a4432"); public static readonly MongoId OVERSEAS_TRUST_PART_1 = new MongoId("64f1cc571a5f313cb144bf90"); @@ -465,15 +331,9 @@ public static class QuestTpl public static readonly MongoId AMBULANCES_AGAIN = new MongoId("64f3176921045e77405d63b5"); public static readonly MongoId GLORY_TO_CPSU_PART_2 = new MongoId("64f5aac4b63b74469b6c14c2"); public static readonly MongoId TEST_DRIVE_PART_3 = new MongoId("64f5deac39e45b527a7c4232"); - public static readonly MongoId BEYOND_THE_RED_MEAT_PART_1 = new MongoId( - "64f5e20652fc01298e2c61e3" - ); - public static readonly MongoId BEYOND_THE_RED_MEAT_PART_2 = new MongoId( - "64f6aafd67e11a7c6206e0d0" - ); - public static readonly MongoId PETS_WONT_NEED_IT_PART_1 = new MongoId( - "64f731ab83cfca080a361e42" - ); + public static readonly MongoId BEYOND_THE_RED_MEAT_PART_1 = new MongoId("64f5e20652fc01298e2c61e3"); + public static readonly MongoId BEYOND_THE_RED_MEAT_PART_2 = new MongoId("64f6aafd67e11a7c6206e0d0"); + public static readonly MongoId PETS_WONT_NEED_IT_PART_1 = new MongoId("64f731ab83cfca080a361e42"); public static readonly MongoId GUNSMITH_PART_23 = new MongoId("64f83bb69878a0569d6ecfbe"); public static readonly MongoId GUNSMITH_PART_24 = new MongoId("64f83bcdde58fc437700d8fa"); public static readonly MongoId GUNSMITH_PART_25 = new MongoId("64f83bd983cfca080a362c82"); @@ -484,59 +344,31 @@ public static class QuestTpl public static readonly MongoId LUXURIOUS_LIFE = new MongoId("657315e1dccd301f1301416a"); public static readonly MongoId BURNING_RUBBER = new MongoId("657315e270bb0b8dba00cc48"); public static readonly MongoId SAVING_THE_MOLE = new MongoId("657315e4a6af4ab4b50f3459"); - public static readonly MongoId DEVELOPERS_SECRETS_PART_1 = new MongoId( - "65733403eefc2c312a759ddb" - ); - public static readonly MongoId DEVELOPERS_SECRETS_PART_2 = new MongoId( - "6573382e557ff128bf3da536" - ); - public static readonly MongoId PETS_WONT_NEED_IT_PART_2 = new MongoId( - "6573387d0b26ed4fde798de3" - ); + public static readonly MongoId DEVELOPERS_SECRETS_PART_1 = new MongoId("65733403eefc2c312a759ddb"); + public static readonly MongoId DEVELOPERS_SECRETS_PART_2 = new MongoId("6573382e557ff128bf3da536"); + public static readonly MongoId PETS_WONT_NEED_IT_PART_2 = new MongoId("6573387d0b26ed4fde798de3"); public static readonly MongoId PROPERTIES_ALL_AROUND = new MongoId("6573397ef3f8344c4575cd87"); public static readonly MongoId DANDIES = new MongoId("65734c186dc1e402c80dc19e"); public static readonly MongoId TEST_DRIVE_PART_4 = new MongoId("6574e0dedc0d635f633a5805"); - public static readonly MongoId THE_HUNTSMAN_PATH_CROOKED_COP = new MongoId( - "6578eb36e5020875d64645cd" - ); + public static readonly MongoId THE_HUNTSMAN_PATH_CROOKED_COP = new MongoId("6578eb36e5020875d64645cd"); public static readonly MongoId STEADY_SIGNAL = new MongoId("6578ec473dbd035d04531a8d"); public static readonly MongoId NO_SWIPING = new MongoId("658027799634223183395339"); - public static readonly MongoId NOTHING_FISHY_ABOUT_THIS = new MongoId( - "65802b627b44fa5e14638899" - ); + public static readonly MongoId NOTHING_FISHY_ABOUT_THIS = new MongoId("65802b627b44fa5e14638899"); public static readonly MongoId THE_TARKOV_MYSTERY = new MongoId("6603fe74e773dcf3b0099f88"); public static readonly MongoId EASY_MONEY_PART_1 = new MongoId("66058cb22cee99303f1ba067"); public static readonly MongoId EASY_MONEY_PART_2 = new MongoId("66058cb5ae4719735349b9e8"); public static readonly MongoId BALANCING_PART_1 = new MongoId("66058cb7c7f3584787181476"); public static readonly MongoId BALANCING_PART_2 = new MongoId("66058cb9e8e4f17985230805"); public static readonly MongoId SURPRISE = new MongoId("66058cbb06ef1d50a60c1f46"); - public static readonly MongoId CREATE_A_DISTRACTION_PART_1 = new MongoId( - "66058cbd9f59e625462acc8e" - ); - public static readonly MongoId CREATE_A_DISTRACTION_PART_2 = new MongoId( - "66058cbf2f19c31a5a1337ec" - ); - public static readonly MongoId TO_GREAT_HEIGHTS_PART_1 = new MongoId( - "66058cc1da30b620a34e6e86" - ); - public static readonly MongoId TO_GREAT_HEIGHTS_PART_2 = new MongoId( - "66058cc208308761cf390993" - ); - public static readonly MongoId TO_GREAT_HEIGHTS_PART_3 = new MongoId( - "66058cc5bb83da7ba474aba9" - ); - public static readonly MongoId TO_GREAT_HEIGHTS_PART_4 = new MongoId( - "66058cc72cee99303f1ba069" - ); - public static readonly MongoId TO_GREAT_HEIGHTS_PART_5 = new MongoId( - "66058cc9ae4719735349b9ea" - ); - public static readonly MongoId AGAINST_THE_CONSCIENCE_PART_1 = new MongoId( - "66058ccbc7f3584787181478" - ); - public static readonly MongoId AGAINST_THE_CONSCIENCE_PART_2 = new MongoId( - "66058ccde8e4f17985230807" - ); + public static readonly MongoId CREATE_A_DISTRACTION_PART_1 = new MongoId("66058cbd9f59e625462acc8e"); + public static readonly MongoId CREATE_A_DISTRACTION_PART_2 = new MongoId("66058cbf2f19c31a5a1337ec"); + public static readonly MongoId TO_GREAT_HEIGHTS_PART_1 = new MongoId("66058cc1da30b620a34e6e86"); + public static readonly MongoId TO_GREAT_HEIGHTS_PART_2 = new MongoId("66058cc208308761cf390993"); + public static readonly MongoId TO_GREAT_HEIGHTS_PART_3 = new MongoId("66058cc5bb83da7ba474aba9"); + public static readonly MongoId TO_GREAT_HEIGHTS_PART_4 = new MongoId("66058cc72cee99303f1ba069"); + public static readonly MongoId TO_GREAT_HEIGHTS_PART_5 = new MongoId("66058cc9ae4719735349b9ea"); + public static readonly MongoId AGAINST_THE_CONSCIENCE_PART_1 = new MongoId("66058ccbc7f3584787181478"); + public static readonly MongoId AGAINST_THE_CONSCIENCE_PART_2 = new MongoId("66058ccde8e4f17985230807"); public static readonly MongoId BETWEEN_TWO_FIRES = new MongoId("66058ccf06ef1d50a60c1f48"); public static readonly MongoId DECISIONS_DECISIONS = new MongoId("66058cd19f59e625462acc90"); public static readonly MongoId DRIP_OUT_PART_1_BEAR = new MongoId("6613f3007f6666d56807c929"); @@ -587,9 +419,7 @@ public static class QuestTpl public static readonly MongoId ALL_IS_REVEALED = new MongoId("669fa39ee749756c920d02c8"); public static readonly MongoId DRAGNET = new MongoId("669fa3a08b4a64b332041ff7"); public static readonly MongoId CAPACITY_CHECK = new MongoId("669fa3a1c26f13bd04030f37"); - public static readonly MongoId HEALTH_CARE_PRIVACY_PART_6 = new MongoId( - "669fa3a3ad7f1eac2607ed48" - ); + public static readonly MongoId HEALTH_CARE_PRIVACY_PART_6 = new MongoId("669fa3a3ad7f1eac2607ed48"); public static readonly MongoId TEST_DRIVE_PART_5 = new MongoId("669fa3a40c828825de06d6a1"); public static readonly MongoId GUNSMITH_SPECIAL_ORDER = new MongoId("66a74c628410476dd65543be"); public static readonly MongoId GUN_CONNOISSEUR = new MongoId("66a75b44243a6548ff5e5ff9"); @@ -602,9 +432,7 @@ public static class QuestTpl public static readonly MongoId FORESTERS_DUTY = new MongoId("66ab9da7eb102b9bcd08591c"); public static readonly MongoId BENEATH_THE_STREETS = new MongoId("66aba85403e0ee3101042877"); public static readonly MongoId ROUGH_TARKOV = new MongoId("66b38c7bf85b8bf7250f9cb6"); - public static readonly MongoId EVERY_HUNTER_KNOWS_THIS = new MongoId( - "66b38e144f2ab7cc530c3fe7" - ); + public static readonly MongoId EVERY_HUNTER_KNOWS_THIS = new MongoId("66b38e144f2ab7cc530c3fe7"); public static readonly MongoId IS_THIS_A_REFERENCE = new MongoId("66d9cbb67b491f9d5304f6e6"); public static readonly MongoId INTO_THE_INFERNO = new MongoId("66e01aca214f88109006a4b5"); public static readonly MongoId IN_AND_OUT = new MongoId("66e01ad15a8890455a0d9eea"); @@ -622,17 +450,13 @@ public static class QuestTpl public static readonly MongoId FIND_THE_SOURCE = new MongoId("67040c43ce929d6ee506c7c7"); public static readonly MongoId GLOVES_OFF = new MongoId("67040c5b4ac6d9c18c0ade26"); public static readonly MongoId SAMPLE_IV_A_NEW_HOPE = new MongoId("67040c78bf4be8a4ef041a65"); - public static readonly MongoId DARKEST_HOUR_IS_JUST_BEFORE_DAWN = new MongoId( - "67040c92bf4be8a4ef041a6c" - ); + public static readonly MongoId DARKEST_HOUR_IS_JUST_BEFORE_DAWN = new MongoId("67040c92bf4be8a4ef041a6c"); public static readonly MongoId RADICAL_TREATMENT = new MongoId("67040cae4ac6d9c18c0ade2c"); public static readonly MongoId FORGOTTEN_OATHS = new MongoId("67040ccdcc1f3752720376ef"); public static readonly MongoId GLOBAL_THREAT = new MongoId("67190f6c1b3f4964d90d71e9"); public static readonly MongoId WATCH_THE_WATCHER = new MongoId("67190f9c7b0991dc22064766"); public static readonly MongoId NOT_A_STEP_BACK = new MongoId("67190febcce4a5fdf605d4f8"); - public static readonly MongoId PRESSURED_BY_CIRCUMSTANCES = new MongoId( - "67191048eddf081d340d4c6e" - ); + public static readonly MongoId PRESSURED_BY_CIRCUMSTANCES = new MongoId("67191048eddf081d340d4c6e"); public static readonly MongoId CONSERVATION_AREA = new MongoId("671910d5dbd4354ac10e9784"); public static readonly MongoId IRRESISTIBLE = new MongoId("671a49f77d49aea42c029b5f"); public static readonly MongoId DANGEROUS_PROPS = new MongoId("671a59e43d73dac1360765cc"); @@ -640,9 +464,7 @@ public static class QuestTpl public static readonly MongoId SHIPPING_DELAY_PART_2 = new MongoId("673f2cd5d3346c2167020484"); public static readonly MongoId SHIPPING_DELAY_PART_1 = new MongoId("673f348dd3346c21670217e7"); public static readonly MongoId HOT_WHEELS = new MongoId("673f4e956f1b89c7bc0f56ef"); - public static readonly MongoId HOT_WHEELS_LETS_TRY_AGAIN = new MongoId( - "673f5a4976553f78350bdac1" - ); + public static readonly MongoId HOT_WHEELS_LETS_TRY_AGAIN = new MongoId("673f5a4976553f78350bdac1"); public static readonly MongoId INEVITABLE_RESPONSE = new MongoId("673f6027352b4da8e00322d2"); public static readonly MongoId ORDER_FROM_OUTSIDE = new MongoId("673f61a066e6a521aa04b62b"); public static readonly MongoId BUILDING_FOUNDATIONS = new MongoId("673f629c5b555b53460cf827"); @@ -657,12 +479,8 @@ public static class QuestTpl public static readonly MongoId BATTERY_CHANGE_2 = new MongoId("6744a9dfef61d56e020b5c4a"); public static readonly MongoId PROTECT_THE_SKY = new MongoId("6744ab1def61d56e020b5c56"); public static readonly MongoId DISCOMBOBULATE = new MongoId("6744aca8d3346c216702c583"); - public static readonly MongoId THE_PRICE_OF_INDEPENDENCE = new MongoId( - "6744af0969a58fceba101fed" - ); - public static readonly MongoId THE_PRICE_OF_INDEPENDENCE_2 = new MongoId( - "6745cbee909d2013670a4a55" - ); + public static readonly MongoId THE_PRICE_OF_INDEPENDENCE = new MongoId("6744af0969a58fceba101fed"); + public static readonly MongoId THE_PRICE_OF_INDEPENDENCE_2 = new MongoId("6745cbee909d2013670a4a55"); public static readonly MongoId THE_HIGHER_THEY_FLY = new MongoId("6745fae369a58fceba10343d"); public static readonly MongoId SWIFT_RETRIBUTION = new MongoId("6745fcded0fbbc74ca0f721d"); public static readonly MongoId SIMPLE_SIDE_JOB = new MongoId("6745fdddd3346c216702e0bf"); @@ -670,21 +488,15 @@ public static class QuestTpl public static readonly MongoId HINDSIGHT_2020 = new MongoId("674602307e3818d5bb069489"); public static readonly MongoId KEY_PARTNER = new MongoId("6746053b5b555b53460d9896"); public static readonly MongoId KILLER_ARGUMENT = new MongoId("674605df60a98cad1b0ec799"); - public static readonly MongoId CHOOSE_YOUR_FRIENDS_WISELY = new MongoId( - "67460662d0fbbc74ca0f7229" - ); + public static readonly MongoId CHOOSE_YOUR_FRIENDS_WISELY = new MongoId("67460662d0fbbc74ca0f7229"); public static readonly MongoId CHRISTMAS_DINNER = new MongoId("675031be899713ccad00060c"); public static readonly MongoId CHILLY = new MongoId("675031d3884e1da4a90b3bc9"); public static readonly MongoId HIDE_IN_PLAIN_SIGHT = new MongoId("675031e1f300496cc4104450"); public static readonly MongoId CHEER_UP = new MongoId("675031f57775aada6b0f96a1"); - public static readonly MongoId HOLIDAY_BEYOND_THE_MEANS = new MongoId( - "6750320e23fc8fd9cc087d14" - ); + public static readonly MongoId HOLIDAY_BEYOND_THE_MEANS = new MongoId("6750320e23fc8fd9cc087d14"); public static readonly MongoId ILLEGAL_LOGGING = new MongoId("67503219527c9a38e80496ae"); public static readonly MongoId KHOROVOD = new MongoId("67503247622398376d0b57cd"); - public static readonly MongoId ENOUGH_DRINKS_FOR_THAT_ONE = new MongoId( - "67503260899713ccad00060e" - ); + public static readonly MongoId ENOUGH_DRINKS_FOR_THAT_ONE = new MongoId("67503260899713ccad00060e"); public static readonly MongoId A_HELPING_HAND = new MongoId("6752f6d83038f7df520c83e8"); public static readonly MongoId ABANDONED_CARGO = new MongoId("675c03d1f7da9792a405549a"); public static readonly MongoId SHIPMENT_TRACKING = new MongoId("675c047fa46173572a0bd878"); @@ -699,28 +511,18 @@ public static class QuestTpl public static readonly MongoId BELKA_AND_STRELKA = new MongoId("675c3507a06634b5110e3c18"); public static readonly MongoId PRIVATE_CLUB = new MongoId("675c3582f6ddc329a90f9c6d"); public static readonly MongoId CONNECTIONS_UP_NORTH = new MongoId("6764174c86addd02bc033d68"); - public static readonly MongoId GUNSMITH_OLD_FRIENDS_REQUEST = new MongoId( - "676529af9c90953d090882e7" - ); - public static readonly MongoId THE_PRICE_OF_CELEBRATION = new MongoId( - "676c243577f0257dd50239e6" - ); + public static readonly MongoId GUNSMITH_OLD_FRIENDS_REQUEST = new MongoId("676529af9c90953d090882e7"); + public static readonly MongoId THE_PRICE_OF_CELEBRATION = new MongoId("676c243577f0257dd50239e6"); public static readonly MongoId THIS_IS_MY_PARTY = new MongoId("676c243fb16f4b14b905e7f4"); public static readonly MongoId SHADY_CONTRACTOR = new MongoId("67a09636b8725511260bc421"); public static readonly MongoId NEEDLE_IN_A_HAYSTACK = new MongoId("67a0964e972c11a3f507731b"); public static readonly MongoId HIDDEN_LAYER = new MongoId("67a096577e86e067eb045733"); public static readonly MongoId FORCED_ALLIANCE = new MongoId("67a0966817e34930e500754c"); public static readonly MongoId THE_TARKOV_BUTCHER = new MongoId("67a09673972c11a3f507731d"); - public static readonly MongoId SENSORY_ANALYSIS_PART_1 = new MongoId( - "67a0967c003a9986cb0f5ac1" - ); - public static readonly MongoId SENSORY_ANALYSIS_PART_2 = new MongoId( - "67a096ed77dd677f600804ba" - ); + public static readonly MongoId SENSORY_ANALYSIS_PART_1 = new MongoId("67a0967c003a9986cb0f5ac1"); + public static readonly MongoId SENSORY_ANALYSIS_PART_2 = new MongoId("67a096ed77dd677f600804ba"); public static readonly MongoId HOT_ZONE = new MongoId("67a096f605d1611ed90be75a"); - public static readonly MongoId OFFENSIVE_RECONNAISSANCE = new MongoId( - "67a0970744893b9f3f0d9b68" - ); + public static readonly MongoId OFFENSIVE_RECONNAISSANCE = new MongoId("67a0970744893b9f3f0d9b68"); public static readonly MongoId HYPOTHESES_TESTING = new MongoId("67a0970f05d1611ed90be75d"); public static readonly MongoId CONFIDENTIAL_INFO = new MongoId("67a09724972c11a3f5077324"); public static readonly MongoId THIS_TAPE_SUCKS = new MongoId("67a0972e77dd677f600804bd"); @@ -728,9 +530,7 @@ public static class QuestTpl public static readonly MongoId KEEPERS_WORD = new MongoId("67a09761e720611a6a01f288"); public static readonly MongoId PROFITABLE_VENTURE = new MongoId("67af4c1405c58dc6f7056667"); public static readonly MongoId SAFETY_GUARANTEE = new MongoId("67af4c169d95ad16e004fd86"); - public static readonly MongoId NEVER_TOO_LATE_TO_LEARN = new MongoId( - "67af4c17f4f1fb58a907f8f6" - ); + public static readonly MongoId NEVER_TOO_LATE_TO_LEARN = new MongoId("67af4c17f4f1fb58a907f8f6"); public static readonly MongoId GET_A_FOOTHOLD = new MongoId("67af4c1991ee75c6d7060a16"); public static readonly MongoId PROFIT_RETENTION = new MongoId("67af4c1a6c3ebfd8e6034916"); public static readonly MongoId A_LIFE_LESSON = new MongoId("67af4c1cc0e59d55e2010b97"); diff --git a/Libraries/SPTarkov.Server.Core/Models/Enums/Weapons.cs b/Libraries/SPTarkov.Server.Core/Models/Enums/Weapons.cs index 7c036562..680bb247 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Enums/Weapons.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Enums/Weapons.cs @@ -3,264 +3,102 @@ using SPTarkov.Server.Core.Models.Common; // This is an auto generated file, do not modify. Re-generate by running MongoIdTplGenerator.exe public static class Weapons { - public static readonly MongoId ASSAULTCARBINE_762X39_OP_SKS = new MongoId( - "587e02ff24597743df3deaeb" - ); - public static readonly MongoId ASSAULTCARBINE_762X39_SKS = new MongoId( - "574d967124597745970e7c94" - ); - public static readonly MongoId ASSAULTCARBINE_762X51_VPO_101_VEPR_HUNTER = new MongoId( - "5c501a4d2e221602b412b540" - ); - public static readonly MongoId ASSAULTCARBINE_762X54R_AVT_40 = new MongoId( - "6410733d5dd49d77bd07847e" - ); - public static readonly MongoId ASSAULTCARBINE_762X54R_SVT_40 = new MongoId( - "643ea5b23db6f9f57107d9fd" - ); - public static readonly MongoId ASSAULTCARBINE_9X39_9A_91 = new MongoId( - "644674a13d52156624001fbc" - ); - public static readonly MongoId ASSAULTCARBINE_9X39_AS_VAL = new MongoId( - "57c44b372459772d2b39b8ce" - ); - public static readonly MongoId ASSAULTCARBINE_9X39_SR_3M = new MongoId( - "651450ce0e00edc794068371" - ); - public static readonly MongoId ASSAULTCARBINE_9X39_VSK_94 = new MongoId( - "645e0c6b3b381ede770e1cc9" - ); - public static readonly MongoId ASSAULTRIFLE_127X55_ASH_12 = new MongoId( - "5cadfbf7ae92152ac412eeef" - ); - public static readonly MongoId ASSAULTRIFLE_366TKM_VPO_209 = new MongoId( - "59e6687d86f77411d949b251" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_105 = new MongoId( - "5ac66d9b5acfc4001633997a" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_12 = new MongoId( - "6499849fc93611967b034949" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_545 = new MongoId( - "628b5638ad252a16da6dd245" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_545_SHORT = new MongoId( - "628b9c37a733087d0d7fe84b" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_74 = new MongoId( - "5bf3e03b0db834001d2c4a9c" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_74M = new MongoId( - "5ac4cd105acfc40016339859" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AK_74N = new MongoId( - "5644bd2b4bdc2d3b4c8b4572" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74 = new MongoId( - "5bf3e0490db83400196199af" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74N = new MongoId( - "5ab8e9fcd8ce870019439434" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74U = new MongoId( - "57dc2fa62459775949412633" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74UB = new MongoId( - "5839a40f24597726f856b511" - ); - public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74UN = new MongoId( - "583990e32459771419544dd2" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_ADAR_2_15 = new MongoId( - "5c07c60e0db834002330051f" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_AK_101 = new MongoId( - "5ac66cb05acfc40198510a10" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_AK_102 = new MongoId( - "5ac66d015acfc400180ae6e4" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_AUG_A1 = new MongoId( - "62e7c4fba689e8c9c50dfc38" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_AUG_A3 = new MongoId( - "63171672192e68c5460cebc5" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_AUG_A3_BLACK = new MongoId( - "6718817435e3cfd9550d2c27" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_G36 = new MongoId( - "623063e994fc3f7b302a9696" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_HK_416A5 = new MongoId( - "5bb2475ed4351e00853264e3" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_M4A1 = new MongoId( - "5447a9cd4bdc2dbd208b4567" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_MDR = new MongoId( - "5c488a752e221602b412af63" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_MK_16 = new MongoId( - "6184055050224f204c1da540" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_MK_16_FDE = new MongoId( - "618428466ef05c2ce828f218" - ); - public static readonly MongoId ASSAULTRIFLE_556X45_TX_15_DML = new MongoId( - "5d43021ca4b9362eab4b5e25" - ); - public static readonly MongoId ASSAULTRIFLE_68X51_SPEAR_68 = new MongoId( - "65290f395ae2ae97b80fdf2d" - ); - public static readonly MongoId ASSAULTRIFLE_762X35_MCX_300_BLK = new MongoId( - "5fbcc1d9016cce60e8341ab3" - ); - public static readonly MongoId ASSAULTRIFLE_762X35_VELOCIRAPTOR_300_BLK = new MongoId( - "674d6121c09f69dfb201a888" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_AK_103 = new MongoId( - "5ac66d2e5acfc43b321d4b53" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_AK_104 = new MongoId( - "5ac66d725acfc43b321d4b60" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_AKM = new MongoId( - "59d6088586f774275f37482f" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_AKMN = new MongoId( - "5a0ec13bfcdbcb00165aa685" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_AKMS = new MongoId( - "59ff346386f77477562ff5e2" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_AKMSN = new MongoId( - "5abcbc27d8ce8700182eceeb" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_MK47 = new MongoId( - "606587252535c57a13424cfd" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_RD_704 = new MongoId( - "628a60ae6b1d481ff772e9c8" - ); - public static readonly MongoId ASSAULTRIFLE_762X39_VPO_136_VEPR_KM = new MongoId( - "59e6152586f77473dc057aa1" - ); - public static readonly MongoId ASSAULTRIFLE_762X51_MDR = new MongoId( - "5dcbd56fdbd3d91b3e5468d5" - ); - public static readonly MongoId ASSAULTRIFLE_762X51_MK_17 = new MongoId( - "6183afd850224f204c1da514" - ); - public static readonly MongoId ASSAULTRIFLE_762X51_MK_17_FDE = new MongoId( - "6165ac306ef05c2ce828ef74" - ); - public static readonly MongoId ASSAULTRIFLE_762X51_SA58 = new MongoId( - "5b0bbe4e5acfc40dc528a72d" - ); - public static readonly MongoId ASSAULTRIFLE_762X51_X_17 = new MongoId( - "676176d362e0497044079f4c" - ); - public static readonly MongoId ASSAULTRIFLE_9X18PM_MASTER_HAND = new MongoId( - "5ae083b25acfc4001a5fc702" - ); + public static readonly MongoId ASSAULTCARBINE_762X39_OP_SKS = new MongoId("587e02ff24597743df3deaeb"); + public static readonly MongoId ASSAULTCARBINE_762X39_SKS = new MongoId("574d967124597745970e7c94"); + public static readonly MongoId ASSAULTCARBINE_762X51_VPO_101_VEPR_HUNTER = new MongoId("5c501a4d2e221602b412b540"); + public static readonly MongoId ASSAULTCARBINE_762X54R_AVT_40 = new MongoId("6410733d5dd49d77bd07847e"); + public static readonly MongoId ASSAULTCARBINE_762X54R_SVT_40 = new MongoId("643ea5b23db6f9f57107d9fd"); + public static readonly MongoId ASSAULTCARBINE_9X39_9A_91 = new MongoId("644674a13d52156624001fbc"); + public static readonly MongoId ASSAULTCARBINE_9X39_AS_VAL = new MongoId("57c44b372459772d2b39b8ce"); + public static readonly MongoId ASSAULTCARBINE_9X39_SR_3M = new MongoId("651450ce0e00edc794068371"); + public static readonly MongoId ASSAULTCARBINE_9X39_VSK_94 = new MongoId("645e0c6b3b381ede770e1cc9"); + public static readonly MongoId ASSAULTRIFLE_127X55_ASH_12 = new MongoId("5cadfbf7ae92152ac412eeef"); + public static readonly MongoId ASSAULTRIFLE_366TKM_VPO_209 = new MongoId("59e6687d86f77411d949b251"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_105 = new MongoId("5ac66d9b5acfc4001633997a"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_12 = new MongoId("6499849fc93611967b034949"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_545 = new MongoId("628b5638ad252a16da6dd245"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_545_SHORT = new MongoId("628b9c37a733087d0d7fe84b"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_74 = new MongoId("5bf3e03b0db834001d2c4a9c"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_74M = new MongoId("5ac4cd105acfc40016339859"); + public static readonly MongoId ASSAULTRIFLE_545X39_AK_74N = new MongoId("5644bd2b4bdc2d3b4c8b4572"); + public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74 = new MongoId("5bf3e0490db83400196199af"); + public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74N = new MongoId("5ab8e9fcd8ce870019439434"); + public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74U = new MongoId("57dc2fa62459775949412633"); + public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74UB = new MongoId("5839a40f24597726f856b511"); + public static readonly MongoId ASSAULTRIFLE_545X39_AKS_74UN = new MongoId("583990e32459771419544dd2"); + public static readonly MongoId ASSAULTRIFLE_556X45_ADAR_2_15 = new MongoId("5c07c60e0db834002330051f"); + public static readonly MongoId ASSAULTRIFLE_556X45_AK_101 = new MongoId("5ac66cb05acfc40198510a10"); + public static readonly MongoId ASSAULTRIFLE_556X45_AK_102 = new MongoId("5ac66d015acfc400180ae6e4"); + public static readonly MongoId ASSAULTRIFLE_556X45_AUG_A1 = new MongoId("62e7c4fba689e8c9c50dfc38"); + public static readonly MongoId ASSAULTRIFLE_556X45_AUG_A3 = new MongoId("63171672192e68c5460cebc5"); + public static readonly MongoId ASSAULTRIFLE_556X45_AUG_A3_BLACK = new MongoId("6718817435e3cfd9550d2c27"); + public static readonly MongoId ASSAULTRIFLE_556X45_G36 = new MongoId("623063e994fc3f7b302a9696"); + public static readonly MongoId ASSAULTRIFLE_556X45_HK_416A5 = new MongoId("5bb2475ed4351e00853264e3"); + public static readonly MongoId ASSAULTRIFLE_556X45_M4A1 = new MongoId("5447a9cd4bdc2dbd208b4567"); + public static readonly MongoId ASSAULTRIFLE_556X45_MDR = new MongoId("5c488a752e221602b412af63"); + public static readonly MongoId ASSAULTRIFLE_556X45_MK_16 = new MongoId("6184055050224f204c1da540"); + public static readonly MongoId ASSAULTRIFLE_556X45_MK_16_FDE = new MongoId("618428466ef05c2ce828f218"); + public static readonly MongoId ASSAULTRIFLE_556X45_TX_15_DML = new MongoId("5d43021ca4b9362eab4b5e25"); + public static readonly MongoId ASSAULTRIFLE_68X51_SPEAR_68 = new MongoId("65290f395ae2ae97b80fdf2d"); + public static readonly MongoId ASSAULTRIFLE_762X35_MCX_300_BLK = new MongoId("5fbcc1d9016cce60e8341ab3"); + public static readonly MongoId ASSAULTRIFLE_762X35_VELOCIRAPTOR_300_BLK = new MongoId("674d6121c09f69dfb201a888"); + public static readonly MongoId ASSAULTRIFLE_762X39_AK_103 = new MongoId("5ac66d2e5acfc43b321d4b53"); + public static readonly MongoId ASSAULTRIFLE_762X39_AK_104 = new MongoId("5ac66d725acfc43b321d4b60"); + public static readonly MongoId ASSAULTRIFLE_762X39_AKM = new MongoId("59d6088586f774275f37482f"); + public static readonly MongoId ASSAULTRIFLE_762X39_AKMN = new MongoId("5a0ec13bfcdbcb00165aa685"); + public static readonly MongoId ASSAULTRIFLE_762X39_AKMS = new MongoId("59ff346386f77477562ff5e2"); + public static readonly MongoId ASSAULTRIFLE_762X39_AKMSN = new MongoId("5abcbc27d8ce8700182eceeb"); + public static readonly MongoId ASSAULTRIFLE_762X39_MK47 = new MongoId("606587252535c57a13424cfd"); + public static readonly MongoId ASSAULTRIFLE_762X39_RD_704 = new MongoId("628a60ae6b1d481ff772e9c8"); + public static readonly MongoId ASSAULTRIFLE_762X39_VPO_136_VEPR_KM = new MongoId("59e6152586f77473dc057aa1"); + public static readonly MongoId ASSAULTRIFLE_762X51_MDR = new MongoId("5dcbd56fdbd3d91b3e5468d5"); + public static readonly MongoId ASSAULTRIFLE_762X51_MK_17 = new MongoId("6183afd850224f204c1da514"); + public static readonly MongoId ASSAULTRIFLE_762X51_MK_17_FDE = new MongoId("6165ac306ef05c2ce828ef74"); + public static readonly MongoId ASSAULTRIFLE_762X51_SA58 = new MongoId("5b0bbe4e5acfc40dc528a72d"); + public static readonly MongoId ASSAULTRIFLE_762X51_X_17 = new MongoId("676176d362e0497044079f4c"); + public static readonly MongoId ASSAULTRIFLE_9X18PM_MASTER_HAND = new MongoId("5ae083b25acfc4001a5fc702"); public static readonly MongoId FLARE_26X75_BLUE = new MongoId("66d98233302686954b0c6f81"); public static readonly MongoId FLARE_26X75_FIREWORK = new MongoId("675ea3d6312c0a5c4e04e317"); - public static readonly MongoId FLARE_26X75_FLARE_WHITE = new MongoId( - "62178be9d0050232da3485d9" - ); + public static readonly MongoId FLARE_26X75_FLARE_WHITE = new MongoId("62178be9d0050232da3485d9"); public static readonly MongoId FLARE_26X75_GREEN = new MongoId("6217726288ed9f0845317459"); public static readonly MongoId FLARE_26X75_RED = new MongoId("62178c4d4ecf221597654e3d"); - public static readonly MongoId FLARE_26X75_S_YELLOW_SPECIAL_YELLOW = new MongoId( - "66d9f1abb16d9aacf5068468" - ); + public static readonly MongoId FLARE_26X75_S_YELLOW_SPECIAL_YELLOW = new MongoId("66d9f1abb16d9aacf5068468"); public static readonly MongoId FLARE_26X75_YELLOW = new MongoId("624c0b3340357b5f566e8766"); - public static readonly MongoId GRENADELAUNCHER_40MMRU_FN40GL = new MongoId( - "639af924d0446708ee62294e" - ); - public static readonly MongoId GRENADELAUNCHER_40X46_FN40GL = new MongoId( - "5e81ebcd8e146c7080625e15" - ); - public static readonly MongoId GRENADELAUNCHER_40X46_FN40GL_2 = new MongoId( - "639c3fbbd0446708ee622ee9" - ); - public static readonly MongoId MACHINEGUN_30X29_AGS_30 = new MongoId( - "5d52cc5ba4b9367408500062" - ); - public static readonly MongoId MACHINEGUN_545X39_NSV_UTYOS = new MongoId( - "5cdeb229d7f00c000e7ce174" - ); - public static readonly MongoId MACHINEGUN_545X39_RPK_16 = new MongoId( - "5beed0f50db834001c062b12" - ); + public static readonly MongoId GRENADELAUNCHER_40MMRU_FN40GL = new MongoId("639af924d0446708ee62294e"); + public static readonly MongoId GRENADELAUNCHER_40X46_FN40GL = new MongoId("5e81ebcd8e146c7080625e15"); + public static readonly MongoId GRENADELAUNCHER_40X46_FN40GL_2 = new MongoId("639c3fbbd0446708ee622ee9"); + public static readonly MongoId MACHINEGUN_30X29_AGS_30 = new MongoId("5d52cc5ba4b9367408500062"); + public static readonly MongoId MACHINEGUN_545X39_NSV_UTYOS = new MongoId("5cdeb229d7f00c000e7ce174"); + public static readonly MongoId MACHINEGUN_545X39_RPK_16 = new MongoId("5beed0f50db834001c062b12"); public static readonly MongoId MACHINEGUN_762X39_RPD = new MongoId("6513ef33e06849f06c0957ca"); public static readonly MongoId MACHINEGUN_762X39_RPDN = new MongoId("65268d8ecb944ff1e90ea385"); - public static readonly MongoId MACHINEGUN_762X51_M60E6 = new MongoId( - "661ceb1b9311543c7104149b" - ); - public static readonly MongoId MACHINEGUN_762X51_M60E6_FDE = new MongoId( - "661cec09b2c6356b4d0c7a36" - ); - public static readonly MongoId MACHINEGUN_762X51_MK_43_MOD_1 = new MongoId( - "65fb023261d5829b2d090755" - ); + public static readonly MongoId MACHINEGUN_762X51_M60E6 = new MongoId("661ceb1b9311543c7104149b"); + public static readonly MongoId MACHINEGUN_762X51_M60E6_FDE = new MongoId("661cec09b2c6356b4d0c7a36"); + public static readonly MongoId MACHINEGUN_762X51_MK_43_MOD_1 = new MongoId("65fb023261d5829b2d090755"); public static readonly MongoId MACHINEGUN_762X54R_PKM = new MongoId("64637076203536ad5600c990"); public static readonly MongoId MACHINEGUN_762X54R_PKP = new MongoId("64ca3d3954fc657e230529cc"); - public static readonly MongoId MACHINEGUN_762X54R_PKTM = new MongoId( - "657857faeff4c850222dff1b" - ); - public static readonly MongoId MARKSMANRIFLE_127X99_AK_50 = new MongoId( - "67d0576f29f580ebc10efd08" - ); - public static readonly MongoId MARKSMANRIFLE_762X51_G28 = new MongoId( - "6176aca650224f204c1da3fb" - ); - public static readonly MongoId MARKSMANRIFLE_762X51_M1A = new MongoId( - "5aafa857e5b5b00018480968" - ); - public static readonly MongoId MARKSMANRIFLE_762X51_RFB = new MongoId( - "5f2a9575926fd9352339381f" - ); - public static readonly MongoId MARKSMANRIFLE_762X51_RSASS = new MongoId( - "5a367e5dc4a282000e49738f" - ); - public static readonly MongoId MARKSMANRIFLE_762X51_SR_25 = new MongoId( - "5df8ce05b11454561e39243b" - ); - public static readonly MongoId MARKSMANRIFLE_762X54R_SVDS = new MongoId( - "5c46fbd72e2216398b5a8c9c" - ); - public static readonly MongoId MARKSMANRIFLE_86X70_MK_18_MJLNIR = new MongoId( - "5fc22d7c187fea44d52eda44" - ); - public static readonly MongoId MARKSMANRIFLE_9X39_VSS_VINTOREZ = new MongoId( - "57838ad32459774a17445cd2" - ); - public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_L5 = new MongoId( - "669fa3f88abd2662d80eee77" - ); - public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_L6 = new MongoId( - "669fa39b48fc9f8db6035a0c" - ); - public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_L6_WTS = new MongoId( - "669fa3d876116c89840b1217" - ); - public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_MK_XIX = new MongoId( - "668fe5a998b5ad715703ddd6" - ); + public static readonly MongoId MACHINEGUN_762X54R_PKTM = new MongoId("657857faeff4c850222dff1b"); + public static readonly MongoId MARKSMANRIFLE_127X99_AK_50 = new MongoId("67d0576f29f580ebc10efd08"); + public static readonly MongoId MARKSMANRIFLE_762X51_G28 = new MongoId("6176aca650224f204c1da3fb"); + public static readonly MongoId MARKSMANRIFLE_762X51_M1A = new MongoId("5aafa857e5b5b00018480968"); + public static readonly MongoId MARKSMANRIFLE_762X51_RFB = new MongoId("5f2a9575926fd9352339381f"); + public static readonly MongoId MARKSMANRIFLE_762X51_RSASS = new MongoId("5a367e5dc4a282000e49738f"); + public static readonly MongoId MARKSMANRIFLE_762X51_SR_25 = new MongoId("5df8ce05b11454561e39243b"); + public static readonly MongoId MARKSMANRIFLE_762X54R_SVDS = new MongoId("5c46fbd72e2216398b5a8c9c"); + public static readonly MongoId MARKSMANRIFLE_86X70_MK_18_MJLNIR = new MongoId("5fc22d7c187fea44d52eda44"); + public static readonly MongoId MARKSMANRIFLE_9X39_VSS_VINTOREZ = new MongoId("57838ad32459774a17445cd2"); + public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_L5 = new MongoId("669fa3f88abd2662d80eee77"); + public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_L6 = new MongoId("669fa39b48fc9f8db6035a0c"); + public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_L6_WTS = new MongoId("669fa3d876116c89840b1217"); + public static readonly MongoId PISTOL_127X33_DESERT_EAGLE_MK_XIX = new MongoId("668fe5a998b5ad715703ddd6"); public static readonly MongoId PISTOL_20X1MM_BLICKY = new MongoId("66015072e9f84d5680039678"); public static readonly MongoId PISTOL_45ACP_M1911A1 = new MongoId("5e81c3cbac2bb513793cdc75"); public static readonly MongoId PISTOL_45ACP_M45A1 = new MongoId("5f36a0e5fbf956000b716b65"); public static readonly MongoId PISTOL_45ACP_USP_45 = new MongoId("6193a720f8ee7e52e42109ed"); public static readonly MongoId PISTOL_57X28_FN_5_7 = new MongoId("5d3eb3b0a4b93615055e84d2"); - public static readonly MongoId PISTOL_57X28_FN_5_7_FDE = new MongoId( - "5d67abc1a4b93614ec50137f" - ); + public static readonly MongoId PISTOL_57X28_FN_5_7_FDE = new MongoId("5d67abc1a4b93614ec50137f"); public static readonly MongoId PISTOL_762X25TT_TT = new MongoId("571a12c42459771f627b58a0"); - public static readonly MongoId PISTOL_762X25TT_TT_GOLD_GOLDEN = new MongoId( - "5b3b713c5acfc4330140bd8d" - ); + public static readonly MongoId PISTOL_762X25TT_TT_GOLD_GOLDEN = new MongoId("5b3b713c5acfc4330140bd8d"); public static readonly MongoId PISTOL_9X18PM_APB = new MongoId("5abccb7dd8ce87001773e277"); public static readonly MongoId PISTOL_9X18PM_APS = new MongoId("5a17f98cfcdbcb0980087290"); public static readonly MongoId PISTOL_9X18PM_PB = new MongoId("56e0598dd2720bb5668b45a6"); @@ -270,65 +108,43 @@ public static class Weapons public static readonly MongoId PISTOL_9X19_GLOCK_18C = new MongoId("5b1fa9b25acfc40018633c01"); public static readonly MongoId PISTOL_9X19_GLOCK_19X = new MongoId("63088377b5cd696784087147"); public static readonly MongoId PISTOL_9X19_M9A3 = new MongoId("5cadc190ae921500103bb3b6"); - public static readonly MongoId PISTOL_9X19_MP_443_GRACH = new MongoId( - "576a581d2459771e7b1bc4f1" - ); + public static readonly MongoId PISTOL_9X19_MP_443_GRACH = new MongoId("576a581d2459771e7b1bc4f1"); public static readonly MongoId PISTOL_9X19_P226R = new MongoId("56d59856d2720bd8418b456a"); public static readonly MongoId PISTOL_9X19_PL_15 = new MongoId("602a9740da11d6478d5a06dc"); public static readonly MongoId PISTOL_9X21_SR_1MP = new MongoId("59f98b4986f7746f546d2cef"); - public static readonly MongoId PISTOL_9X33R_DESERT_EAGLE_L5 = new MongoId( - "669fa409933e898cce0c2166" - ); + public static readonly MongoId PISTOL_9X33R_DESERT_EAGLE_L5 = new MongoId("669fa409933e898cce0c2166"); public static readonly MongoId REVOLVER_127X55_RSH_12 = new MongoId("633ec7c2a6918cb895019c6c"); - public static readonly MongoId REVOLVER_12G_MTS_255_12 = new MongoId( - "60db29ce99594040e04c4a27" - ); + public static readonly MongoId REVOLVER_12G_MTS_255_12 = new MongoId("60db29ce99594040e04c4a27"); public static readonly MongoId REVOLVER_40X46_MSGL = new MongoId("6275303a9f372d6ea97f9ec7"); public static readonly MongoId REVOLVER_9X19_CR_200DS = new MongoId("624c2e8614da335f1e034d8c"); public static readonly MongoId REVOLVER_9X33R_CR_50DS = new MongoId("61a4c8884f95bc3b2c5dc96f"); - public static readonly MongoId ROCKETLAUNCHER_725_RSHG_2 = new MongoId( - "676bf44c5539167c3603e869" - ); + public static readonly MongoId ROCKETLAUNCHER_725_RSHG_2 = new MongoId("676bf44c5539167c3603e869"); public static readonly MongoId SHOTGUN_12G_590A1 = new MongoId("5e870397991fd70db46995c8"); - public static readonly MongoId SHOTGUN_12G_AA_12_GEN_1 = new MongoId( - "66ffa9b66e19cc902401c5e8" - ); - public static readonly MongoId SHOTGUN_12G_AA_12_GEN_2 = new MongoId( - "67124dcfa3541f2a1f0e788b" - ); - public static readonly MongoId SHOTGUN_12G_M3_SUPER_90 = new MongoId( - "6259b864ebedf17603599e88" - ); + public static readonly MongoId SHOTGUN_12G_AA_12_GEN_1 = new MongoId("66ffa9b66e19cc902401c5e8"); + public static readonly MongoId SHOTGUN_12G_AA_12_GEN_2 = new MongoId("67124dcfa3541f2a1f0e788b"); + public static readonly MongoId SHOTGUN_12G_M3_SUPER_90 = new MongoId("6259b864ebedf17603599e88"); public static readonly MongoId SHOTGUN_12G_M870 = new MongoId("5a7828548dc32e5a9c28b516"); public static readonly MongoId SHOTGUN_12G_MP_133 = new MongoId("54491c4f4bdc2db1078b4568"); public static readonly MongoId SHOTGUN_12G_MP_153 = new MongoId("56dee2bdd2720bc8328b4567"); public static readonly MongoId SHOTGUN_12G_MP_155 = new MongoId("606dae0ab0e443224b421bb7"); public static readonly MongoId SHOTGUN_12G_MP_43_1C = new MongoId("5580223e4bdc2d1c128b457f"); public static readonly MongoId SHOTGUN_12G_SAIGA_12K = new MongoId("576165642459773c7a400233"); - public static readonly MongoId SHOTGUN_12G_SAIGA_12K_FA = new MongoId( - "674fe9a75e51f1c47c04ec23" - ); + public static readonly MongoId SHOTGUN_12G_SAIGA_12K_FA = new MongoId("674fe9a75e51f1c47c04ec23"); public static readonly MongoId SHOTGUN_12G_SAWED_OFF = new MongoId("64748cb8de82c85eaf0a273a"); public static readonly MongoId SHOTGUN_20G_TOZ_106 = new MongoId("5a38e6bac4a2826c6e06d79b"); public static readonly MongoId SHOTGUN_23X75_KS_23M = new MongoId("5e848cc2988a8701445df1e8"); public static readonly MongoId SHOTGUN_762X54R_MP_18 = new MongoId("61f7c9e189e6fb1a5e3ea78d"); - public static readonly MongoId SIGNALPISTOL_26X75_SP_81 = new MongoId( - "620109578d82e67e7911abf2" - ); + public static readonly MongoId SIGNALPISTOL_26X75_SP_81 = new MongoId("620109578d82e67e7911abf2"); public static readonly MongoId SMG_45ACP_UMP_45 = new MongoId("5fc3e272f8b6a877a729eac5"); public static readonly MongoId SMG_45ACP_VECTOR_45ACP = new MongoId("5fb64bc92b1b027b1f50bcf2"); public static readonly MongoId SMG_46X30_MP7A1 = new MongoId("5ba26383d4351e00334c93d9"); public static readonly MongoId SMG_46X30_MP7A2 = new MongoId("5bd70322209c4d00d7167b8f"); public static readonly MongoId SMG_57X28_P90 = new MongoId("5cc82d76e24e8d00134b4b83"); public static readonly MongoId SMG_762X25TT_PPSH41 = new MongoId("5ea03f7400685063ec28bfa8"); - public static readonly MongoId SMG_9X18PM_PP_91_01_KEDR_B = new MongoId( - "57f3c6bd24597738e730fa2f" - ); + public static readonly MongoId SMG_9X18PM_PP_91_01_KEDR_B = new MongoId("57f3c6bd24597738e730fa2f"); public static readonly MongoId SMG_9X18PM_PP_91_KEDR = new MongoId("57d14d2524597714373db789"); public static readonly MongoId SMG_9X18PMM_PP_9_KLIN = new MongoId("57f4c844245977379d5c14d1"); - public static readonly MongoId SMG_9X19_MP5_NAVY_3_ROUND_BURST = new MongoId( - "5926bb2186f7744b1c6c6e60" - ); + public static readonly MongoId SMG_9X19_MP5_NAVY_3_ROUND_BURST = new MongoId("5926bb2186f7744b1c6c6e60"); public static readonly MongoId SMG_9X19_MP5K_N = new MongoId("5d2f0d8048f0356c925bc3b0"); public static readonly MongoId SMG_9X19_MP9 = new MongoId("5e00903ae9dc277128008b87"); public static readonly MongoId SMG_9X19_MP9_N = new MongoId("5de7bd7bfd6b4e6e2276dc25"); @@ -337,35 +153,17 @@ public static class Weapons public static readonly MongoId SMG_9X19_SAIGA_9 = new MongoId("59f9cabd86f7743a10721f46"); public static readonly MongoId SMG_9X19_STM_9 = new MongoId("60339954d62c9b14ed777c06"); public static readonly MongoId SMG_9X19_UZI = new MongoId("66992b349950f5f4cd06029f"); - public static readonly MongoId SMG_9X19_UZI_PRO_PISTOL = new MongoId( - "6680304edadb7aa61d00cef0" - ); + public static readonly MongoId SMG_9X19_UZI_PRO_PISTOL = new MongoId("6680304edadb7aa61d00cef0"); public static readonly MongoId SMG_9X19_UZI_PRO_SMG = new MongoId("668e71a8dadf42204c032ce1"); public static readonly MongoId SMG_9X19_VECTOR_9X19 = new MongoId("5fc3f2d5900b1d5091531e57"); public static readonly MongoId SMG_9X21_SR_2M = new MongoId("62e14904c2699c0ec93adc47"); - public static readonly MongoId SNIPERRIFLE_366TKM_VPO_215_GORNOSTAY = new MongoId( - "5de652c31b7e3716273428be" - ); - public static readonly MongoId SNIPERRIFLE_762X51_DVL_10 = new MongoId( - "588892092459774ac91d4b11" - ); - public static readonly MongoId SNIPERRIFLE_762X51_M700 = new MongoId( - "5bfea6e90db834001b7347f3" - ); - public static readonly MongoId SNIPERRIFLE_762X51_T_5000M = new MongoId( - "5df24cf80dee1b22f862e9bc" - ); - public static readonly MongoId SNIPERRIFLE_762X54R_MOSIN_INFANTRY = new MongoId( - "5bfd297f0db834001a669119" - ); - public static readonly MongoId SNIPERRIFLE_762X54R_MOSIN_SNIPER = new MongoId( - "5ae08f0a5acfc408fb1398a1" - ); - public static readonly MongoId SNIPERRIFLE_762X54R_SV_98 = new MongoId( - "55801eed4bdc2d89578b4588" - ); + public static readonly MongoId SNIPERRIFLE_366TKM_VPO_215_GORNOSTAY = new MongoId("5de652c31b7e3716273428be"); + public static readonly MongoId SNIPERRIFLE_762X51_DVL_10 = new MongoId("588892092459774ac91d4b11"); + public static readonly MongoId SNIPERRIFLE_762X51_M700 = new MongoId("5bfea6e90db834001b7347f3"); + public static readonly MongoId SNIPERRIFLE_762X51_T_5000M = new MongoId("5df24cf80dee1b22f862e9bc"); + public static readonly MongoId SNIPERRIFLE_762X54R_MOSIN_INFANTRY = new MongoId("5bfd297f0db834001a669119"); + public static readonly MongoId SNIPERRIFLE_762X54R_MOSIN_SNIPER = new MongoId("5ae08f0a5acfc408fb1398a1"); + public static readonly MongoId SNIPERRIFLE_762X54R_SV_98 = new MongoId("55801eed4bdc2d89578b4588"); public static readonly MongoId SNIPERRIFLE_86X70_AXMC = new MongoId("627e14b21713922ded6f2c15"); - public static readonly MongoId SNIPERRIFLE_86X70_TRG_M10 = new MongoId( - "673cab3e03c6a20581028bc1" - ); + public static readonly MongoId SNIPERRIFLE_86X70_TRG_M10 = new MongoId("673cab3e03c6a20581028bc1"); } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs index 9f346544..a0f7fb17 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/BotConfig.cs @@ -32,10 +32,7 @@ public record BotConfig : BaseConfig /// Controls the percentage values of randomization item resources /// [JsonPropertyName("lootItemResourceRandomization")] - public required Dictionary< - string, - RandomisedResourceDetails - > LootItemResourceRandomization { get; set; } + public required Dictionary LootItemResourceRandomization { get; set; } /// /// Control how many items are allowed to spawn on a bot
@@ -103,10 +100,7 @@ public record BotConfig : BaseConfig /// Currency weights, Keyed by botrole / currency ///
[JsonPropertyName("currencyStackSize")] - public required Dictionary< - string, - Dictionary> - > CurrencyStackSize { get; set; } + public required Dictionary>> CurrencyStackSize { get; set; } /// /// Tpls for low profile gas blocks diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/LootConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/LootConfig.cs index bd2ee422..b052b0a2 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/LootConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/LootConfig.cs @@ -18,8 +18,5 @@ public record LootConfig : BaseConfig /// Loose loot probability adjustments to apply on game start /// [JsonPropertyName("looseLootSpawnPointAdjustments")] - public required Dictionary< - string, - Dictionary - > LooseLootSpawnPointAdjustments { get; set; } + public required Dictionary> LooseLootSpawnPointAdjustments { get; set; } } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PmcConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PmcConfig.cs index 1a523ccb..d86091e1 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PmcConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/PmcConfig.cs @@ -98,10 +98,7 @@ public record PmcConfig : BaseConfig /// What 'brain' does a PMC use, keyed by map and side (USEC/BEAR) key: map location, value: type for usec/bear ///
[JsonPropertyName("pmcType")] - public required Dictionary< - string, - Dictionary> - > PmcType { get; set; } + public required Dictionary>> PmcType { get; set; } [JsonPropertyName("lootSettings")] public required PmcLootSettings LootSettings { get; set; } @@ -146,10 +143,7 @@ public record PmcConfig : BaseConfig public required bool RemoveExistingPmcWaves { get; set; } [JsonPropertyName("dogtags")] - public required Dictionary< - string, - Dictionary> - > DogtagSettings { get; set; } + public required Dictionary>> DogtagSettings { get; set; } [JsonPropertyName("customPmcWaves")] public required Dictionary> CustomPmcWaves { get; set; } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/QuestConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/QuestConfig.cs index f2098c8a..47354044 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/QuestConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/QuestConfig.cs @@ -613,9 +613,7 @@ public record EliminationConfig : BaseQuestConfig /// If a weapon category requirement is chosen, pick from these categories ///
[JsonPropertyName("weaponCategoryRequirements")] - public required List< - ProbabilityObject> - > WeaponCategoryRequirements { get; set; } + public required List>> WeaponCategoryRequirements { get; set; } /// /// If a weapon requirement is chosen, pick from these weapons diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/SeasonalEventConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/SeasonalEventConfig.cs index d432051a..5ecf5b92 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/SeasonalEventConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/SeasonalEventConfig.cs @@ -18,19 +18,13 @@ public record SeasonalEventConfig : BaseConfig /// event / botType / equipSlot / itemid /// [JsonPropertyName("eventGear")] - public required Dictionary< - SeasonalEventType, - Dictionary>> - > EventGear { get; set; } + public required Dictionary>>> EventGear { get; set; } /// /// event / bot type / equipSlot / itemid /// [JsonPropertyName("eventLoot")] - public required Dictionary< - SeasonalEventType, - Dictionary>> - > EventLoot { get; set; } + public required Dictionary>>> EventLoot { get; set; } [JsonPropertyName("events")] public required List Events { get; set; } @@ -39,10 +33,7 @@ public record SeasonalEventConfig : BaseConfig public required Dictionary EventBotMapping { get; set; } [JsonPropertyName("eventBossSpawns")] - public required Dictionary< - string, - Dictionary> - > EventBossSpawns { get; set; } + public required Dictionary>> EventBossSpawns { get; set; } [JsonPropertyName("eventWaves")] public required Dictionary>> EventWaves { get; set; } @@ -54,10 +45,7 @@ public record SeasonalEventConfig : BaseConfig /// key = event, second key = map name ///
[JsonPropertyName("hostilitySettingsForEvent")] - public required Dictionary< - string, - Dictionary> - > HostilitySettingsForEvent { get; set; } + public required Dictionary>> HostilitySettingsForEvent { get; set; } /// /// Ids of containers on locations that only have Christmas loot diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Server/Locations.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Server/Locations.cs index f09d2dba..fd4a01fa 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Server/Locations.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Server/Locations.cs @@ -11,10 +11,7 @@ public record Locations // sometimes we get the key or value given so save changing logic in each place // have it key both - private readonly FrozenDictionary _locationMappings = new Dictionary< - string, - string - > + private readonly FrozenDictionary _locationMappings = new Dictionary { // EFT { "factory4_day", "Factory4Day" }, @@ -149,9 +146,7 @@ public record Locations private void HydrateDictionary() { - var classProps = typeof(Locations) - .GetProperties() - .Where(p => p.PropertyType == typeof(Eft.Common.Location) && p.Name != "Item"); + var classProps = typeof(Locations).GetProperties().Where(p => p.PropertyType == typeof(Eft.Common.Location) && p.Name != "Item"); _locationDictionaryCache = classProps.ToDictionary( propertyInfo => propertyInfo.Name, propertyInfo => propertyInfo.GetValue(this, null) as Eft.Common.Location, diff --git a/Libraries/SPTarkov.Server.Core/Models/Utils/ISptLogger.cs b/Libraries/SPTarkov.Server.Core/Models/Utils/ISptLogger.cs index 7370ae64..453508c5 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Utils/ISptLogger.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Utils/ISptLogger.cs @@ -5,25 +5,14 @@ namespace SPTarkov.Server.Core.Models.Utils; public interface ISptLogger { - void LogWithColor( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ); + void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null); void Success(string data, Exception? ex = null); void Error(string data, Exception? ex = null); void Warning(string data, Exception? ex = null); void Info(string data, Exception? ex = null); void Debug(string data, Exception? ex = null); void Critical(string data, Exception? ex = null); - void Log( - LogLevel level, - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ); + void Log(LogLevel level, string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null); bool IsLogEnabled(LogLevel level); void DumpAndStop(); } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs index bd31874a..b4ccd755 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BotDynamicRouter.cs @@ -15,31 +15,20 @@ public class BotDynamicRouter : DynamicRouter [ new RouteAction( "/singleplayer/settings/bot/limit/", - async (url, info, sessionID, output) => - await botCallbacks.GetBotLimit(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await botCallbacks.GetBotLimit(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/settings/bot/difficulty/", - async (url, info, sessionID, output) => - await botCallbacks.GetBotDifficulty( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await botCallbacks.GetBotDifficulty(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/settings/bot/difficulties", async (url, info, sessionID, output) => - await botCallbacks.GetAllBotDifficulties( - url, - info as EmptyRequestData, - sessionID - ) + await botCallbacks.GetAllBotDifficulties(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/settings/bot/maxCap", - async (url, info, sessionID, output) => - await botCallbacks.GetBotCap(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await botCallbacks.GetBotCap(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/settings/bot/getBotBehaviours/", diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs index 735dcc20..8c3e6f99 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/BundleDynamicRouter.cs @@ -15,8 +15,7 @@ public class BundleDynamicRouter : DynamicRouter [ new RouteAction( "/files/bundle", - async (url, info, sessionID, output) => - await bundleCallbacks.GetBundle(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await bundleCallbacks.GetBundle(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs index 04b7185c..8508014d 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/CustomizationDynamicRouter.cs @@ -9,21 +9,14 @@ namespace SPTarkov.Server.Core.Routers.Dynamic; [Injectable] public class CustomizationDynamicRouter : DynamicRouter { - public CustomizationDynamicRouter( - JsonUtil jsonUtil, - CustomizationCallbacks customizationCallbacks - ) + public CustomizationDynamicRouter(JsonUtil jsonUtil, CustomizationCallbacks customizationCallbacks) : base( jsonUtil, [ new RouteAction( "/client/trading/customization/", async (url, info, sessionID, output) => - await customizationCallbacks.GetTraderSuits( - url, - info as EmptyRequestData, - sessionID - ) + await customizationCallbacks.GetTraderSuits(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs index dab7bc05..de3692fe 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/DataDynamicRouter.cs @@ -15,22 +15,15 @@ public class DataDynamicRouter : DynamicRouter [ new RouteAction( "/client/menu/locale/", - async (url, info, sessionID, output) => - await dataCallbacks.GetLocalesMenu(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dataCallbacks.GetLocalesMenu(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/locale/", - async (url, info, sessionID, output) => - await dataCallbacks.GetLocalesGlobal( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await dataCallbacks.GetLocalesGlobal(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/items/prices/", - async (url, info, sessionID, output) => - await dataCallbacks.GetItemPrices(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dataCallbacks.GetItemPrices(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs index 1f44e3eb..5af30458 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/InraidDynamicRouter.cs @@ -16,11 +16,7 @@ public class InraidDynamicRouter : DynamicRouter new RouteAction( "/client/location/getLocalloot", async (url, info, sessionID, output) => - await inraidCallbacks.RegisterPlayer( - url, - info as RegisterPlayerRequestData, - sessionID - ), + await inraidCallbacks.RegisterPlayer(url, info as RegisterPlayerRequestData, sessionID), typeof(RegisterPlayerRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs index 35dc6399..aa3187e8 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/NotifierDynamicRouter.cs @@ -12,25 +12,15 @@ public class NotifierDynamicRouter : DynamicRouter : base( jsonUtil, [ + new RouteAction("/?last_id", async (url, info, sessionID, _) => await notifierCallbacks.Notify(url, info, sessionID)), + new RouteAction("/notifierServer", async (url, info, sessionID, _) => await notifierCallbacks.Notify(url, info, sessionID)), new RouteAction( - "/?last_id", - async (url, info, sessionID, _) => - await notifierCallbacks.Notify(url, info, sessionID) - ), - new RouteAction( - "/notifierServer", - async (url, info, sessionID, _) => - await notifierCallbacks.Notify(url, info, sessionID) + "/push/notifier/get/", + async (url, info, sessionID, _) => await notifierCallbacks.GetNotifier(url, info, sessionID) ), new RouteAction( "/push/notifier/get/", - async (url, info, sessionID, _) => - await notifierCallbacks.GetNotifier(url, info, sessionID) - ), - new RouteAction( - "/push/notifier/get/", - async (url, info, sessionID, _) => - await notifierCallbacks.GetNotifier(url, info, sessionID) + async (url, info, sessionID, _) => await notifierCallbacks.GetNotifier(url, info, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs index 9c2b0806..075c424e 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Dynamic/TraderDynamicRouter.cs @@ -15,13 +15,11 @@ public class TraderDynamicRouter : DynamicRouter [ new RouteAction( "/client/trading/api/getTrader/", - async (url, info, sessionID, output) => - await traderCallbacks.GetTrader(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await traderCallbacks.GetTrader(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/trading/api/getTraderAssort/", - async (url, info, sessionID, output) => - await traderCallbacks.GetAssort(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await traderCallbacks.GetAssort(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/EventOutputHolder.cs b/Libraries/SPTarkov.Server.Core/Routers/EventOutputHolder.cs index 923b181a..0df9bd58 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/EventOutputHolder.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/EventOutputHolder.cs @@ -11,15 +11,9 @@ using SPTarkov.Server.Core.Utils.Cloners; namespace SPTarkov.Server.Core.Routers; [Injectable] -public class EventOutputHolder( - ISptLogger logger, - ProfileHelper profileHelper, - TimeUtil timeUtil, - ICloner cloner -) +public class EventOutputHolder(ISptLogger logger, ProfileHelper profileHelper, TimeUtil timeUtil, ICloner cloner) { - protected readonly Dictionary> _clientActiveSessionStorage = - new(); + protected readonly Dictionary> _clientActiveSessionStorage = new(); protected readonly Dictionary _outputStore = new(); /// @@ -107,17 +101,12 @@ public class EventOutputHolder( var hideoutProductionNull = pmcData.Hideout.Production == null; if (!hideoutProductionNull) { - profileChanges.Production = GetProductionsFromProfileAndFlagComplete( - cloner.Clone(pmcData.Hideout.Production), - sessionId - ); + profileChanges.Production = GetProductionsFromProfileAndFlagComplete(cloner.Clone(pmcData.Hideout.Production), sessionId); } if (pmcData.Hideout.Improvements != null) { - profileChanges.Improvements = cloner.Clone( - GetImprovementsFromProfileAndFlagComplete(pmcData) - ); + profileChanges.Improvements = cloner.Clone(GetImprovementsFromProfileAndFlagComplete(pmcData)); } profileChanges.TraderRelations = ConstructTraderRelations(pmcData.TradersInfo); @@ -146,10 +135,7 @@ public class EventOutputHolder( // remove production in case client already issued a HideoutDeleteProductionCommand and the item is moved to stash productions.Remove(production.Key); } - else if ( - (production.Value.SptIsComplete ?? false) - && (production.Value.SptIsContinuous ?? false) - ) + else if ((production.Value.SptIsComplete ?? false) && (production.Value.SptIsContinuous ?? false)) { // Water collector / Bitcoin etc production.Value.SptIsComplete = false; @@ -169,9 +155,7 @@ public class EventOutputHolder( /// /// Player profile /// Dictionary of hideout improvements - protected Dictionary GetImprovementsFromProfileAndFlagComplete( - PmcData pmcData - ) + protected Dictionary GetImprovementsFromProfileAndFlagComplete(PmcData pmcData) { foreach (var (key, improvement) in pmcData.Hideout.Improvements) { @@ -210,10 +194,7 @@ public class EventOutputHolder( } // Complete and is Continuous e.g. water collector - if ( - (production.Value.SptIsComplete ?? false) - && (production.Value.SptIsContinuous ?? false) - ) + if ((production.Value.SptIsComplete ?? false) && (production.Value.SptIsContinuous ?? false)) { continue; } @@ -264,9 +245,7 @@ public class EventOutputHolder( /// /// Server data for traders /// Dict of trader id + TraderData - protected Dictionary ConstructTraderRelations( - Dictionary traderData - ) + protected Dictionary ConstructTraderRelations(Dictionary traderData) { return traderData.ToDictionary( trader => trader.Key, diff --git a/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs index 2dc5648e..24cb25cd 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/HttpRouter.cs @@ -11,10 +11,7 @@ public class HttpRouter protected readonly IEnumerable _dynamicRoutes; protected readonly IEnumerable _staticRouters; - public HttpRouter( - IEnumerable staticRouters, - IEnumerable dynamicRoutes - ) + public HttpRouter(IEnumerable staticRouters, IEnumerable dynamicRoutes) { _staticRouters = staticRouters; _dynamicRoutes = dynamicRoutes; @@ -73,23 +70,11 @@ public class HttpRouter { if (dynamic) { - wrapper.Output = - await (route as DynamicRouter).HandleDynamic( - url, - body, - sessionID, - wrapper.Output - ) as string; + wrapper.Output = await (route as DynamicRouter).HandleDynamic(url, body, sessionID, wrapper.Output) as string; } else { - wrapper.Output = - await (route as StaticRouter).HandleStatic( - url, - body, - sessionID, - wrapper.Output - ) as string; + wrapper.Output = await (route as StaticRouter).HandleStatic(url, body, sessionID, wrapper.Output) as string; } matched = true; diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEventRouter.cs index 944f0ebf..a6ac7b88 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEventRouter.cs @@ -30,10 +30,7 @@ public class ItemEventRouter( /// Event request /// Session ID /// Item response - public async ValueTask HandleEvents( - ItemEventRouterRequest info, - MongoId sessionID - ) + public async ValueTask HandleEvents(ItemEventRouterRequest info, MongoId sessionID) { var output = eventOutputHolder.GetOutput(sessionID); diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/CustomizationItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/CustomizationItemEventRouter.cs index 7d2ec842..c206fa0a 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/CustomizationItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/CustomizationItemEventRouter.cs @@ -12,18 +12,12 @@ using SPTarkov.Server.Core.Models.Utils; namespace SPTarkov.Server.Core.Routers.ItemEvents; [Injectable] -public class CustomizationItemEventRouter( - ISptLogger logger, - CustomizationCallbacks customizationCallbacks -) : ItemEventRouterDefinition +public class CustomizationItemEventRouter(ISptLogger logger, CustomizationCallbacks customizationCallbacks) + : ItemEventRouterDefinition { protected override List GetHandledRoutes() { - return - [ - new(ItemEventActions.CUSTOMIZATION_BUY, false), - new(ItemEventActions.CUSTOMIZATION_SET, false), - ]; + return [new(ItemEventActions.CUSTOMIZATION_BUY, false), new(ItemEventActions.CUSTOMIZATION_SET, false)]; } public override ValueTask HandleItemEvent( @@ -38,24 +32,14 @@ public class CustomizationItemEventRouter( { case ItemEventActions.CUSTOMIZATION_BUY: return new ValueTask( - customizationCallbacks.BuyCustomisation( - pmcData, - body as BuyClothingRequestData, - sessionID - ) + customizationCallbacks.BuyCustomisation(pmcData, body as BuyClothingRequestData, sessionID) ); case ItemEventActions.CUSTOMIZATION_SET: return new ValueTask( - customizationCallbacks.SetCustomisation( - pmcData, - body as CustomizationSetRequest, - sessionID - ) + customizationCallbacks.SetCustomisation(pmcData, body as CustomizationSetRequest, sessionID) ); default: - throw new Exception( - $"CustomizationItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"CustomizationItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HealthItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HealthItemEventRouter.cs index c249c024..b3c359c6 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HealthItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HealthItemEventRouter.cs @@ -43,16 +43,10 @@ public class HealthItemEventRouter(HealthCallbacks healthCallbacks) : ItemEventR ); case ItemEventActions.RESTORE_HEALTH: return new ValueTask( - healthCallbacks.HealthTreatment( - pmcData, - body as HealthTreatmentRequestData, - sessionID - ) + healthCallbacks.HealthTreatment(pmcData, body as HealthTreatmentRequestData, sessionID) ); default: - throw new Exception( - $"HealthItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"HealthItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HideoutItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HideoutItemEventRouter.cs index 2ac7e8f1..df77fd92 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HideoutItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/HideoutItemEventRouter.cs @@ -48,102 +48,51 @@ public class HideoutItemEventRouter(HideoutCallbacks hideoutCallbacks) : ItemEve { case HideoutEventActions.HIDEOUT_UPGRADE: return new ValueTask( - hideoutCallbacks.Upgrade( - pmcData, - body as HideoutUpgradeRequestData, - sessionID, - output - ) + hideoutCallbacks.Upgrade(pmcData, body as HideoutUpgradeRequestData, sessionID, output) ); case HideoutEventActions.HIDEOUT_UPGRADE_COMPLETE: return new ValueTask( - hideoutCallbacks.UpgradeComplete( - pmcData, - body as HideoutUpgradeCompleteRequestData, - sessionID, - output - ) + hideoutCallbacks.UpgradeComplete(pmcData, body as HideoutUpgradeCompleteRequestData, sessionID, output) ); case HideoutEventActions.HIDEOUT_PUT_ITEMS_IN_AREA_SLOTS: return new ValueTask( - hideoutCallbacks.PutItemsInAreaSlots( - pmcData, - body as HideoutPutItemInRequestData, - sessionID - ) + hideoutCallbacks.PutItemsInAreaSlots(pmcData, body as HideoutPutItemInRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_TAKE_ITEMS_FROM_AREA_SLOTS: return new ValueTask( - hideoutCallbacks.TakeItemsFromAreaSlots( - pmcData, - body as HideoutTakeItemOutRequestData, - sessionID - ) + hideoutCallbacks.TakeItemsFromAreaSlots(pmcData, body as HideoutTakeItemOutRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_TOGGLE_AREA: return new ValueTask( - hideoutCallbacks.ToggleArea( - pmcData, - body as HideoutToggleAreaRequestData, - sessionID - ) + hideoutCallbacks.ToggleArea(pmcData, body as HideoutToggleAreaRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_SINGLE_PRODUCTION_START: return new ValueTask( - hideoutCallbacks.SingleProductionStart( - pmcData, - body as HideoutSingleProductionStartRequestData, - sessionID - ) + hideoutCallbacks.SingleProductionStart(pmcData, body as HideoutSingleProductionStartRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_SCAV_CASE_PRODUCTION_START: return new ValueTask( - hideoutCallbacks.ScavCaseProductionStart( - pmcData, - body as HideoutScavCaseStartRequestData, - sessionID - ) + hideoutCallbacks.ScavCaseProductionStart(pmcData, body as HideoutScavCaseStartRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_CONTINUOUS_PRODUCTION_START: return new ValueTask( - hideoutCallbacks.ContinuousProductionStart( - pmcData, - body as HideoutContinuousProductionStartRequestData, - sessionID - ) + hideoutCallbacks.ContinuousProductionStart(pmcData, body as HideoutContinuousProductionStartRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_TAKE_PRODUCTION: return new ValueTask( - hideoutCallbacks.TakeProduction( - pmcData, - body as HideoutTakeProductionRequestData, - sessionID - ) + hideoutCallbacks.TakeProduction(pmcData, body as HideoutTakeProductionRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_RECORD_SHOOTING_RANGE_POINTS: return new ValueTask( - hideoutCallbacks.RecordShootingRangePoints( - pmcData, - body as RecordShootingRangePoints, - sessionID, - output - ) + hideoutCallbacks.RecordShootingRangePoints(pmcData, body as RecordShootingRangePoints, sessionID, output) ); case HideoutEventActions.HIDEOUT_IMPROVE_AREA: return new ValueTask( - hideoutCallbacks.ImproveArea( - pmcData, - body as HideoutImproveAreaRequestData, - sessionID - ) + hideoutCallbacks.ImproveArea(pmcData, body as HideoutImproveAreaRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_CANCEL_PRODUCTION_COMMAND: return new ValueTask( - hideoutCallbacks.CancelProduction( - pmcData, - body as HideoutCancelProductionRequestData, - sessionID - ) + hideoutCallbacks.CancelProduction(pmcData, body as HideoutCancelProductionRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_CIRCLE_OF_CULTIST_PRODUCTION_START: return new ValueTask( @@ -155,19 +104,11 @@ public class HideoutItemEventRouter(HideoutCallbacks hideoutCallbacks) : ItemEve ); case HideoutEventActions.HIDEOUT_DELETE_PRODUCTION_COMMAND: return new ValueTask( - hideoutCallbacks.HideoutDeleteProductionCommand( - pmcData, - body as HideoutDeleteProductionRequestData, - sessionID - ) + hideoutCallbacks.HideoutDeleteProductionCommand(pmcData, body as HideoutDeleteProductionRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_CUSTOMIZATION_APPLY_COMMAND: return new ValueTask( - hideoutCallbacks.HideoutCustomizationApplyCommand( - pmcData, - body as HideoutCustomizationApplyRequestData, - sessionID - ) + hideoutCallbacks.HideoutCustomizationApplyCommand(pmcData, body as HideoutCustomizationApplyRequestData, sessionID) ); case HideoutEventActions.HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE: return new ValueTask( @@ -178,9 +119,7 @@ public class HideoutItemEventRouter(HideoutCallbacks hideoutCallbacks) : ItemEve ) ); default: - throw new Exception( - $"HideoutItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"HideoutItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InsuranceItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InsuranceItemEventRouter.cs index befb56b5..853e8f2e 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InsuranceItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InsuranceItemEventRouter.cs @@ -11,8 +11,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Routers.ItemEvents; [Injectable] -public class InsuranceItemEventRouter(InsuranceCallbacks insuranceCallbacks) - : ItemEventRouterDefinition +public class InsuranceItemEventRouter(InsuranceCallbacks insuranceCallbacks) : ItemEventRouterDefinition { protected override List GetHandledRoutes() { @@ -30,13 +29,9 @@ public class InsuranceItemEventRouter(InsuranceCallbacks insuranceCallbacks) switch (url) { case ItemEventActions.INSURE: - return new ValueTask( - insuranceCallbacks.Insure(pmcData, body as InsureRequestData, sessionID) - ); + return new ValueTask(insuranceCallbacks.Insure(pmcData, body as InsureRequestData, sessionID)); default: - throw new Exception( - $"InsuranceItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"InsuranceItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs index cf019e91..c9277462 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs @@ -13,10 +13,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Routers.ItemEvents; [Injectable] -public class InventoryItemEventRouter( - InventoryCallbacks inventoryCallbacks, - HideoutCallbacks hideoutCallbacks -) : ItemEventRouterDefinition +public class InventoryItemEventRouter(InventoryCallbacks inventoryCallbacks, HideoutCallbacks hideoutCallbacks) : ItemEventRouterDefinition { protected override List GetHandledRoutes() { @@ -60,72 +57,35 @@ public class InventoryItemEventRouter( { case ItemEventActions.MOVE: return new ValueTask( - inventoryCallbacks.MoveItem( - pmcData, - body as InventoryMoveRequestData, - sessionID, - output - ) + inventoryCallbacks.MoveItem(pmcData, body as InventoryMoveRequestData, sessionID, output) ); case ItemEventActions.REMOVE: return new ValueTask( - inventoryCallbacks.RemoveItem( - pmcData, - body as InventoryRemoveRequestData, - sessionID, - output - ) + inventoryCallbacks.RemoveItem(pmcData, body as InventoryRemoveRequestData, sessionID, output) ); case ItemEventActions.SPLIT: return new ValueTask( - inventoryCallbacks.SplitItem( - pmcData, - body as InventorySplitRequestData, - sessionID, - output - ) + inventoryCallbacks.SplitItem(pmcData, body as InventorySplitRequestData, sessionID, output) ); case ItemEventActions.MERGE: return new ValueTask( - inventoryCallbacks.MergeItem( - pmcData, - body as InventoryMergeRequestData, - sessionID, - output - ) + inventoryCallbacks.MergeItem(pmcData, body as InventoryMergeRequestData, sessionID, output) ); case ItemEventActions.TRANSFER: return new ValueTask( - inventoryCallbacks.TransferItem( - pmcData, - body as InventoryTransferRequestData, - sessionID, - output - ) + inventoryCallbacks.TransferItem(pmcData, body as InventoryTransferRequestData, sessionID, output) ); case ItemEventActions.SWAP: return new ValueTask( - inventoryCallbacks.SwapItem( - pmcData, - body as InventorySwapRequestData, - sessionID - ) + inventoryCallbacks.SwapItem(pmcData, body as InventorySwapRequestData, sessionID) ); case ItemEventActions.FOLD: return new ValueTask( - inventoryCallbacks.FoldItem( - pmcData, - body as InventoryFoldRequestData, - sessionID - ) + inventoryCallbacks.FoldItem(pmcData, body as InventoryFoldRequestData, sessionID) ); case ItemEventActions.TOGGLE: return new ValueTask( - inventoryCallbacks.ToggleItem( - pmcData, - body as InventoryToggleRequestData, - sessionID - ) + inventoryCallbacks.ToggleItem(pmcData, body as InventoryToggleRequestData, sessionID) ); case ItemEventActions.TAG: return new ValueTask( @@ -133,133 +93,62 @@ public class InventoryItemEventRouter( ); case ItemEventActions.BIND: return new ValueTask( - inventoryCallbacks.BindItem( - pmcData, - body as InventoryBindRequestData, - sessionID, - output - ) + inventoryCallbacks.BindItem(pmcData, body as InventoryBindRequestData, sessionID, output) ); case ItemEventActions.UNBIND: return new ValueTask( - inventoryCallbacks.UnBindItem( - pmcData, - body as InventoryBindRequestData, - sessionID, - output - ) + inventoryCallbacks.UnBindItem(pmcData, body as InventoryBindRequestData, sessionID, output) ); case ItemEventActions.EXAMINE: return new ValueTask( - inventoryCallbacks.ExamineItem( - pmcData, - body as InventoryExamineRequestData, - sessionID, - output - ) + inventoryCallbacks.ExamineItem(pmcData, body as InventoryExamineRequestData, sessionID, output) ); case ItemEventActions.READ_ENCYCLOPEDIA: return new ValueTask( - inventoryCallbacks.ReadEncyclopedia( - pmcData, - body as InventoryReadEncyclopediaRequestData, - sessionID - ) + inventoryCallbacks.ReadEncyclopedia(pmcData, body as InventoryReadEncyclopediaRequestData, sessionID) ); case ItemEventActions.APPLY_INVENTORY_CHANGES: return new ValueTask( - inventoryCallbacks.SortInventory( - pmcData, - body as InventorySortRequestData, - sessionID, - output - ) + inventoryCallbacks.SortInventory(pmcData, body as InventorySortRequestData, sessionID, output) ); case ItemEventActions.CREATE_MAP_MARKER: return new ValueTask( - inventoryCallbacks.CreateMapMarker( - pmcData, - body as InventoryCreateMarkerRequestData, - sessionID, - output - ) + inventoryCallbacks.CreateMapMarker(pmcData, body as InventoryCreateMarkerRequestData, sessionID, output) ); case ItemEventActions.DELETE_MAP_MARKER: return new ValueTask( - inventoryCallbacks.DeleteMapMarker( - pmcData, - body as InventoryDeleteMarkerRequestData, - sessionID, - output - ) + inventoryCallbacks.DeleteMapMarker(pmcData, body as InventoryDeleteMarkerRequestData, sessionID, output) ); case ItemEventActions.EDIT_MAP_MARKER: return new ValueTask( - inventoryCallbacks.EditMapMarker( - pmcData, - body as InventoryEditMarkerRequestData, - sessionID, - output - ) + inventoryCallbacks.EditMapMarker(pmcData, body as InventoryEditMarkerRequestData, sessionID, output) ); case ItemEventActions.OPEN_RANDOM_LOOT_CONTAINER: return new ValueTask( - inventoryCallbacks.OpenRandomLootContainer( - pmcData, - body as OpenRandomLootContainerRequestData, - sessionID, - output - ) + inventoryCallbacks.OpenRandomLootContainer(pmcData, body as OpenRandomLootContainerRequestData, sessionID, output) ); case ItemEventActions.HIDEOUT_QTE_EVENT: return new ValueTask( - hideoutCallbacks.HandleQTEEvent( - pmcData, - body as HandleQTEEventRequestData, - sessionID, - output - ) + hideoutCallbacks.HandleQTEEvent(pmcData, body as HandleQTEEventRequestData, sessionID, output) ); case ItemEventActions.REDEEM_PROFILE_REWARD: return new ValueTask( - inventoryCallbacks.RedeemProfileReward( - pmcData, - body as RedeemProfileRequestData, - sessionID, - output - ) + inventoryCallbacks.RedeemProfileReward(pmcData, body as RedeemProfileRequestData, sessionID, output) ); case ItemEventActions.SET_FAVORITE_ITEMS: return new ValueTask( - inventoryCallbacks.SetFavoriteItem( - pmcData, - body as SetFavoriteItems, - sessionID, - output - ) + inventoryCallbacks.SetFavoriteItem(pmcData, body as SetFavoriteItems, sessionID, output) ); case ItemEventActions.QUEST_FAIL: return new ValueTask( - inventoryCallbacks.FailQuest( - pmcData, - body as FailQuestRequestData, - sessionID, - output - ) + inventoryCallbacks.FailQuest(pmcData, body as FailQuestRequestData, sessionID, output) ); case ItemEventActions.PIN_LOCK: return new ValueTask( - inventoryCallbacks.PinOrLock( - pmcData, - body as PinOrLockItemRequest, - sessionID, - output - ) + inventoryCallbacks.PinOrLock(pmcData, body as PinOrLockItemRequest, sessionID, output) ); default: - throw new Exception( - $"InventoryItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"InventoryItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/NoteItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/NoteItemEventRouter.cs index 2c85b972..10f113c0 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/NoteItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/NoteItemEventRouter.cs @@ -15,12 +15,7 @@ public class NoteItemEventRouter(NoteCallbacks noteCallbacks) : ItemEventRouterD { protected override List GetHandledRoutes() { - return - [ - new(ItemEventActions.ADD_NOTE, false), - new(ItemEventActions.EDIT_NOTE, false), - new(ItemEventActions.DELETE_NOTE, false), - ]; + return [new(ItemEventActions.ADD_NOTE, false), new(ItemEventActions.EDIT_NOTE, false), new(ItemEventActions.DELETE_NOTE, false)]; } public override ValueTask HandleItemEvent( @@ -34,21 +29,13 @@ public class NoteItemEventRouter(NoteCallbacks noteCallbacks) : ItemEventRouterD switch (url) { case ItemEventActions.ADD_NOTE: - return new ValueTask( - noteCallbacks.AddNote(pmcData, body as NoteActionRequest, sessionID) - ); + return new ValueTask(noteCallbacks.AddNote(pmcData, body as NoteActionRequest, sessionID)); case ItemEventActions.EDIT_NOTE: - return new ValueTask( - noteCallbacks.EditNote(pmcData, body as NoteActionRequest, sessionID) - ); + return new ValueTask(noteCallbacks.EditNote(pmcData, body as NoteActionRequest, sessionID)); case ItemEventActions.DELETE_NOTE: - return new ValueTask( - noteCallbacks.DeleteNote(pmcData, body as NoteActionRequest, sessionID) - ); + return new ValueTask(noteCallbacks.DeleteNote(pmcData, body as NoteActionRequest, sessionID)); default: - throw new Exception( - $"NoteItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"NoteItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/QuestItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/QuestItemEventRouter.cs index 0adc6414..a724a709 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/QuestItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/QuestItemEventRouter.cs @@ -40,32 +40,18 @@ public class QuestItemEventRouter(QuestCallbacks questCallbacks) : ItemEventRout ); case ItemEventActions.QUEST_COMPLETE: return new ValueTask( - questCallbacks.CompleteQuest( - pmcData, - body as CompleteQuestRequestData, - sessionID - ) + questCallbacks.CompleteQuest(pmcData, body as CompleteQuestRequestData, sessionID) ); case ItemEventActions.QUEST_HANDOVER: return new ValueTask( - questCallbacks.HandoverQuest( - pmcData, - body as HandoverQuestRequestData, - sessionID - ) + questCallbacks.HandoverQuest(pmcData, body as HandoverQuestRequestData, sessionID) ); case ItemEventActions.REPEATABLE_QUEST_CHANGE: return new ValueTask( - questCallbacks.ChangeRepeatableQuest( - pmcData, - body as RepeatableQuestChangeRequest, - sessionID - ) + questCallbacks.ChangeRepeatableQuest(pmcData, body as RepeatableQuestChangeRequest, sessionID) ); default: - throw new Exception( - $"QuestItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"QuestItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RagfairItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RagfairItemEventRouter.cs index 469a07a8..38231343 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RagfairItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RagfairItemEventRouter.cs @@ -34,9 +34,7 @@ public class RagfairItemEventRouter(RagfairCallbacks ragfairCallbacks) : ItemEve switch (url) { case ItemEventActions.RAGFAIR_ADD_OFFER: - return new ValueTask( - ragfairCallbacks.AddOffer(pmcData, body as AddOfferRequestData, sessionID) - ); + return new ValueTask(ragfairCallbacks.AddOffer(pmcData, body as AddOfferRequestData, sessionID)); case ItemEventActions.RAGFAIR_REMOVE_OFFER: return new ValueTask( ragfairCallbacks.RemoveOffer(pmcData, body as RemoveOfferRequestData, sessionID) @@ -46,9 +44,7 @@ public class RagfairItemEventRouter(RagfairCallbacks ragfairCallbacks) : ItemEve ragfairCallbacks.ExtendOffer(pmcData, body as ExtendOfferRequestData, sessionID) ); default: - throw new Exception( - $"CustomizationItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"CustomizationItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RepairItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RepairItemEventRouter.cs index ca7e8196..ac1fed52 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RepairItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/RepairItemEventRouter.cs @@ -15,11 +15,7 @@ public class RepairItemEventRouter(RepairCallbacks repairCallbacks) : ItemEventR { protected override List GetHandledRoutes() { - return new List - { - new(ItemEventActions.REPAIR, false), - new(ItemEventActions.TRADER_REPAIR, false), - }; + return new List { new(ItemEventActions.REPAIR, false), new(ItemEventActions.TRADER_REPAIR, false) }; } public override ValueTask HandleItemEvent( @@ -33,21 +29,13 @@ public class RepairItemEventRouter(RepairCallbacks repairCallbacks) : ItemEventR switch (url) { case ItemEventActions.REPAIR: - return new ValueTask( - repairCallbacks.Repair(pmcData, body as RepairActionDataRequest, sessionID) - ); + return new ValueTask(repairCallbacks.Repair(pmcData, body as RepairActionDataRequest, sessionID)); case ItemEventActions.TRADER_REPAIR: return new ValueTask( - repairCallbacks.TraderRepair( - pmcData, - body as TraderRepairActionDataRequest, - sessionID - ) + repairCallbacks.TraderRepair(pmcData, body as TraderRepairActionDataRequest, sessionID) ); default: - throw new Exception( - $"RepairItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"RepairItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/TradeItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/TradeItemEventRouter.cs index d2a91a85..4e61ad85 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/TradeItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/TradeItemEventRouter.cs @@ -35,32 +35,18 @@ public class TradeItemEventRouter(TradeCallbacks tradeCallbacks) : ItemEventRout { case ItemEventActions.TRADING_CONFIRM: return new ValueTask( - tradeCallbacks.ProcessTrade( - pmcData, - body as ProcessBaseTradeRequestData, - sessionID - ) + tradeCallbacks.ProcessTrade(pmcData, body as ProcessBaseTradeRequestData, sessionID) ); case ItemEventActions.RAGFAIR_BUY_OFFER: return new ValueTask( - tradeCallbacks.ProcessRagfairTrade( - pmcData, - body as ProcessRagfairTradeRequestData, - sessionID - ) + tradeCallbacks.ProcessRagfairTrade(pmcData, body as ProcessRagfairTradeRequestData, sessionID) ); case ItemEventActions.SELL_ALL_FROM_SAVAGE: return new ValueTask( - tradeCallbacks.SellAllFromSavage( - pmcData, - body as SellScavItemsToFenceRequestData, - sessionID - ) + tradeCallbacks.SellAllFromSavage(pmcData, body as SellScavItemsToFenceRequestData, sessionID) ); default: - throw new Exception( - $"TradeItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"TradeItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/WishlistItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/WishlistItemEventRouter.cs index bf80bc0b..2eac6257 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/WishlistItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/WishlistItemEventRouter.cs @@ -11,8 +11,7 @@ using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Routers.ItemEvents; [Injectable] -public class WishlistItemEventRouter(WishlistCallbacks wishlistCallbacks) - : ItemEventRouterDefinition +public class WishlistItemEventRouter(WishlistCallbacks wishlistCallbacks) : ItemEventRouterDefinition { protected override List GetHandledRoutes() { @@ -36,32 +35,18 @@ public class WishlistItemEventRouter(WishlistCallbacks wishlistCallbacks) { case ItemEventActions.ADD_TO_WISHLIST: return new ValueTask( - wishlistCallbacks.AddToWishlist( - pmcData, - body as AddToWishlistRequest, - sessionID - ) + wishlistCallbacks.AddToWishlist(pmcData, body as AddToWishlistRequest, sessionID) ); case ItemEventActions.REMOVE_FROM_WISHLIST: return new ValueTask( - wishlistCallbacks.RemoveFromWishlist( - pmcData, - body as RemoveFromWishlistRequest, - sessionID - ) + wishlistCallbacks.RemoveFromWishlist(pmcData, body as RemoveFromWishlistRequest, sessionID) ); case ItemEventActions.CHANGE_WISHLIST_ITEM_CATEGORY: return new ValueTask( - wishlistCallbacks.ChangeWishlistItemCategory( - pmcData, - body as ChangeWishlistItemCategoryRequest, - sessionID - ) + wishlistCallbacks.ChangeWishlistItemCategory(pmcData, body as ChangeWishlistItemCategoryRequest, sessionID) ); default: - throw new Exception( - $"CustomizationItemEventRouter being used when it cant handle route {url}" - ); + throw new Exception($"CustomizationItemEventRouter being used when it cant handle route {url}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/SaveLoad/ProfileSaveLoadRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/SaveLoad/ProfileSaveLoadRouter.cs index 8306ba95..a6a4b9ce 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/SaveLoad/ProfileSaveLoadRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/SaveLoad/ProfileSaveLoadRouter.cs @@ -15,11 +15,7 @@ public class ProfileSaveLoadRouter : SaveLoadRouter public override SptProfile HandleLoad(SptProfile profile) { - profile.CharacterData ??= new Characters - { - PmcData = new PmcData(), - ScavData = new PmcData(), - }; + profile.CharacterData ??= new Characters { PmcData = new PmcData(), ScavData = new PmcData() }; return profile; } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Serializers/BundleSerializer.cs b/Libraries/SPTarkov.Server.Core/Routers/Serializers/BundleSerializer.cs index d5822bf9..bc6a49d4 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Serializers/BundleSerializer.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Serializers/BundleSerializer.cs @@ -9,11 +9,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Serializers; [Injectable] -public class BundleSerializer( - ISptLogger logger, - BundleLoader bundleLoader, - HttpFileUtil httpFileUtil -) : ISerializer +public class BundleSerializer(ISptLogger logger, BundleLoader bundleLoader, HttpFileUtil httpFileUtil) : ISerializer { public async Task Serialize(MongoId sessionID, HttpRequest req, HttpResponse resp, object? body) { diff --git a/Libraries/SPTarkov.Server.Core/Routers/Serializers/NotifySerializer.cs b/Libraries/SPTarkov.Server.Core/Routers/Serializers/NotifySerializer.cs index 9d27c8bf..d9c291e9 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Serializers/NotifySerializer.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Serializers/NotifySerializer.cs @@ -9,11 +9,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Routers.Serializers; [Injectable] -public class NotifySerializer( - NotifierController notifierController, - JsonUtil jsonUtil, - HttpServerHelper httpServerHelper -) : ISerializer +public class NotifySerializer(NotifierController notifierController, JsonUtil jsonUtil, HttpServerHelper httpServerHelper) : ISerializer { public async Task Serialize(MongoId sessionID, HttpRequest req, HttpResponse resp, object? body) { @@ -26,9 +22,7 @@ public class NotifySerializer( */ await notifierController .NotifyAsync(tmpSessionID) - .ContinueWith(messages => - messages.Result.Select(message => string.Join("\n", jsonUtil.Serialize(message))) - ) + .ContinueWith(messages => messages.Result.Select(message => string.Join("\n", jsonUtil.Serialize(message)))) .ContinueWith(text => httpServerHelper.SendTextJson(resp, text)); } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs index 833b34bd..e10fdd95 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/AchievementStaticRouter.cs @@ -16,20 +16,11 @@ public class AchievementStaticRouter : StaticRouter new RouteAction( "/client/achievement/list", async (url, info, sessionID, output) => - await achievementCallbacks.GetAchievements( - url, - info as EmptyRequestData, - sessionID - ) + await achievementCallbacks.GetAchievements(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/achievement/statistic", - async (url, info, sessionID, output) => - await achievementCallbacks.Statistic( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await achievementCallbacks.Statistic(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs index 95e3727e..79ec50dc 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/BotStaticRouter.cs @@ -16,11 +16,7 @@ public class BotStaticRouter : StaticRouter new RouteAction( "/client/game/bot/generate", async (url, info, sessionID, outout) => - await botCallbacks.GenerateBots( - url, - info as GenerateBotsRequestData, - sessionID - ), + await botCallbacks.GenerateBots(url, info as GenerateBotsRequestData, sessionID), typeof(GenerateBotsRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs index eaf962c1..f5624f84 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/BuildStaticRouter.cs @@ -17,47 +17,30 @@ public class BuildStaticRouter : StaticRouter [ new RouteAction( "/client/builds/list", - async (url, info, sessionID, output) => - await buildsCallbacks.GetBuilds(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await buildsCallbacks.GetBuilds(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/builds/magazine/save", async (url, info, sessionID, output) => - await buildsCallbacks.CreateMagazineTemplate( - url, - info as SetMagazineRequest, - sessionID - ), + await buildsCallbacks.CreateMagazineTemplate(url, info as SetMagazineRequest, sessionID), typeof(SetMagazineRequest) ), new RouteAction( "/client/builds/weapon/save", async (url, info, sessionID, output) => - await buildsCallbacks.SetWeapon( - url, - info as PresetBuildActionRequestData, - sessionID - ), + await buildsCallbacks.SetWeapon(url, info as PresetBuildActionRequestData, sessionID), typeof(PresetBuildActionRequestData) ), new RouteAction( "/client/builds/equipment/save", async (url, info, sessionID, output) => - await buildsCallbacks.SetEquipment( - url, - info as PresetBuildActionRequestData, - sessionID - ), + await buildsCallbacks.SetEquipment(url, info as PresetBuildActionRequestData, sessionID), typeof(PresetBuildActionRequestData) ), new RouteAction( "/client/builds/delete", async (url, info, sessionID, output) => - await buildsCallbacks.DeleteBuild( - url, - info as RemoveBuildRequestData, - sessionID - ), + await buildsCallbacks.DeleteBuild(url, info as RemoveBuildRequestData, sessionID), typeof(RemoveBuildRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs index cdfbc2c8..92a7f69a 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/BundleStaticRouter.cs @@ -15,8 +15,7 @@ public class BundleStaticRouter : StaticRouter [ new RouteAction( "/singleplayer/bundles", - async (url, info, sessionID, output) => - await bundleCallbacks.GetBundles(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await bundleCallbacks.GetBundles(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs index 342bd694..7593af4d 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ClientLogStaticRouter.cs @@ -15,18 +15,10 @@ public class ClientLogStaticRouter : StaticRouter [ new RouteAction( "/singleplayer/log", - async (url, info, sessionID, output) => - await clientLogCallbacks.ClientLog( - url, - info as ClientLogRequest, - sessionID - ), + async (url, info, sessionID, output) => await clientLogCallbacks.ClientLog(url, info as ClientLogRequest, sessionID), typeof(ClientLogRequest) ), - new RouteAction( - "/singleplayer/release", - async (url, info, sessionID, output) => await clientLogCallbacks.ReleaseNotes() - ), + new RouteAction("/singleplayer/release", async (url, info, sessionID, output) => await clientLogCallbacks.ReleaseNotes()), new RouteAction( "/singleplayer/enableBSGlogging", async (url, info, sessionID, output) => await clientLogCallbacks.BsgLogging() diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs index d54622db..fc67423f 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/CustomizationStaticRouter.cs @@ -9,39 +9,24 @@ namespace SPTarkov.Server.Core.Routers.Static; [Injectable] public class CustomizationStaticRouter : StaticRouter { - public CustomizationStaticRouter( - JsonUtil jsonUtil, - CustomizationCallbacks customizationCallbacks - ) + public CustomizationStaticRouter(JsonUtil jsonUtil, CustomizationCallbacks customizationCallbacks) : base( jsonUtil, [ new RouteAction( "/client/trading/customization/storage", async (url, info, sessionID, output) => - await customizationCallbacks.GetCustomisationUnlocks( - url, - info as EmptyRequestData, - sessionID - ) + await customizationCallbacks.GetCustomisationUnlocks(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/hideout/customization/offer/list", async (url, info, sessionID, output) => - await customizationCallbacks.GetHideoutCustomisation( - url, - info as EmptyRequestData, - sessionID - ) + await customizationCallbacks.GetHideoutCustomisation(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/customization/storage", async (url, info, sessionID, output) => - await customizationCallbacks.GetStorage( - url, - info as EmptyRequestData, - sessionID - ) + await customizationCallbacks.GetStorage(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs index 9993933e..e4a6bd21 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/DataStaticRouter.cs @@ -15,90 +15,51 @@ public class DataStaticRouter : StaticRouter [ new RouteAction( "/client/settings", - async (url, info, sessionID, output) => - await dataCallbacks.GetSettings(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dataCallbacks.GetSettings(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/globals", - async (url, info, sessionID, output) => - await dataCallbacks.GetGlobals(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dataCallbacks.GetGlobals(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/items", - async (url, info, sessionID, output) => - await dataCallbacks.GetTemplateItems( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await dataCallbacks.GetTemplateItems(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/handbook/templates", async (url, info, sessionID, output) => - await dataCallbacks.GetTemplateHandbook( - url, - info as EmptyRequestData, - sessionID - ) + await dataCallbacks.GetTemplateHandbook(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/customization", - async (url, info, sessionID, output) => - await dataCallbacks.GetTemplateSuits( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await dataCallbacks.GetTemplateSuits(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/account/customization", async (url, info, sessionID, output) => - await dataCallbacks.GetTemplateCharacter( - url, - info as EmptyRequestData, - sessionID - ) + await dataCallbacks.GetTemplateCharacter(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/hideout/production/recipes", async (url, info, sessionID, output) => - await dataCallbacks.GetHideoutProduction( - url, - info as EmptyRequestData, - sessionID - ) + await dataCallbacks.GetHideoutProduction(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/hideout/settings", - async (url, info, sessionID, output) => - await dataCallbacks.GetHideoutSettings( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await dataCallbacks.GetHideoutSettings(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/hideout/areas", - async (url, info, sessionID, output) => - await dataCallbacks.GetHideoutAreas( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await dataCallbacks.GetHideoutAreas(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/languages", async (url, info, sessionID, output) => - await dataCallbacks.GetLocalesLanguages( - url, - info as EmptyRequestData, - sessionID - ) + await dataCallbacks.GetLocalesLanguages(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/hideout/qte/list", - async (url, info, sessionID, output) => - await dataCallbacks.GetQteList(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dataCallbacks.GetQteList(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs index 04a13f57..537bc6bb 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/DialogStaticRouter.cs @@ -18,249 +18,146 @@ public class DialogStaticRouter : StaticRouter new RouteAction( "/client/chatServer/list", async (url, info, sessionID, output) => - await dialogueCallbacks.GetChatServerList( - url, - info as GetChatServerListRequestData, - sessionID - ), + await dialogueCallbacks.GetChatServerList(url, info as GetChatServerListRequestData, sessionID), typeof(GetChatServerListRequestData) ), new RouteAction( "/client/mail/dialog/list", async (url, info, sessionID, output) => - await dialogueCallbacks.GetMailDialogList( - url, - info as GetMailDialogListRequestData, - sessionID - ), + await dialogueCallbacks.GetMailDialogList(url, info as GetMailDialogListRequestData, sessionID), typeof(GetMailDialogListRequestData) ), new RouteAction( "/client/mail/dialog/view", async (url, info, sessionID, output) => - await dialogueCallbacks.GetMailDialogView( - url, - info as GetMailDialogViewRequestData, - sessionID - ), + await dialogueCallbacks.GetMailDialogView(url, info as GetMailDialogViewRequestData, sessionID), typeof(GetMailDialogViewRequestData) ), new RouteAction( "/client/mail/dialog/info", async (url, info, sessionID, output) => - await dialogueCallbacks.GetMailDialogInfo( - url, - info as GetMailDialogInfoRequestData, - sessionID - ), + await dialogueCallbacks.GetMailDialogInfo(url, info as GetMailDialogInfoRequestData, sessionID), typeof(GetMailDialogInfoRequestData) ), new RouteAction( "/client/mail/dialog/remove", async (url, info, sessionID, output) => - await dialogueCallbacks.RemoveDialog( - url, - info as RemoveDialogRequestData, - sessionID - ), + await dialogueCallbacks.RemoveDialog(url, info as RemoveDialogRequestData, sessionID), typeof(RemoveDialogRequestData) ), new RouteAction( "/client/mail/dialog/pin", - async (url, info, sessionID, output) => - await dialogueCallbacks.PinDialog( - url, - info as PinDialogRequestData, - sessionID - ), + async (url, info, sessionID, output) => await dialogueCallbacks.PinDialog(url, info as PinDialogRequestData, sessionID), typeof(PinDialogRequestData) ), new RouteAction( "/client/mail/dialog/unpin", async (url, info, sessionID, output) => - await dialogueCallbacks.UnpinDialog( - url, - info as PinDialogRequestData, - sessionID - ), + await dialogueCallbacks.UnpinDialog(url, info as PinDialogRequestData, sessionID), typeof(PinDialogRequestData) ), new RouteAction( "/client/mail/dialog/read", async (url, info, sessionID, output) => - await dialogueCallbacks.SetRead( - url, - info as SetDialogReadRequestData, - sessionID - ), + await dialogueCallbacks.SetRead(url, info as SetDialogReadRequestData, sessionID), typeof(SetDialogReadRequestData) ), new RouteAction( "/client/mail/dialog/getAllAttachments", async (url, info, sessionID, output) => - await dialogueCallbacks.GetAllAttachments( - url, - info as GetAllAttachmentsRequestData, - sessionID - ), + await dialogueCallbacks.GetAllAttachments(url, info as GetAllAttachmentsRequestData, sessionID), typeof(GetAllAttachmentsRequestData) ), new RouteAction( "/client/mail/msg/send", - async (url, info, sessionID, output) => - await dialogueCallbacks.SendMessage( - url, - info as SendMessageRequest, - sessionID - ), + async (url, info, sessionID, output) => await dialogueCallbacks.SendMessage(url, info as SendMessageRequest, sessionID), typeof(SendMessageRequest) ), new RouteAction( "/client/mail/dialog/clear", async (url, info, sessionID, output) => - await dialogueCallbacks.ClearMail( - url, - info as ClearMailMessageRequest, - sessionID - ), + await dialogueCallbacks.ClearMail(url, info as ClearMailMessageRequest, sessionID), typeof(ClearMailMessageRequest) ), new RouteAction( "/client/mail/dialog/group/create", async (url, info, sessionID, output) => - await dialogueCallbacks.CreateGroupMail( - url, - info as CreateGroupMailRequest, - sessionID - ), + await dialogueCallbacks.CreateGroupMail(url, info as CreateGroupMailRequest, sessionID), typeof(CreateGroupMailRequest) ), new RouteAction( "/client/mail/dialog/group/owner/change", async (url, info, sessionID, output) => - await dialogueCallbacks.ChangeMailGroupOwner( - url, - info as ChangeGroupMailOwnerRequest, - sessionID - ), + await dialogueCallbacks.ChangeMailGroupOwner(url, info as ChangeGroupMailOwnerRequest, sessionID), typeof(ChangeGroupMailOwnerRequest) ), new RouteAction( "/client/mail/dialog/group/users/add", async (url, info, sessionID, output) => - await dialogueCallbacks.AddUserToMail( - url, - info as AddUserGroupMailRequest, - sessionID - ), + await dialogueCallbacks.AddUserToMail(url, info as AddUserGroupMailRequest, sessionID), typeof(AddUserGroupMailRequest) ), new RouteAction( "/client/mail/dialog/group/users/remove", async (url, info, sessionID, output) => - await dialogueCallbacks.RemoveUserFromMail( - url, - info as RemoveUserGroupMailRequest, - sessionID - ), + await dialogueCallbacks.RemoveUserFromMail(url, info as RemoveUserGroupMailRequest, sessionID), typeof(RemoveUserGroupMailRequest) ), new RouteAction( "/client/friend/list", - async (url, info, sessionID, output) => - await dialogueCallbacks.GetFriendList( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await dialogueCallbacks.GetFriendList(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/friend/request/list/outbox", - async (url, info, sessionID, output) => - await dialogueCallbacks.ListOutbox(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dialogueCallbacks.ListOutbox(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/friend/request/list/inbox", - async (url, info, sessionID, output) => - await dialogueCallbacks.ListInbox(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await dialogueCallbacks.ListInbox(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/friend/request/send", async (url, info, sessionID, output) => - await dialogueCallbacks.SendFriendRequest( - url, - info as FriendRequestData, - sessionID - ), + await dialogueCallbacks.SendFriendRequest(url, info as FriendRequestData, sessionID), typeof(FriendRequestData) ), new RouteAction( "/client/friend/request/accept-all", async (url, info, sessionID, output) => - await dialogueCallbacks.AcceptAllFriendRequests( - url, - info as EmptyRequestData, - sessionID - ) + await dialogueCallbacks.AcceptAllFriendRequests(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/friend/request/accept", async (url, info, sessionID, output) => - await dialogueCallbacks.AcceptFriendRequest( - url, - info as AcceptFriendRequestData, - sessionID - ), + await dialogueCallbacks.AcceptFriendRequest(url, info as AcceptFriendRequestData, sessionID), typeof(AcceptFriendRequestData) ), new RouteAction( "/client/friend/request/decline", async (url, info, sessionID, output) => - await dialogueCallbacks.DeclineFriendRequest( - url, - info as DeclineFriendRequestData, - sessionID - ), + await dialogueCallbacks.DeclineFriendRequest(url, info as DeclineFriendRequestData, sessionID), typeof(DeclineFriendRequestData) ), new RouteAction( "/client/friend/request/cancel", async (url, info, sessionID, output) => - await dialogueCallbacks.CancelFriendRequest( - url, - info as CancelFriendRequestData, - sessionID - ), + await dialogueCallbacks.CancelFriendRequest(url, info as CancelFriendRequestData, sessionID), typeof(CancelFriendRequestData) ), new RouteAction( "/client/friend/delete", async (url, info, sessionID, output) => - await dialogueCallbacks.DeleteFriend( - url, - info as DeleteFriendRequest, - sessionID - ), + await dialogueCallbacks.DeleteFriend(url, info as DeleteFriendRequest, sessionID), typeof(DeleteFriendRequest) ), new RouteAction( "/client/friend/ignore/set", - async (url, info, sessionID, output) => - await dialogueCallbacks.IgnoreFriend( - url, - info as UIDRequestData, - sessionID - ), + async (url, info, sessionID, output) => await dialogueCallbacks.IgnoreFriend(url, info as UIDRequestData, sessionID), typeof(UIDRequestData) ), new RouteAction( "/client/friend/ignore/remove", - async (url, info, sessionID, output) => - await dialogueCallbacks.UnIgnoreFriend( - url, - info as UIDRequestData, - sessionID - ), + async (url, info, sessionID, output) => await dialogueCallbacks.UnIgnoreFriend(url, info as UIDRequestData, sessionID), typeof(UIDRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs index 02e14c19..2819c4bb 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/GameStaticRouter.cs @@ -18,123 +18,83 @@ public class GameStaticRouter : StaticRouter new RouteAction( "/client/game/config", async (url, info, sessionID, output) => - await gameCallbacks.GetGameConfig( - url, - info as GameEmptyCrcRequestData, - sessionID - ), + await gameCallbacks.GetGameConfig(url, info as GameEmptyCrcRequestData, sessionID), typeof(GameEmptyCrcRequestData) ), new RouteAction( "/client/putHWMetrics", - async (url, info, sessionID, output) => - await gameCallbacks.PutHwMetrics(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.PutHwMetrics(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/game/mode", - async (url, info, sessionID, output) => - await gameCallbacks.GetGameMode( - url, - info as GameModeRequestData, - sessionID - ), + async (url, info, sessionID, output) => await gameCallbacks.GetGameMode(url, info as GameModeRequestData, sessionID), typeof(GameModeRequestData) ), new RouteAction( "/client/server/list", - async (url, info, sessionID, output) => - await gameCallbacks.GetServer(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.GetServer(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/current", - async (url, info, sessionID, output) => - await gameCallbacks.GetCurrentGroup( - url, - info as EmptyRequestData, - sessionID - ), + async (url, info, sessionID, output) => await gameCallbacks.GetCurrentGroup(url, info as EmptyRequestData, sessionID), typeof(GameModeRequestData) ), new RouteAction( "/client/game/version/validate", async (url, info, sessionID, output) => - await gameCallbacks.VersionValidate( - url, - info as VersionValidateRequestData, - sessionID - ), + await gameCallbacks.VersionValidate(url, info as VersionValidateRequestData, sessionID), typeof(VersionValidateRequestData) ), new RouteAction( "/client/game/start", - async (url, info, sessionID, output) => - await gameCallbacks.GameStart(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.GameStart(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/game/logout", - async (url, info, sessionID, output) => - await gameCallbacks.GameLogout(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.GameLogout(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/checkVersion", async (url, info, sessionID, output) => - await gameCallbacks.ValidateGameVersion( - url, - info as EmptyRequestData, - sessionID - ) + await gameCallbacks.ValidateGameVersion(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/game/keepalive", - async (url, info, sessionID, output) => - await gameCallbacks.GameKeepalive(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.GameKeepalive(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/settings/version", - async (url, info, sessionID, output) => - await gameCallbacks.GetVersion(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.GetVersion(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/reports/lobby/send", - async (url, info, sessionID, output) => - await gameCallbacks.ReportNickname(url, info as UIDRequestData, sessionID), + async (url, info, sessionID, output) => await gameCallbacks.ReportNickname(url, info as UIDRequestData, sessionID), typeof(UIDRequestData) ), new RouteAction( "/client/report/send", - async (url, info, sessionID, output) => - await gameCallbacks.ReportNickname(url, info as UIDRequestData, sessionID), + async (url, info, sessionID, output) => await gameCallbacks.ReportNickname(url, info as UIDRequestData, sessionID), typeof(GameModeRequestData) ), new RouteAction( "/singleplayer/settings/getRaidTime", - async (url, info, sessionID, output) => - await gameCallbacks.GetRaidTime(url, info as GetRaidTimeRequest, sessionID), + async (url, info, sessionID, output) => await gameCallbacks.GetRaidTime(url, info as GetRaidTimeRequest, sessionID), typeof(GetRaidTimeRequest) ), new RouteAction( "/client/survey", - async (url, info, sessionID, output) => - await gameCallbacks.GetSurvey(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await gameCallbacks.GetSurvey(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/survey/view", async (url, info, sessionID, output) => - await gameCallbacks.GetSurveyView( - url, - info as SendSurveyOpinionRequest, - sessionID - ), + await gameCallbacks.GetSurveyView(url, info as SendSurveyOpinionRequest, sessionID), typeof(SendSurveyOpinionRequest) ), new RouteAction( "/client/survey/opinion", async (url, info, sessionID, output) => - await gameCallbacks.SendSurveyOpinion( - url, - info as SendSurveyOpinionRequest, - sessionID - ), + await gameCallbacks.SendSurveyOpinion(url, info as SendSurveyOpinionRequest, sessionID), typeof(SendSurveyOpinionRequest) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs index ddbdb5df..ca63dd05 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/HealthStaticRouter.cs @@ -15,12 +15,7 @@ public class HealthStaticRouter : StaticRouter [ new RouteAction( "/client/hideout/workout", - async (url, info, sessionID, output) => - await healthCallbacks.HandleWorkoutEffects( - url, - info as WorkoutData, - sessionID - ), + async (url, info, sessionID, output) => await healthCallbacks.HandleWorkoutEffects(url, info as WorkoutData, sessionID), typeof(WorkoutData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs index ab877089..394e9f6a 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/InraidStaticRouter.cs @@ -16,32 +16,21 @@ public class InraidStaticRouter : StaticRouter [ new RouteAction( "/raid/profile/scavsave", - async (url, info, sessionID, output) => - await inRaidCallbacks.SaveProgress( - url, - info as ScavSaveRequestData, - sessionID - ), + async (url, info, sessionID, output) => await inRaidCallbacks.SaveProgress(url, info as ScavSaveRequestData, sessionID), typeof(ScavSaveRequestData) ), new RouteAction( "/singleplayer/settings/raid/menu", - async (url, info, sessionID, output) => - await inRaidCallbacks.GetRaidMenuSettings() + async (url, info, sessionID, output) => await inRaidCallbacks.GetRaidMenuSettings() ), new RouteAction( "/singleplayer/scav/traitorscavhostile", async (url, info, sessionID, output) => - await inRaidCallbacks.GetTraitorScavHostileChance( - url, - info as EmptyRequestData, - sessionID - ) + await inRaidCallbacks.GetTraitorScavHostileChance(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/bosstypes", - async (url, info, sessionID, output) => - await inRaidCallbacks.GetBossTypes(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await inRaidCallbacks.GetBossTypes(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs index b328b2a8..547ad21d 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/InsuranceStaticRouter.cs @@ -16,11 +16,7 @@ public class InsuranceStaticRouter : StaticRouter new RouteAction( "/client/insurance/items/list/cost", async (url, info, sessionID, output) => - await insuranceCallbacks.GetInsuranceCost( - url, - info as GetInsuranceCostRequestData, - sessionID - ), + await insuranceCallbacks.GetInsuranceCost(url, info as GetInsuranceCostRequestData, sessionID), typeof(GetInsuranceCostRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs index 7e76dc60..500c0d8f 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ItemEventStaticRouter.cs @@ -16,11 +16,7 @@ public class ItemEventStaticRouter : StaticRouter new RouteAction( "/client/game/profile/items/moving", async (url, info, sessionID, output) => - await itemEventCallbacks.HandleEvents( - url, - info as ItemEventRouterRequest, - sessionID - ), + await itemEventCallbacks.HandleEvents(url, info as ItemEventRouterRequest, sessionID), typeof(ItemEventRouterRequest) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs index 9df21f94..fc2e5722 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherStaticRouter.cs @@ -14,89 +14,53 @@ public class LauncherStaticRouter : StaticRouter : base( jsonUtil, [ - new RouteAction( - "/launcher/ping", - async (url, _, sessionID, _) => - await launcherCallbacks.Ping(url, null, sessionID) - ), - new RouteAction( - "/launcher/server/connect", - async (_, _, _, _) => await launcherCallbacks.Connect() - ), + new RouteAction("/launcher/ping", async (url, _, sessionID, _) => await launcherCallbacks.Ping(url, null, sessionID)), + new RouteAction("/launcher/server/connect", async (_, _, _, _) => await launcherCallbacks.Connect()), new RouteAction( "/launcher/profile/login", - async (url, info, sessionID, _) => - await launcherCallbacks.Login(url, info as LoginRequestData, sessionID), + async (url, info, sessionID, _) => await launcherCallbacks.Login(url, info as LoginRequestData, sessionID), typeof(LoginRequestData) ), new RouteAction( "/launcher/profile/register", - async (url, info, sessionID, _) => - await launcherCallbacks.Register(url, info as RegisterData, sessionID), + async (url, info, sessionID, _) => await launcherCallbacks.Register(url, info as RegisterData, sessionID), typeof(RegisterData) ), new RouteAction( "/launcher/profile/get", - async (url, info, sessionID, _) => - await launcherCallbacks.Get(url, info as LoginRequestData, sessionID), + async (url, info, sessionID, _) => await launcherCallbacks.Get(url, info as LoginRequestData, sessionID), typeof(LoginRequestData) ), new RouteAction( "/launcher/profile/change/username", - async (url, info, sessionID, _) => - await launcherCallbacks.ChangeUsername( - url, - info as ChangeRequestData, - sessionID - ), + async (url, info, sessionID, _) => await launcherCallbacks.ChangeUsername(url, info as ChangeRequestData, sessionID), typeof(ChangeRequestData) ), new RouteAction( "/launcher/profile/change/password", - async (url, info, sessionID, _) => - await launcherCallbacks.ChangePassword( - url, - info as ChangeRequestData, - sessionID - ), + async (url, info, sessionID, _) => await launcherCallbacks.ChangePassword(url, info as ChangeRequestData, sessionID), typeof(ChangeRequestData) ), new RouteAction( "/launcher/profile/change/wipe", - async (url, info, sessionID, _) => - await launcherCallbacks.Wipe(url, info as RegisterData, sessionID), + async (url, info, sessionID, _) => await launcherCallbacks.Wipe(url, info as RegisterData, sessionID), typeof(RegisterData) ), new RouteAction( "/launcher/profile/remove", - async (url, info, sessionID, _) => - await launcherCallbacks.RemoveProfile( - url, - info as RemoveProfileData, - sessionID - ), + async (url, info, sessionID, _) => await launcherCallbacks.RemoveProfile(url, info as RemoveProfileData, sessionID), typeof(RemoveProfileData) ), new RouteAction( "/launcher/profile/compatibleTarkovVersion", async (_, _, _, _) => await launcherCallbacks.GetCompatibleTarkovVersion() ), - new RouteAction( - "/launcher/server/version", - async (_, _, _, _) => await launcherCallbacks.GetServerVersion() - ), - new RouteAction( - "/launcher/server/loadedServerMods", - async (_, _, _, _) => await launcherCallbacks.GetLoadedServerMods() - ), + new RouteAction("/launcher/server/version", async (_, _, _, _) => await launcherCallbacks.GetServerVersion()), + new RouteAction("/launcher/server/loadedServerMods", async (_, _, _, _) => await launcherCallbacks.GetLoadedServerMods()), new RouteAction( "/launcher/server/serverModsUsedByProfile", async (url, info, sessionID, _) => - await launcherCallbacks.GetServerModsProfileUsed( - url, - info as EmptyRequestData, - sessionID - ), + await launcherCallbacks.GetServerModsProfileUsed(url, info as EmptyRequestData, sessionID), typeof(EmptyRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs index 59514f72..2c1e28a8 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/LauncherV2StaticRouter.cs @@ -13,54 +13,32 @@ public class LauncherV2StaticRouter : StaticRouter : base( jsonUtil, [ - new RouteAction( - "/launcher/v2/ping", - async (url, _, sessionID, _) => await launcherV2Callbacks.Ping() - ), - new RouteAction( - "/launcher/v2/types", - async (url, _, sessionID, _) => await launcherV2Callbacks.Types() - ), + new RouteAction("/launcher/v2/ping", async (url, _, sessionID, _) => await launcherV2Callbacks.Ping()), + new RouteAction("/launcher/v2/types", async (url, _, sessionID, _) => await launcherV2Callbacks.Types()), new RouteAction( "/launcher/v2/login", - async (url, info, sessionID, _) => - await launcherV2Callbacks.Login(info as LoginRequestData), + async (url, info, sessionID, _) => await launcherV2Callbacks.Login(info as LoginRequestData), typeof(LoginRequestData) ), new RouteAction( "/launcher/v2/register", - async (url, info, sessionID, _) => - await launcherV2Callbacks.Register(info as RegisterData), + async (url, info, sessionID, _) => await launcherV2Callbacks.Register(info as RegisterData), typeof(RegisterData) ), new RouteAction( "/launcher/v2/passwordChange", - async (url, info, sessionID, _) => - await launcherV2Callbacks.PasswordChange(info as ChangeRequestData), + async (url, info, sessionID, _) => await launcherV2Callbacks.PasswordChange(info as ChangeRequestData), typeof(ChangeRequestData) ), new RouteAction( "/launcher/v2/remove", - async (url, info, sessionID, _) => - await launcherV2Callbacks.Remove(info as LoginRequestData), + async (url, info, sessionID, _) => await launcherV2Callbacks.Remove(info as LoginRequestData), typeof(LoginRequestData) ), - new RouteAction( - "/launcher/v2/version", - async (url, _, sessionID, _) => await launcherV2Callbacks.CompatibleVersion() - ), - new RouteAction( - "/launcher/v2/mods", - async (url, _, sessionID, _) => await launcherV2Callbacks.Mods() - ), - new RouteAction( - "/launcher/v2/profiles", - async (url, _, sessionID, _) => await launcherV2Callbacks.Profiles() - ), - new RouteAction( - "/launcher/v2/profile", - async (url, _, sessionID, _) => await launcherV2Callbacks.Profile(sessionID) - ), + new RouteAction("/launcher/v2/version", async (url, _, sessionID, _) => await launcherV2Callbacks.CompatibleVersion()), + new RouteAction("/launcher/v2/mods", async (url, _, sessionID, _) => await launcherV2Callbacks.Mods()), + new RouteAction("/launcher/v2/profiles", async (url, _, sessionID, _) => await launcherV2Callbacks.Profiles()), + new RouteAction("/launcher/v2/profile", async (url, _, sessionID, _) => await launcherV2Callbacks.Profile(sessionID)), ] ) { } } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs index 1555701b..8d06574c 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/LocationStaticRouter.cs @@ -17,20 +17,12 @@ public class LocationStaticRouter : StaticRouter new RouteAction( "/client/locations", async (url, info, sessionID, output) => - await locationCallbacks.GetLocationData( - url, - info as EmptyRequestData, - sessionID - ) + await locationCallbacks.GetLocationData(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/airdrop/loot", async (url, info, sessionID, output) => - await locationCallbacks.GetAirdropLoot( - url, - info as GetAirdropLootRequest, - sessionID - ), + await locationCallbacks.GetAirdropLoot(url, info as GetAirdropLootRequest, sessionID), typeof(GetAirdropLootRequest) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs index dd9d6743..d7edc8ed 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs @@ -17,238 +17,144 @@ public class MatchStaticRouter : StaticRouter [ new RouteAction( "/client/match/available", - async (url, info, sessionID, output) => - await matchCallbacks.ServerAvailable( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await matchCallbacks.ServerAvailable(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/updatePing", - async (url, info, sessionID, output) => - await matchCallbacks.UpdatePing( - url, - info as UpdatePingRequestData, - sessionID - ), + async (url, info, sessionID, output) => await matchCallbacks.UpdatePing(url, info as UpdatePingRequestData, sessionID), typeof(UpdatePingRequestData) ), new RouteAction( "/client/match/join", - async (url, info, sessionID, output) => - await matchCallbacks.JoinMatch( - url, - info as MatchGroupJoinRequest, - sessionID - ), + async (url, info, sessionID, output) => await matchCallbacks.JoinMatch(url, info as MatchGroupJoinRequest, sessionID), typeof(MatchGroupJoinRequest) ), new RouteAction( "/client/match/exit", - async (url, info, sessionID, output) => - await matchCallbacks.ExitMatch(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.ExitMatch(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/delete", - async (url, info, sessionID, output) => - await matchCallbacks.DeleteGroup(url, info as DeleteGroupRequest, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.DeleteGroup(url, info as DeleteGroupRequest, sessionID) ), new RouteAction( "/client/match/group/leave", - async (url, info, sessionID, output) => - await matchCallbacks.LeaveGroup(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.LeaveGroup(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/status", async (url, info, sessionID, output) => - await matchCallbacks.GetGroupStatus( - url, - info as MatchGroupStatusRequest, - sessionID - ), + await matchCallbacks.GetGroupStatus(url, info as MatchGroupStatusRequest, sessionID), typeof(MatchGroupStatusRequest) ), new RouteAction( "/client/match/group/start_game", async (url, info, sessionID, output) => - await matchCallbacks.StartGameAsGroupLeader( - url, - info as MatchGroupStartGameRequest, - sessionID - ), + await matchCallbacks.StartGameAsGroupLeader(url, info as MatchGroupStartGameRequest, sessionID), typeof(MatchGroupStartGameRequest) ), new RouteAction( "/client/match/group/exit_from_menu", - async (url, info, sessionID, output) => - await matchCallbacks.ExitFromMenu(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.ExitFromMenu(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/current", - async (url, info, sessionID, output) => - await matchCallbacks.GroupCurrent(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.GroupCurrent(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/looking/start", - async (url, info, sessionID, output) => - await matchCallbacks.StartGroupSearch( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await matchCallbacks.StartGroupSearch(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/looking/stop", - async (url, info, sessionID, output) => - await matchCallbacks.StopGroupSearch( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await matchCallbacks.StopGroupSearch(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/invite/send", async (url, info, sessionID, output) => - await matchCallbacks.SendGroupInvite( - url, - info as MatchGroupInviteSendRequest, - sessionID - ), + await matchCallbacks.SendGroupInvite(url, info as MatchGroupInviteSendRequest, sessionID), typeof(MatchGroupInviteSendRequest) ), new RouteAction( "/client/match/group/invite/accept", async (url, info, sessionID, output) => - await matchCallbacks.AcceptGroupInvite( - url, - info as RequestIdRequest, - sessionID - ), + await matchCallbacks.AcceptGroupInvite(url, info as RequestIdRequest, sessionID), typeof(RequestIdRequest) ), new RouteAction( "/client/match/group/invite/decline", async (url, info, sessionID, output) => - await matchCallbacks.DeclineGroupInvite( - url, - info as RequestIdRequest, - sessionID - ), + await matchCallbacks.DeclineGroupInvite(url, info as RequestIdRequest, sessionID), typeof(RequestIdRequest) ), new RouteAction( "/client/match/group/invite/cancel", async (url, info, sessionID, output) => - await matchCallbacks.CancelGroupInvite( - url, - info as RequestIdRequest, - sessionID - ), + await matchCallbacks.CancelGroupInvite(url, info as RequestIdRequest, sessionID), typeof(RequestIdRequest) ), new RouteAction( "/client/match/group/invite/cancel-all", async (url, info, sessionID, output) => - await matchCallbacks.CancelAllGroupInvite( - url, - info as EmptyRequestData, - sessionID - ) + await matchCallbacks.CancelAllGroupInvite(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/transfer", async (url, info, sessionID, output) => - await matchCallbacks.TransferGroup( - url, - info as MatchGroupTransferRequest, - sessionID - ), + await matchCallbacks.TransferGroup(url, info as MatchGroupTransferRequest, sessionID), typeof(MatchGroupTransferRequest) ), new RouteAction( "/client/match/group/raid/ready", - async (url, info, sessionID, output) => - await matchCallbacks.RaidReady(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.RaidReady(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/match/group/raid/not-ready", - async (url, info, sessionID, output) => - await matchCallbacks.NotRaidReady(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.NotRaidReady(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/putMetrics", - async (url, info, sessionID, output) => - await matchCallbacks.PutMetrics( - url, - info as PutMetricsRequestData, - sessionID - ), + async (url, info, sessionID, output) => await matchCallbacks.PutMetrics(url, info as PutMetricsRequestData, sessionID), typeof(PutMetricsRequestData) ), new RouteAction( "/client/analytics/event-disconnect", async (url, info, sessionID, output) => - await matchCallbacks.EventDisconnect( - url, - info as PutMetricsRequestData, - sessionID - ), + await matchCallbacks.EventDisconnect(url, info as PutMetricsRequestData, sessionID), typeof(PutMetricsRequestData) ), new RouteAction( "/client/getMetricsConfig", - async (url, info, sessionID, output) => - await matchCallbacks.GetMetrics(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await matchCallbacks.GetMetrics(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/raid/configuration", async (url, info, sessionID, output) => - await matchCallbacks.GetRaidConfiguration( - url, - info as GetRaidConfigurationRequestData, - sessionID - ), + await matchCallbacks.GetRaidConfiguration(url, info as GetRaidConfigurationRequestData, sessionID), typeof(GetRaidConfigurationRequestData) ), new RouteAction( "/client/raid/configuration-by-profile", async (url, info, sessionID, output) => - await matchCallbacks.GetConfigurationByProfile( - url, - info as GetRaidConfigurationRequestData, - sessionID - ), + await matchCallbacks.GetConfigurationByProfile(url, info as GetRaidConfigurationRequestData, sessionID), typeof(GetRaidConfigurationRequestData) ), new RouteAction( "/client/match/group/player/remove", async (url, info, sessionID, output) => - await matchCallbacks.RemovePlayerFromGroup( - url, - info as MatchGroupPlayerRemoveRequest, - sessionID - ), + await matchCallbacks.RemovePlayerFromGroup(url, info as MatchGroupPlayerRemoveRequest, sessionID), typeof(MatchGroupPlayerRemoveRequest) ), new RouteAction( "/client/match/local/start", async (url, info, sessionID, output) => - await matchCallbacks.StartLocalRaid( - url, - info as StartLocalRaidRequestData, - sessionID - ), + await matchCallbacks.StartLocalRaid(url, info as StartLocalRaidRequestData, sessionID), typeof(StartLocalRaidRequestData) ), new RouteAction( "/client/match/local/end", async (url, info, sessionID, output) => - await matchCallbacks.EndLocalRaid( - url, - info as EndLocalRaidRequestData, - sessionID - ), + await matchCallbacks.EndLocalRaid(url, info as EndLocalRaidRequestData, sessionID), typeof(EndLocalRaidRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs index 5c237692..f19b0d54 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/NotifierStaticRouter.cs @@ -17,20 +17,11 @@ public class NotifierStaticRouter : StaticRouter new RouteAction( "/client/notifier/channel/create", async (url, info, sessionID, output) => - await notifierCallbacks.CreateNotifierChannel( - url, - info as EmptyRequestData, - sessionID - ) + await notifierCallbacks.CreateNotifierChannel(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/game/profile/select", - async (url, info, sessionID, output) => - await notifierCallbacks.SelectProfile( - url, - info as UIDRequestData, - sessionID - ), + async (url, info, sessionID, output) => await notifierCallbacks.SelectProfile(url, info as UIDRequestData, sessionID), typeof(UIDRequestData) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs index 2981ac9c..b30c9f15 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/PrestigeStaticRouter.cs @@ -16,21 +16,12 @@ public class PrestigeStaticRouter : StaticRouter [ new RouteAction( "/client/prestige/list", - async (url, info, sessionID, output) => - await prestigeCallbacks.GetPrestige( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await prestigeCallbacks.GetPrestige(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/prestige/obtain", async (url, info, sessionID, output) => - await prestigeCallbacks.ObtainPrestige( - url, - info as ObtainPrestigeRequestList, - sessionID - ), + await prestigeCallbacks.ObtainPrestige(url, info as ObtainPrestigeRequestList, sessionID), typeof(ObtainPrestigeRequestList) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs index 74d11036..df1f7d36 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/ProfileStaticRouter.cs @@ -18,127 +18,73 @@ public class ProfileStaticRouter : StaticRouter new RouteAction( "/client/game/profile/create", async (url, info, sessionID, output) => - await profileCallbacks.CreateProfile( - url, - info as ProfileCreateRequestData, - sessionID - ), + await profileCallbacks.CreateProfile(url, info as ProfileCreateRequestData, sessionID), typeof(ProfileCreateRequestData) ), new RouteAction( "/client/game/profile/list", - async (url, info, sessionID, output) => - await profileCallbacks.GetProfileData( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await profileCallbacks.GetProfileData(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/game/profile/savage/regenerate", - async (url, info, sessionID, output) => - await profileCallbacks.RegenerateScav( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await profileCallbacks.RegenerateScav(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/game/profile/voice/change", async (url, info, sessionID, output) => - await profileCallbacks.ChangeVoice( - url, - info as ProfileChangeVoiceRequestData, - sessionID - ), + await profileCallbacks.ChangeVoice(url, info as ProfileChangeVoiceRequestData, sessionID), typeof(ProfileChangeVoiceRequestData) ), new RouteAction( "/client/game/profile/nickname/change", async (url, info, sessionID, output) => - await profileCallbacks.ChangeNickname( - url, - info as ProfileChangeNicknameRequestData, - sessionID - ), + await profileCallbacks.ChangeNickname(url, info as ProfileChangeNicknameRequestData, sessionID), typeof(ProfileChangeNicknameRequestData) ), new RouteAction( "/client/game/profile/nickname/validate", async (url, info, sessionID, output) => - await profileCallbacks.ValidateNickname( - url, - info as ValidateNicknameRequestData, - sessionID - ), + await profileCallbacks.ValidateNickname(url, info as ValidateNicknameRequestData, sessionID), typeof(ValidateNicknameRequestData) ), new RouteAction( "/client/game/profile/nickname/reserved", async (url, info, sessionID, output) => - await profileCallbacks.GetReservedNickname( - url, - info as EmptyRequestData, - sessionID - ) + await profileCallbacks.GetReservedNickname(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/profile/status", async (url, info, sessionID, output) => - await profileCallbacks.GetProfileStatus( - url, - info as EmptyRequestData, - sessionID - ) + await profileCallbacks.GetProfileStatus(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/profile/view", async (url, info, sessionID, output) => - await profileCallbacks.GetOtherProfile( - url, - info as GetOtherProfileRequest, - sessionID - ), + await profileCallbacks.GetOtherProfile(url, info as GetOtherProfileRequest, sessionID), typeof(GetOtherProfileRequest) ), new RouteAction( "/client/profile/settings", async (url, info, sessionID, output) => - await profileCallbacks.GetProfileSettings( - url, - info as GetProfileSettingsRequest, - sessionID - ), + await profileCallbacks.GetProfileSettings(url, info as GetProfileSettingsRequest, sessionID), typeof(GetProfileSettingsRequest) ), new RouteAction( "/client/game/profile/search", async (url, info, sessionID, output) => - await profileCallbacks.SearchProfiles( - url, - info as SearchProfilesRequestData, - sessionID - ), + await profileCallbacks.SearchProfiles(url, info as SearchProfilesRequestData, sessionID), typeof(SearchProfilesRequestData) ), new RouteAction( "/launcher/profile/info", async (url, info, sessionID, output) => - await profileCallbacks.GetMiniProfile( - url, - info as GetMiniProfileRequestData, - sessionID - ), + await profileCallbacks.GetMiniProfile(url, info as GetMiniProfileRequestData, sessionID), typeof(GetMiniProfileRequestData) ), new RouteAction( "/launcher/profiles", async (url, info, sessionID, output) => - await profileCallbacks.GetAllMiniProfiles( - url, - info as EmptyRequestData, - sessionID - ) + await profileCallbacks.GetAllMiniProfiles(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs index 9347e158..95b115d3 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/QuestStaticRouter.cs @@ -16,22 +16,12 @@ public class QuestStaticRouter : StaticRouter [ new RouteAction( "/client/quest/list", - async (url, info, sessionID, output) => - await questCallbacks.ListQuests( - url, - info as ListQuestsRequestData, - sessionID - ), + async (url, info, sessionID, output) => await questCallbacks.ListQuests(url, info as ListQuestsRequestData, sessionID), typeof(ListQuestsRequestData) ), new RouteAction( "/client/repeatalbeQuests/activityPeriods", - async (url, info, sessionID, output) => - await questCallbacks.ActivityPeriods( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await questCallbacks.ActivityPeriods(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs index 046a4319..54171a7e 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/RagfairStaticRouter.cs @@ -16,63 +16,40 @@ public class RagfairStaticRouter : StaticRouter [ new RouteAction( "/client/ragfair/search", - async (url, info, sessionID, output) => - await ragfairCallbacks.Search(url, info as SearchRequestData, sessionID), + async (url, info, sessionID, output) => await ragfairCallbacks.Search(url, info as SearchRequestData, sessionID), typeof(SearchRequestData) ), new RouteAction( "/client/ragfair/find", - async (url, info, sessionID, output) => - await ragfairCallbacks.Search(url, info as SearchRequestData, sessionID), + async (url, info, sessionID, output) => await ragfairCallbacks.Search(url, info as SearchRequestData, sessionID), typeof(SearchRequestData) ), new RouteAction( "/client/ragfair/itemMarketPrice", async (url, info, sessionID, output) => - await ragfairCallbacks.GetMarketPrice( - url, - info as GetMarketPriceRequestData, - sessionID - ), + await ragfairCallbacks.GetMarketPrice(url, info as GetMarketPriceRequestData, sessionID), typeof(GetMarketPriceRequestData) ), new RouteAction( "/client/ragfair/offerfees", async (url, info, sessionID, output) => - await ragfairCallbacks.StorePlayerOfferTaxAmount( - url, - info as StorePlayerOfferTaxAmountRequestData, - sessionID - ), + await ragfairCallbacks.StorePlayerOfferTaxAmount(url, info as StorePlayerOfferTaxAmountRequestData, sessionID), typeof(StorePlayerOfferTaxAmountRequestData) ), new RouteAction( "/client/reports/ragfair/send", async (url, info, sessionID, output) => - await ragfairCallbacks.SendReport( - url, - info as SendRagfairReportRequestData, - sessionID - ), + await ragfairCallbacks.SendReport(url, info as SendRagfairReportRequestData, sessionID), typeof(SendRagfairReportRequestData) ), new RouteAction( "/client/items/prices", - async (url, info, sessionID, output) => - await ragfairCallbacks.GetFleaPrices( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await ragfairCallbacks.GetFleaPrices(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/ragfair/offer/findbyid", async (url, info, sessionID, output) => - await ragfairCallbacks.GetFleaOfferById( - url, - info as GetRagfairOfferByIdRequest, - sessionID - ), + await ragfairCallbacks.GetFleaOfferById(url, info as GetRagfairOfferByIdRequest, sessionID), typeof(GetRagfairOfferByIdRequest) ), ] diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs index a2484039..a475feef 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/TraderStaticRouter.cs @@ -16,20 +16,12 @@ public class TraderStaticRouter : StaticRouter new RouteAction( "/client/trading/api/traderSettings", async (url, info, sessionID, output) => - await traderCallbacks.GetTraderSettings( - url, - info as EmptyRequestData, - sessionID - ) + await traderCallbacks.GetTraderSettings(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/singleplayer/moddedTraders", async (url, info, sessionID, output) => - await traderCallbacks.GetModdedTraderData( - url, - info as EmptyRequestData, - sessionID - ) + await traderCallbacks.GetModdedTraderData(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs index 53484b1b..967a3c93 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/WeatherStaticRouter.cs @@ -15,17 +15,11 @@ public class WeatherStaticRouter : StaticRouter [ new RouteAction( "/client/weather", - async (url, info, sessionID, output) => - await weatherCallbacks.GetWeather(url, info as EmptyRequestData, sessionID) + async (url, info, sessionID, output) => await weatherCallbacks.GetWeather(url, info as EmptyRequestData, sessionID) ), new RouteAction( "/client/localGame/weather", - async (url, info, sessionID, output) => - await weatherCallbacks.GetLocalWeather( - url, - info as EmptyRequestData, - sessionID - ) + async (url, info, sessionID, output) => await weatherCallbacks.GetLocalWeather(url, info as EmptyRequestData, sessionID) ), ] ) { } diff --git a/Libraries/SPTarkov.Server.Core/Servers/ConfigServer.cs b/Libraries/SPTarkov.Server.Core/Servers/ConfigServer.cs index 607320b5..b9e014fc 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/ConfigServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/ConfigServer.cs @@ -35,9 +35,7 @@ public class ConfigServer var configKey = GetConfigKey(typeof(T)); if (!_configs.ContainsKey(configKey.GetValue())) { - throw new Exception( - $"Config: {configKey} is undefined. Ensure you have not broken it via editing" - ); + throw new Exception($"Config: {configKey} is undefined. Ensure you have not broken it via editing"); } return _configs[configKey.GetValue()] as T; @@ -81,12 +79,8 @@ public class ConfigServer if (deserializedContent == null) { - _logger.Error( - $"Config file: {file} is corrupt. Use a site like: https://jsonlint.com to find the issue." - ); - throw new Exception( - $"Server will not run until the: {file} config error mentioned above is fixed" - ); + _logger.Error($"Config file: {file} is corrupt. Use a site like: https://jsonlint.com to find the issue."); + throw new Exception($"Server will not run until the: {file} config error mentioned above is fixed"); } _configs[$"spt-{_fileUtil.StripExtension(file)}"] = deserializedContent; @@ -96,8 +90,7 @@ public class ConfigServer private Type GetConfigTypeByFilename(string filename) { - var type = Enum.GetValues() - .First(en => en.GetValue().Contains(_fileUtil.StripExtension(filename))); + var type = Enum.GetValues().First(en => en.GetValue().Contains(_fileUtil.StripExtension(filename))); return type.GetConfigType(); } } diff --git a/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs b/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs index 8fa909f6..7398da8e 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs @@ -56,9 +56,7 @@ public class SptHttpListener( // determine if the payload is compressed. All PUT requests are, and POST requests without // debug = 1 are as well. This should be fixed. // let compressed = req.headers["content-encoding"] === "deflate"; - var requestIsCompressed = - !req.Headers.TryGetValue("requestcompressed", out var compressHeader) - || compressHeader != "0"; + var requestIsCompressed = !req.Headers.TryGetValue("requestcompressed", out var compressHeader) || compressHeader != "0"; var requestCompressed = req.Method == "PUT" || requestIsCompressed; string body; @@ -76,10 +74,7 @@ public class SptHttpListener( if (requestCompressed) { - await using var deflateStream = new ZLibStream( - bufferStream, - CompressionMode.Decompress - ); + await using var deflateStream = new ZLibStream(bufferStream, CompressionMode.Decompress); await using var decompressedStream = new MemoryStream(); await deflateStream.CopyToAsync(decompressedStream); decompressedStream.Position = 0; @@ -110,9 +105,7 @@ public class SptHttpListener( default: { - _logger.Warning( - $"{_serverLocalisationService.GetText("unknown_request")}: {req.Method}" - ); + _logger.Warning($"{_serverLocalisationService.GetText("unknown_request")}: {req.Method}"); break; } } @@ -126,13 +119,7 @@ public class SptHttpListener( /// Outgoing response /// Buffer /// Server generated response data - public async Task SendResponse( - MongoId sessionID, - HttpRequest req, - HttpResponse resp, - object? body, - string output - ) + public async Task SendResponse(MongoId sessionID, HttpRequest req, HttpResponse resp, object? body, string output) { body ??= new object(); @@ -197,14 +184,8 @@ public class SptHttpListener( // Route doesn't exist or response is not properly set up if (string.IsNullOrEmpty(output)) { - _logger.Error( - _serverLocalisationService.GetText("unhandled_response", req.Path.ToString()) - ); - output = _httpResponseUtil.GetBody( - null, - BackendErrorCodes.HTTPNotFound, - $"UNHANDLED RESPONSE: {req.Path.ToString()}" - ); + _logger.Error(_serverLocalisationService.GetText("unhandled_response", req.Path.ToString())); + output = _httpResponseUtil.GetBody(null, BackendErrorCodes.HTTPNotFound, $"UNHANDLED RESPONSE: {req.Path.ToString()}"); } if (ProgramStatics.ENTRY_TYPE() != EntryType.RELEASE) diff --git a/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs b/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs index 77ee5510..b66dba44 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs @@ -50,9 +50,7 @@ public class HttpServer( try { - var listener = _httpListeners.FirstOrDefault(l => - l.CanHandle(sessionId, context.Request) - ); + var listener = _httpListeners.FirstOrDefault(l => l.CanHandle(sessionId, context.Request)); if (listener != null) { @@ -82,18 +80,11 @@ public class HttpServer( { if (isLocalRequest) { - _logger.Info( - _serverLocalisationService.GetText("client_request", context.Request.Path.Value) - ); + _logger.Info(_serverLocalisationService.GetText("client_request", context.Request.Path.Value)); } else { - _logger.Info( - _serverLocalisationService.GetText( - "client_request_ip", - new { ip = clientIp, url = context.Request.Path.Value } - ) - ); + _logger.Info(_serverLocalisationService.GetText("client_request_ip", new { ip = clientIp, url = context.Request.Path.Value })); } } @@ -122,9 +113,7 @@ public class HttpServer( return false; } - return remoteAddress.StartsWith("127.0.0") - || remoteAddress.StartsWith("192.168.") - || remoteAddress.StartsWith("localhost"); + return remoteAddress.StartsWith("127.0.0") || remoteAddress.StartsWith("192.168.") || remoteAddress.StartsWith("localhost"); } protected Dictionary GetCookies(HttpRequest req) diff --git a/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs b/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs index 71d016f3..97cfd367 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs @@ -88,11 +88,7 @@ public class RagfairServer( IEnumerable offers ) { - return _ragfairCategoriesService.GetCategoriesFromOffers( - offers, - searchRequestData, - fleaUnlocked - ); + return _ragfairCategoriesService.GetCategoriesFromOffers(offers, searchRequestData, fleaUnlocked); } /// @@ -106,12 +102,7 @@ public class RagfairServer( if (offer is null) { - _logger.Error( - _serverLocalisationService.GetText( - "ragfair-offer_not_found_unable_to_hide", - offerId - ) - ); + _logger.Error(_serverLocalisationService.GetText("ragfair-offer_not_found_unable_to_hide", offerId)); return; } diff --git a/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs b/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs index caa429f7..bf1d5ab7 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs @@ -29,8 +29,7 @@ public class SaveServer( protected const string profileFilepath = "user/profiles/"; // onLoad = require("../bindings/SaveLoad"); - protected readonly Dictionary> onBeforeSaveCallbacks = - new(); + protected readonly Dictionary> onBeforeSaveCallbacks = new(); protected readonly ConcurrentDictionary profiles = new(); protected readonly ConcurrentDictionary saveMd5 = new(); @@ -65,9 +64,7 @@ public class SaveServer( fileUtil.CreateDirectory(profileFilepath); } - var files = fileUtil - .GetFiles(profileFilepath) - .Where(item => fileUtil.GetFileExtension(item) == "json"); + var files = fileUtil.GetFiles(profileFilepath).Where(item => fileUtil.GetFileExtension(item) == "json"); // load profiles var stopwatch = Stopwatch.StartNew(); @@ -79,9 +76,7 @@ public class SaveServer( stopwatch.Stop(); if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"{files.Count()} Profiles took: {stopwatch.ElapsedMilliseconds}ms to load." - ); + logger.Debug($"{files.Count()} Profiles took: {stopwatch.ElapsedMilliseconds}ms to load."); } } @@ -113,9 +108,7 @@ public class SaveServer( { if (sessionId.IsEmpty()) { - throw new Exception( - "session id provided was empty, did you restart the server while the game was running?" - ); + throw new Exception("session id provided was empty, did you restart the server while the game was running?"); } if (profiles == null || profiles.IsEmpty) @@ -179,9 +172,7 @@ public class SaveServer( if (profiles.ContainsKey(profileInfo.ProfileId.Value)) { // TODO: Localize me - throw new Exception( - $"Creating profile failed: profile already exists for sessionId: {profileInfo.ProfileId}" - ); + throw new Exception($"Creating profile failed: profile already exists for sessionId: {profileInfo.ProfileId}"); } profiles.TryAdd( @@ -189,11 +180,7 @@ public class SaveServer( new SptProfile { ProfileInfo = profileInfo, - CharacterData = new Characters - { - PmcData = new PmcData(), - ScavData = new PmcData(), - }, + CharacterData = new Characters { PmcData = new PmcData(), ScavData = new PmcData() }, } ); } @@ -254,21 +241,13 @@ public class SaveServer( } catch (Exception e) { - logger.Error( - serverLocalisationService.GetText( - "profile_save_callback_error", - new { callback, error = e } - ) - ); + logger.Error(serverLocalisationService.GetText("profile_save_callback_error", new { callback, error = e })); profiles[sessionID] = previous; } } var start = Stopwatch.StartNew(); - var jsonProfile = jsonUtil.Serialize( - profiles[sessionID], - !configServer.GetConfig().Features.CompressProfile - ); + var jsonProfile = jsonUtil.Serialize(profiles[sessionID], !configServer.GetConfig().Features.CompressProfile); var fmd5 = await hashUtil.GenerateHashForDataAsync(HashingAlgorithm.MD5, jsonProfile); if (!saveMd5.TryGetValue(sessionID, out var currentMd5) || currentMd5 != fmd5) { diff --git a/Libraries/SPTarkov.Server.Core/Servers/WebSocketServer.cs b/Libraries/SPTarkov.Server.Core/Servers/WebSocketServer.cs index 9bfa7499..6e3d1ce4 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/WebSocketServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/WebSocketServer.cs @@ -8,10 +8,7 @@ using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel; namespace SPTarkov.Server.Core.Servers; [Injectable(InjectionType.Singleton)] -public class WebSocketServer( - IEnumerable _webSocketConnectionHandler, - ISptLogger _logger -) +public class WebSocketServer(IEnumerable _webSocketConnectionHandler, ISptLogger _logger) { public async Task OnConnection(HttpContext httpContext) { @@ -21,9 +18,7 @@ public class WebSocketServer( private async Task HandleWebSocket(HttpContext context, WebSocket webSocket) { - var socketHandlers = _webSocketConnectionHandler.Where(wsh => - context.Request.Path.Value.Contains(wsh.GetHookUrl()) - ); + var socketHandlers = _webSocketConnectionHandler.Where(wsh => context.Request.Path.Value.Contains(wsh.GetHookUrl())); var cts = new CancellationTokenSource(); var wsToken = cts.Token; @@ -33,11 +28,7 @@ public class WebSocketServer( var message = $"Socket connection received for url {context.Request.Path.Value}, but there is no websocket handler configured for it!"; _logger.Debug(message); - await webSocket.CloseAsync( - WebSocketCloseStatus.ProtocolError, - message, - CancellationToken.None - ); + await webSocket.CloseAsync(WebSocketCloseStatus.ProtocolError, message, CancellationToken.None); return; } @@ -45,9 +36,7 @@ public class WebSocketServer( if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"[WS] Notifying handlers of new websocket connection opening with reference {webSocketIdContext}" - ); + _logger.Debug($"[WS] Notifying handlers of new websocket connection opening with reference {webSocketIdContext}"); } foreach (var wsh in socketHandlers) @@ -88,8 +77,7 @@ public class WebSocketServer( catch (WebSocketException wsException) { if ( - wsException.WebSocketErrorCode - == WebSocketError.ConnectionClosedPrematurely + wsException.WebSocketErrorCode == WebSocketError.ConnectionClosedPrematurely || webSocket.State == WebSocketState.Aborted || webSocket.State == WebSocketState.Closed ) @@ -110,14 +98,8 @@ public class WebSocketServer( // If this is not handled an exception is thrown on the client if (result.MessageType == WebSocketMessageType.Close) { - _logger.Debug( - $"[WS] WebSocket reference {webSocketIdContext} sent close frame, stopping." - ); - await webSocket.CloseOutputAsync( - WebSocketCloseStatus.NormalClosure, - "Closing..", - wsToken - ); + _logger.Debug($"[WS] WebSocket reference {webSocketIdContext} sent close frame, stopping."); + await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "Closing..", wsToken); socketClosing = true; break; } @@ -137,12 +119,7 @@ public class WebSocketServer( foreach (var wsh in socketHandlers) { - await wsh.OnMessage( - message, - WebSocketMessageType.Text, - webSocket, - context - ); + await wsh.OnMessage(message, WebSocketMessageType.Text, webSocket, context); } messageBuffer.Clear(); @@ -175,9 +152,7 @@ public class WebSocketServer( if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"[WS] State for websocket reference {webSocketIdContext} is now {webSocket.State}, closing" - ); + _logger.Debug($"[WS] State for websocket reference {webSocketIdContext} is now {webSocket.State}, closing"); } // Disconnect has been received, cancel the token and send OnClose to the relevant WebSockets. @@ -187,9 +162,7 @@ public class WebSocketServer( if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"[WS] OnClose for websocket reference {webSocketIdContext} requested" - ); + _logger.Debug($"[WS] OnClose for websocket reference {webSocketIdContext} requested"); } await wsh.OnClose(webSocket, context, webSocketIdContext); diff --git a/Libraries/SPTarkov.Server.Core/Servers/Ws/IWebSocketConnectionHandler.cs b/Libraries/SPTarkov.Server.Core/Servers/Ws/IWebSocketConnectionHandler.cs index 3fe82192..660d052b 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Ws/IWebSocketConnectionHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Ws/IWebSocketConnectionHandler.cs @@ -8,12 +8,7 @@ public interface IWebSocketConnectionHandler string GetHookUrl(); string GetSocketId(); Task OnConnection(WebSocket ws, HttpContext context, string sessionIdContext); - Task OnMessage( - byte[] rawData, - WebSocketMessageType messageType, - WebSocket ws, - HttpContext context - ); + Task OnMessage(byte[] rawData, WebSocketMessageType messageType, WebSocket ws, HttpContext context); /// /// OnClose event of a WebSocket, it should already be assumed here that the WebSocket is closed. diff --git a/Libraries/SPTarkov.Server.Core/Servers/Ws/Message/DefaultSptWebSocketMessageHandler.cs b/Libraries/SPTarkov.Server.Core/Servers/Ws/Message/DefaultSptWebSocketMessageHandler.cs index cd182821..c760f166 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Ws/Message/DefaultSptWebSocketMessageHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Ws/Message/DefaultSptWebSocketMessageHandler.cs @@ -6,9 +6,7 @@ using SPTarkov.Server.Core.Models.Utils; namespace SPTarkov.Server.Core.Servers.Ws.Message; [Injectable] -public class DefaultSptWebSocketMessageHandler( - ISptLogger _logger -) : ISptWebSocketMessageHandler +public class DefaultSptWebSocketMessageHandler(ISptLogger _logger) : ISptWebSocketMessageHandler { public async Task OnSptMessage(string sessionID, WebSocket client, byte[] rawData) { diff --git a/Libraries/SPTarkov.Server.Core/Servers/Ws/SptWebSocketConnectionHandler.cs b/Libraries/SPTarkov.Server.Core/Servers/Ws/SptWebSocketConnectionHandler.cs index ec24e22d..26f81e24 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Ws/SptWebSocketConnectionHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Ws/SptWebSocketConnectionHandler.cs @@ -42,9 +42,7 @@ public class SptWebSocketConnectionHandler( var playerInfoText = $"{playerProfile.ProfileInfo.Username} ({sessionID})"; if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"[WS] Websocket connect for player {playerInfoText} started with context {sessionIdContext}" - ); + _logger.Debug($"[WS] Websocket connect for player {playerInfoText} started with context {sessionIdContext}"); } lock (_socketsLock) @@ -85,20 +83,13 @@ public class SptWebSocketConnectionHandler( } } - public async Task OnMessage( - byte[] receivedMessage, - WebSocketMessageType messageType, - WebSocket ws, - HttpContext context - ) + public async Task OnMessage(byte[] receivedMessage, WebSocketMessageType messageType, WebSocket ws, HttpContext context) { var splitUrl = context.Request.Path.Value.Split("/"); var sessionID = splitUrl.Last(); if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"[WS] Message for session {sessionID} received. Notifying message handlers." - ); + _logger.Debug($"[WS] Message for session {sessionID} received. Notifying message handlers."); } foreach (var sptWebSocketMessageHandler in _messageHandlers) @@ -116,24 +107,17 @@ public class SptWebSocketConnectionHandler( { if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Attempting to close websocket session {sessionID} with context {sessionIdContext}" - ); + _logger.Debug($"Attempting to close websocket session {sessionID} with context {sessionIdContext}"); } if (_sockets.TryGetValue(sessionID, out var sessionSockets) && sessionSockets.Any()) { if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Websockets for session {sessionID} entry matched, attempting to find context {sessionIdContext}" - ); + _logger.Debug($"Websockets for session {sessionID} entry matched, attempting to find context {sessionIdContext}"); } - if ( - !sessionSockets.TryGetValue(sessionIdContext, out _) - && _logger.IsLogEnabled(LogLevel.Info) - ) + if (!sessionSockets.TryGetValue(sessionIdContext, out _) && _logger.IsLogEnabled(LogLevel.Info)) { _logger.Info( $"[ws] The websocket session {sessionID} with reference: {sessionIdContext} has already been removed or reconnected" @@ -146,9 +130,7 @@ public class SptWebSocketConnectionHandler( { var playerProfile = _profileHelper.GetFullProfile(sessionID); var playerInfoText = $"{playerProfile.ProfileInfo.Username} ({sessionID})"; - _logger.Info( - $"[ws] player: {playerInfoText} {sessionIdContext} has disconnected" - ); + _logger.Info($"[ws] player: {playerInfoText} {sessionIdContext} has disconnected"); } } } @@ -185,9 +167,7 @@ public class SptWebSocketConnectionHandler( if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"Send message for {sessionID} matched {webSockets.Count()} websockets. Messages being sent" - ); + _logger.Debug($"Send message for {sessionID} matched {webSockets.Count()} websockets. Messages being sent"); } foreach (var webSocket in webSockets) @@ -219,21 +199,13 @@ public class SptWebSocketConnectionHandler( { if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - _serverLocalisationService.GetText( - "websocket-not_ready_message_not_sent", - sessionID - ) - ); + _logger.Debug(_serverLocalisationService.GetText("websocket-not_ready_message_not_sent", sessionID)); } } } catch (Exception err) { - _logger.Error( - _serverLocalisationService.GetText("websocket-message_send_failed_with_error"), - err - ); + _logger.Error(_serverLocalisationService.GetText("websocket-message_send_failed_with_error"), err); } } @@ -241,8 +213,7 @@ public class SptWebSocketConnectionHandler( { lock (_socketsLock) { - return _sockets.TryGetValue(sessionID, out var sockets) - && sockets.Any(s => s.Value.State == WebSocketState.Open); + return _sockets.TryGetValue(sessionID, out var sockets) && sockets.Any(s => s.Value.State == WebSocketState.Open); } } @@ -250,9 +221,7 @@ public class SptWebSocketConnectionHandler( { lock (_socketsLock) { - return _sockets - .GetValueOrDefault(sessionID) - ?.Values.Where(s => s.State == WebSocketState.Open) ?? []; + return _sockets.GetValueOrDefault(sessionID)?.Values.Where(s => s.State == WebSocketState.Open) ?? []; } } } diff --git a/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs b/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs index 3ab1c736..aebe9dfa 100644 --- a/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs @@ -30,23 +30,13 @@ public class AirdropService( public GetAirdropLootResponse GenerateCustomAirdropLoot(GetAirdropLootRequest request) { - if ( - _airdropConfig.CustomAirdropMapping.TryGetValue( - request.ContainerId, - out var customAirdropInformation - ) - ) + if (_airdropConfig.CustomAirdropMapping.TryGetValue(request.ContainerId, out var customAirdropInformation)) { // Found container id, generate specific loot return GenerateAirdropLoot(customAirdropInformation); } - _logger.Warning( - _serverLocalisationService.GetText( - "airdrop-unable_to_find_container_id_generating_random", - request.ContainerId - ) - ); + _logger.Warning(_serverLocalisationService.GetText("airdrop-unable_to_find_container_id_generating_random", request.ContainerId)); return GenerateAirdropLoot(); } @@ -101,11 +91,7 @@ public class AirdropService( } } - return new GetAirdropLootResponse - { - Icon = airdropConfig.Icon.Value, - Container = containerWithLoot, - }; + return new GetAirdropLootResponse { Icon = airdropConfig.Icon.Value, Container = containerWithLoot }; } /// @@ -114,10 +100,7 @@ public class AirdropService( /// Crate item to fit items into /// Item pool to try and fit into container /// Items that will fit container - protected IEnumerable> GetLootThatFitsContainer( - Item container, - IEnumerable> crateLootPool - ) + protected IEnumerable> GetLootThatFitsContainer(Item container, IEnumerable> crateLootPool) { // list of root item + children in list var lootResult = new List>(); @@ -195,8 +178,7 @@ public class AirdropService( airdropContainer.Template = ItemTpl.LOOTCONTAINER_AIRDROP_COMMON_SUPPLY_CRATE; break; case SptAirdropTypeEnum.radar: - airdropContainer.Template = - ItemTpl.LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_1; + airdropContainer.Template = ItemTpl.LOOTCONTAINER_AIRDROP_TECHNICAL_SUPPLY_CRATE_EVENT_1; break; default: airdropContainer.Template = ItemTpl.LOOTCONTAINER_AIRDROP_COMMON_SUPPLY_CRATE; @@ -226,12 +208,7 @@ public class AirdropService( { if (!_airdropConfig.Loot.TryGetValue(airdropType.ToString(), out var lootSettingsByType)) { - _logger.Error( - _serverLocalisationService.GetText( - "location-unable_to_find_airdrop_drop_config_of_type", - airdropType - ) - ); + _logger.Error(_serverLocalisationService.GetText("location-unable_to_find_airdrop_drop_config_of_type", airdropType)); // TODO: Get Radar airdrop to work. Atm Radar will default to common supply drop (mixed) // Default to common diff --git a/Libraries/SPTarkov.Server.Core/Services/BackupService.cs b/Libraries/SPTarkov.Server.Core/Services/BackupService.cs index 52837b7c..f1673183 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BackupService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BackupService.cs @@ -97,9 +97,7 @@ public class BackupService } catch (Exception ex) { - _logger.Debug( - $"Skipping profile backup: Unable to read profiles directory, {ex.Message}" - ); + _logger.Debug($"Skipping profile backup: Unable to read profiles directory, {ex.Message}"); return; } @@ -127,17 +125,12 @@ public class BackupService var absoluteDestinationFilePath = Path.Combine(targetDir, profileFileName); if (!_fileUtil.CopyFile(relativeSourceFilePath, absoluteDestinationFilePath)) { - _logger.Error( - $"Source file not found: {relativeSourceFilePath}. Cannot copy to: {absoluteDestinationFilePath}" - ); + _logger.Error($"Source file not found: {relativeSourceFilePath}. Cannot copy to: {absoluteDestinationFilePath}"); } } // Write a copy of active mods. - await _fileUtil.WriteFileAsync( - Path.Combine(targetDir, "activeMods.json"), - _jsonUtil.Serialize(_activeServerMods) - ); + await _fileUtil.WriteFileAsync(Path.Combine(targetDir, "activeMods.json"), _jsonUtil.Serialize(_activeServerMods)); if (_logger.IsLogEnabled(LogLevel.Debug)) { @@ -212,9 +205,7 @@ public class BackupService } } - protected SortedDictionary GetBackupPathsWithCreationTimestamp( - IEnumerable backupPaths - ) + protected SortedDictionary GetBackupPathsWithCreationTimestamp(IEnumerable backupPaths) { var result = new SortedDictionary(); foreach (var backupPath in backupPaths) @@ -273,15 +264,7 @@ public class BackupService var folderName = Path.GetFileName(folderPath); const string format = "yyyy-MM-dd_HH-mm-ss"; - if ( - DateTime.TryParseExact( - folderName, - format, - CultureInfo.InvariantCulture, - DateTimeStyles.None, - out var dateTime - ) - ) + if (DateTime.TryParseExact(folderName, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dateTime)) { return dateTime; } diff --git a/Libraries/SPTarkov.Server.Core/Services/BotEquipmentFilterService.cs b/Libraries/SPTarkov.Server.Core/Services/BotEquipmentFilterService.cs index bcf03405..cb9db73a 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotEquipmentFilterService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotEquipmentFilterService.cs @@ -21,9 +21,7 @@ public class BotEquipmentFilterService( ) { protected readonly BotConfig _botConfig = configServer.GetConfig(); - protected readonly Dictionary _botEquipmentConfig = configServer - .GetConfig() - .Equipment; + protected readonly Dictionary _botEquipmentConfig = configServer.GetConfig().Equipment; /// /// Filter a bots data to exclude equipment and cartridges defines in the botConfig @@ -32,12 +30,7 @@ public class BotEquipmentFilterService( /// bots json data to filter /// Level of the bot /// details on how to generate a bot - public void FilterBotEquipment( - MongoId sessionId, - BotType baseBotNode, - int botLevel, - BotGenerationDetails botGenerationDetails - ) + public void FilterBotEquipment(MongoId sessionId, BotType baseBotNode, int botLevel, BotGenerationDetails botGenerationDetails) { var pmcProfile = profileHelper.GetPmcProfile(sessionId); @@ -45,18 +38,12 @@ public class BotEquipmentFilterService( var botEquipmentBlacklist = GetBotEquipmentBlacklist(botRole, botLevel); var botEquipmentWhitelist = GetBotEquipmentWhitelist(botRole, botLevel); var botWeightingAdjustments = GetBotWeightingAdjustments(botRole, botLevel); - var botWeightingAdjustmentsByPlayerLevel = GetBotWeightingAdjustmentsByPlayerLevel( - botRole, - pmcProfile?.Info?.Level ?? 1 - ); + var botWeightingAdjustmentsByPlayerLevel = GetBotWeightingAdjustmentsByPlayerLevel(botRole, pmcProfile?.Info?.Level ?? 1); RandomisationDetails? randomisationDetails = null; if (_botEquipmentConfig.TryGetValue(botRole.ToLowerInvariant(), out var botEquipmentConfig)) { - randomisationDetails = botHelper.GetBotRandomizationDetails( - botLevel, - botEquipmentConfig - ); + randomisationDetails = botHelper.GetBotRandomizationDetails(botLevel, botEquipmentConfig); } if (botEquipmentBlacklist is not null || botEquipmentWhitelist is not null) @@ -76,27 +63,15 @@ public class BotEquipmentFilterService( if (botWeightingAdjustmentsByPlayerLevel is not null) { - AdjustWeighting( - botWeightingAdjustmentsByPlayerLevel.Equipment, - baseBotNode.BotInventory.Equipment - ); - AdjustWeighting( - botWeightingAdjustmentsByPlayerLevel.Ammo, - baseBotNode.BotInventory.Ammo - ); + AdjustWeighting(botWeightingAdjustmentsByPlayerLevel.Equipment, baseBotNode.BotInventory.Equipment); + AdjustWeighting(botWeightingAdjustmentsByPlayerLevel.Ammo, baseBotNode.BotInventory.Ammo); } if (randomisationDetails is not null) { AdjustChances(randomisationDetails.Equipment, baseBotNode.BotChances.EquipmentChances); - AdjustChances( - randomisationDetails.WeaponMods, - baseBotNode.BotChances.WeaponModsChances - ); - AdjustChances( - randomisationDetails.EquipmentMods, - baseBotNode.BotChances.EquipmentModsChances - ); + AdjustChances(randomisationDetails.WeaponMods, baseBotNode.BotChances.WeaponModsChances); + AdjustChances(randomisationDetails.EquipmentMods, baseBotNode.BotChances.EquipmentModsChances); AdjustGenerationChances(randomisationDetails.Generation, baseBotNode.BotGeneration); } } @@ -106,10 +81,7 @@ public class BotEquipmentFilterService( /// /// Changes to apply /// data to update - protected void AdjustChances( - Dictionary equipmentChanges, - Dictionary baseValues - ) + protected void AdjustChances(Dictionary equipmentChanges, Dictionary baseValues) { if (equipmentChanges is null) { @@ -127,10 +99,7 @@ public class BotEquipmentFilterService( /// /// Changes to apply /// dictionary to update - protected void AdjustGenerationChances( - Dictionary generationChanges, - Generation baseBotGeneration - ) + protected void AdjustGenerationChances(Dictionary generationChanges, Generation baseBotGeneration) { if (generationChanges is null) { @@ -139,10 +108,12 @@ public class BotEquipmentFilterService( foreach (var itemKey in generationChanges) { - baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Weights = - generationChanges.GetValueOrDefault(itemKey.Key).Weights; - baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Whitelist = - generationChanges.GetValueOrDefault(itemKey.Key).Whitelist; + baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Weights = generationChanges + .GetValueOrDefault(itemKey.Key) + .Weights; + baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Whitelist = generationChanges + .GetValueOrDefault(itemKey.Key) + .Whitelist; } } @@ -161,9 +132,7 @@ public class BotEquipmentFilterService( /// /// equipment role of bot to look up /// Dictionary of weapon type and their whitelisted scope types - public Dictionary>? GetBotWeaponSightWhitelist( - string botEquipmentRole - ) + public Dictionary>? GetBotWeaponSightWhitelist(string botEquipmentRole) { return _botConfig.Equipment.TryGetValue(botEquipmentRole, out var botEquipmentSettings) ? botEquipmentSettings.WeaponSightWhitelist @@ -181,8 +150,7 @@ public class BotEquipmentFilterService( var blacklistDetailsForBot = _botEquipmentConfig.GetValueOrDefault(botRole, null); return (blacklistDetailsForBot?.Blacklist ?? []).FirstOrDefault(equipmentFilter => - playerLevel >= equipmentFilter.LevelRange.Min - && playerLevel <= equipmentFilter.LevelRange.Max + playerLevel >= equipmentFilter.LevelRange.Min && playerLevel <= equipmentFilter.LevelRange.Max ); } @@ -197,8 +165,7 @@ public class BotEquipmentFilterService( var whitelistDetailsForBot = _botEquipmentConfig.GetValueOrDefault(botRole, null); return (whitelistDetailsForBot?.Whitelist ?? []).FirstOrDefault(equipmentFilter => - playerLevel >= equipmentFilter.LevelRange.Min - && playerLevel <= equipmentFilter.LevelRange.Max + playerLevel >= equipmentFilter.LevelRange.Min && playerLevel <= equipmentFilter.LevelRange.Max ); } @@ -223,10 +190,7 @@ public class BotEquipmentFilterService( /// Bot type to get adjustments for /// Level of bot /// Weighting adjustments for bot items - protected WeightingAdjustmentDetails? GetBotWeightingAdjustmentsByPlayerLevel( - string botRole, - int playerLevel - ) + protected WeightingAdjustmentDetails? GetBotWeightingAdjustmentsByPlayerLevel(string botRole, int playerLevel) { var weightingDetailsForBot = _botEquipmentConfig.GetValueOrDefault(botRole, null); @@ -243,11 +207,7 @@ public class BotEquipmentFilterService( /// Equipment blacklist /// Equipment whitelist /// Filtered bot file - protected void FilterEquipment( - BotType baseBotNode, - EquipmentFilterDetails? blacklist, - EquipmentFilterDetails? whitelist - ) + protected void FilterEquipment(BotType baseBotNode, EquipmentFilterDetails? blacklist, EquipmentFilterDetails? whitelist) { if (whitelist is not null) { @@ -256,9 +216,7 @@ public class BotEquipmentFilterService( var botEquipment = baseBotNode.BotInventory.Equipment[equipmentSlotKey.Key]; // Skip equipment slot if whitelist doesn't exist / is empty - var whitelistEquipmentForSlot = whitelist.Equipment[ - equipmentSlotKey.Key.ToString() - ]; + var whitelistEquipmentForSlot = whitelist.Equipment[equipmentSlotKey.Key.ToString()]; if (whitelistEquipmentForSlot is null || whitelistEquipmentForSlot.Count == 0) { continue; @@ -270,8 +228,7 @@ public class BotEquipmentFilterService( { if (whitelistEquipmentForSlot.Contains(dict.Key)) { - baseBotNode.BotInventory.Equipment[equipmentSlotKey.Key][dict.Key] = - botEquipment[dict.Key]; + baseBotNode.BotInventory.Equipment[equipmentSlotKey.Key][dict.Key] = botEquipment[dict.Key]; } } } @@ -286,12 +243,7 @@ public class BotEquipmentFilterService( var botEquipment = baseBotNode.BotInventory.Equipment[equipmentSlotKvP.Key]; // Skip equipment slot if blacklist doesn't exist / is empty - if ( - !blacklist.Equipment.TryGetValue( - equipmentSlotKvP.Key.ToString(), - out var equipmentSlotBlacklist - ) - ) + if (!blacklist.Equipment.TryGetValue(equipmentSlotKvP.Key.ToString(), out var equipmentSlotBlacklist)) { continue; } @@ -317,11 +269,7 @@ public class BotEquipmentFilterService( /// equipment on this list should be excluded from the bot /// equipment on this list should be used exclusively /// Filtered bot file - protected void FilterCartridges( - BotType baseBotNode, - EquipmentFilterDetails? blacklist, - EquipmentFilterDetails? whitelist - ) + protected void FilterCartridges(BotType baseBotNode, EquipmentFilterDetails? blacklist, EquipmentFilterDetails? whitelist) { if (whitelist is not null) { @@ -396,9 +344,7 @@ public class BotEquipmentFilterService( { foreach (var poolAdjustmentKvP in weightingAdjustments.Add) { - var locationToUpdate = botItemPool[ - Enum.Parse(poolAdjustmentKvP.Key) - ]; + var locationToUpdate = botItemPool[Enum.Parse(poolAdjustmentKvP.Key)]; foreach (var itemToAddKvP in poolAdjustmentKvP.Value) { locationToUpdate[itemToAddKvP.Key] = itemToAddKvP.Value; @@ -410,16 +356,11 @@ public class BotEquipmentFilterService( { foreach (var poolAdjustmentKvP in weightingAdjustments.Edit) { - var locationToUpdate = botItemPool[ - Enum.Parse(poolAdjustmentKvP.Key) - ]; + var locationToUpdate = botItemPool[Enum.Parse(poolAdjustmentKvP.Key)]; foreach (var itemToEditKvP in poolAdjustmentKvP.Value) // Only make change if item exists as we're editing, not adding { - if ( - locationToUpdate[itemToEditKvP.Key] != null - || locationToUpdate[itemToEditKvP.Key] == 0 - ) + if (locationToUpdate[itemToEditKvP.Key] != null || locationToUpdate[itemToEditKvP.Key] == 0) { locationToUpdate[itemToEditKvP.Key] = itemToEditKvP.Value; } @@ -429,9 +370,7 @@ public class BotEquipmentFilterService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Tried to edit a non - existent item for slot: {poolAdjustmentKvP} {itemToEditKvP}" - ); + logger.Debug($"Tried to edit a non - existent item for slot: {poolAdjustmentKvP} {itemToEditKvP}"); } } } @@ -477,10 +416,7 @@ public class BotEquipmentFilterService( foreach (var itemToEditKvP in poolAdjustmentKvP.Value) // Only make change if item exists as we're editing, not adding { - if ( - locationToUpdate.GetValueOrDefault(itemToEditKvP.Key) != null - || locationToUpdate[itemToEditKvP.Key] == 0 - ) + if (locationToUpdate.GetValueOrDefault(itemToEditKvP.Key) != null || locationToUpdate[itemToEditKvP.Key] == 0) { locationToUpdate[itemToEditKvP.Key] = itemToEditKvP.Value; } @@ -490,9 +426,7 @@ public class BotEquipmentFilterService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Tried to edit a non - existent item for slot: {poolAdjustmentKvP} {itemToEditKvP}" - ); + logger.Debug($"Tried to edit a non - existent item for slot: {poolAdjustmentKvP} {itemToEditKvP}"); } } } @@ -507,11 +441,7 @@ public class BotEquipmentFilterService( /// Weighting change to apply to bot /// Bot item dictionary to adjust /// When item being adjusted cannot be found at source, show warning message - protected void AdjustWeighting( - AdjustmentDetails? weightingAdjustments, - Appearance botItemPool, - bool showEditWarnings = true - ) + protected void AdjustWeighting(AdjustmentDetails? weightingAdjustments, Appearance botItemPool, bool showEditWarnings = true) { if (weightingAdjustments is null) { @@ -522,9 +452,7 @@ public class BotEquipmentFilterService( { foreach (var poolAdjustmentKvP in weightingAdjustments.Add) { - var locationToUpdate = botItemPool.GetByJsonProp>( - poolAdjustmentKvP.Key - ); + var locationToUpdate = botItemPool.GetByJsonProp>(poolAdjustmentKvP.Key); if (locationToUpdate is null) { continue; @@ -541,9 +469,7 @@ public class BotEquipmentFilterService( { foreach (var poolAdjustmentKvP in weightingAdjustments.Edit) { - var locationToUpdate = botItemPool.GetByJsonProp>( - poolAdjustmentKvP.Key - ); + var locationToUpdate = botItemPool.GetByJsonProp>(poolAdjustmentKvP.Key); if (locationToUpdate is null) { continue; @@ -564,9 +490,7 @@ public class BotEquipmentFilterService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Tried to edit a non - existent item for slot: {poolAdjustmentKvP} {itemToEditKvP}" - ); + logger.Debug($"Tried to edit a non - existent item for slot: {poolAdjustmentKvP} {itemToEditKvP}"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Services/BotEquipmentModPoolService.cs b/Libraries/SPTarkov.Server.Core/Services/BotEquipmentModPoolService.cs index 5f91d927..6ed0d0cf 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotEquipmentModPoolService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotEquipmentModPoolService.cs @@ -20,14 +20,8 @@ public class BotEquipmentModPoolService( { private readonly Lock _lockObject = new(); - private ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - >? _gearModPool; - protected ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - > GearModPool + private ConcurrentDictionary>>? _gearModPool; + protected ConcurrentDictionary>> GearModPool { get { @@ -38,14 +32,8 @@ public class BotEquipmentModPoolService( } } - private ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - >? _weaponModPool; - protected ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - > WeaponModPool + private ConcurrentDictionary>>? _weaponModPool; + protected ConcurrentDictionary>> WeaponModPool { get { @@ -61,32 +49,24 @@ public class BotEquipmentModPoolService( /// /// Items to find related mods and store in modPool /// Mod pool to choose from e.g. "weapon" for weaponModPool - protected ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - > GeneratePool(IEnumerable? inputItems, string poolType) + protected ConcurrentDictionary>> GeneratePool( + IEnumerable? inputItems, + string poolType + ) { if (inputItems is null || !inputItems.Any()) { - logger.Error( - localisationService.GetText("bot-unable_to_generate_item_pool_no_items", poolType) - ); + logger.Error(localisationService.GetText("bot-unable_to_generate_item_pool_no_items", poolType)); return []; } - var pool = - new ConcurrentDictionary>>(); + var pool = new ConcurrentDictionary>>(); foreach (var item in inputItems) { if (item.Properties is null) { - logger.Error( - localisationService.GetText( - "bot-item_missing_props_property", - new { itemTpl = item.Id, name = item.Name } - ) - ); + logger.Error(localisationService.GetText("bot-item_missing_props_property", new { itemTpl = item.Id, name = item.Name })); continue; } @@ -122,9 +102,7 @@ public class BotEquipmentModPoolService( } var subItemDetails = itemHelper.GetItem(itemToAddTpl).Value; - var hasSubItemsToAdd = - subItemDetails.Properties?.Slots is not null - && subItemDetails.Properties.Slots.Any(); + var hasSubItemsToAdd = subItemDetails.Properties?.Slots is not null && subItemDetails.Properties.Slots.Any(); // Item has Slots + pool doesn't have value if (hasSubItemsToAdd && !pool.ContainsKey(subItemDetails.Id)) @@ -155,10 +133,7 @@ public class BotEquipmentModPoolService( } } - private bool InitSetInDict( - ConcurrentDictionary> dictionary, - string slotName - ) + private bool InitSetInDict(ConcurrentDictionary> dictionary, string slotName) { lock (_lockObject) { @@ -228,11 +203,7 @@ public class BotEquipmentModPoolService( if (itemDb.Properties?.Slots is not null) // Loop over slots flagged as 'required' { - foreach ( - var slot in itemDb.Properties.Slots.Where(slot => - slot.Required.GetValueOrDefault(false) - ) - ) + foreach (var slot in itemDb.Properties.Slots.Where(slot => slot.Required.GetValueOrDefault(false))) { // Create dict entry for mod slot result.TryAdd(slot.Name, []); @@ -251,10 +222,7 @@ public class BotEquipmentModPoolService( /// /// Create weapon mod pool and set generated flag to true /// - protected ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - > GenerateWeaponPool() + protected ConcurrentDictionary>> GenerateWeaponPool() { var weaponsAndMods = databaseService .GetItems() @@ -269,10 +237,7 @@ public class BotEquipmentModPoolService( /// /// Create gear mod pool and set generated flag to true /// - protected ConcurrentDictionary< - MongoId, - ConcurrentDictionary> - > GenerateGearPool() + protected ConcurrentDictionary>> GenerateGearPool() { var gearAndMods = databaseService .GetItems() @@ -280,13 +245,7 @@ public class BotEquipmentModPoolService( string.Equals(item.Type, "Item", StringComparison.OrdinalIgnoreCase) && itemHelper.IsOfBaseclasses( item.Id, - [ - BaseClasses.ARMORED_EQUIPMENT, - BaseClasses.VEST, - BaseClasses.ARMOR, - BaseClasses.HEADWEAR, - BaseClasses.MOD, - ] + [BaseClasses.ARMORED_EQUIPMENT, BaseClasses.VEST, BaseClasses.ARMOR, BaseClasses.HEADWEAR, BaseClasses.MOD] ) ); diff --git a/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs b/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs index 62e1ae49..3807ea82 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotLootCacheService.cs @@ -232,10 +232,7 @@ public class BotLootCacheService( } // If pool has items and items were going into a non-secure container pool, add to combined - if ( - itemPool.Count > 0 - && !containerType.Equals("securedcontainer", StringComparison.OrdinalIgnoreCase) - ) + if (itemPool.Count > 0 && !containerType.Equals("securedcontainer", StringComparison.OrdinalIgnoreCase)) { // fill up 'combined' pool of all loot AddItemsToPool(combinedLootPool, itemPool); @@ -243,21 +240,14 @@ public class BotLootCacheService( } // Assign whitelisted special items to bot if any exist - var (specialLootItems, addSpecialLootItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.SpecialItems?.Whitelist - ); + var (specialLootItems, addSpecialLootItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.SpecialItems?.Whitelist); if (addSpecialLootItems) // key = tpl, value = weight { // No whitelist, find and assign from combined item pool foreach (var itemKvP in specialLootPool) { var itemTemplate = itemHelper.GetItem(itemKvP.Key).Value; - if ( - !( - IsBulletOrGrenade(itemTemplate.Properties) - || IsMagazine(itemTemplate.Properties) - ) - ) + if (!(IsBulletOrGrenade(itemTemplate.Properties) || IsMagazine(itemTemplate.Properties))) { lock (_specialLock) { @@ -267,27 +257,13 @@ public class BotLootCacheService( } } - var (healingItemsInWhitelist, addHealingItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Healing?.Whitelist - ); - var (drugItemsInWhitelist, addDrugItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Drugs?.Whitelist - ); - var (foodItemsInWhitelist, addFoodItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Food?.Whitelist - ); - var (drinkItemsInWhitelist, addDrinkItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Food?.Whitelist - ); - var (currencyItemsInWhitelist, addCurrencyItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Currency?.Whitelist - ); - var (stimItemsInWhitelist, addStimItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Stims?.Whitelist - ); - var (grenadeItemsInWhitelist, addGrenadeItems) = GetGenerationWeights( - botJsonTemplate.BotGeneration?.Items?.Grenades?.Whitelist - ); + var (healingItemsInWhitelist, addHealingItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Healing?.Whitelist); + var (drugItemsInWhitelist, addDrugItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Drugs?.Whitelist); + var (foodItemsInWhitelist, addFoodItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Food?.Whitelist); + var (drinkItemsInWhitelist, addDrinkItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Food?.Whitelist); + var (currencyItemsInWhitelist, addCurrencyItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Currency?.Whitelist); + var (stimItemsInWhitelist, addStimItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Stims?.Whitelist); + var (grenadeItemsInWhitelist, addGrenadeItems) = GetGenerationWeights(botJsonTemplate.BotGeneration?.Items?.Grenades?.Whitelist); foreach (var itemKvP in combinedLootPool) { @@ -315,10 +291,7 @@ public class BotLootCacheService( if (addDrugItems) { - if ( - itemTemplate.Parent == BaseClasses.DRUGS - && IsMedicalItem(itemTemplate.Properties) - ) + if (itemTemplate.Parent == BaseClasses.DRUGS && IsMedicalItem(itemTemplate.Properties)) { lock (_drugLock) { @@ -362,10 +335,7 @@ public class BotLootCacheService( if (addStimItems) { - if ( - itemTemplate.Parent == BaseClasses.STIMULATOR - && IsMedicalItem(itemTemplate.Properties) - ) + if (itemTemplate.Parent == BaseClasses.STIMULATOR && IsMedicalItem(itemTemplate.Properties)) { lock (_stimLock) { @@ -445,8 +415,7 @@ public class BotLootCacheService( // Get secure loot (excluding magazines, bullets) var filteredSecureLoot = FilterItemPool( secureLootPool, - (itemTemplate) => - IsBulletOrGrenade(itemTemplate.Properties) || IsMagazine(itemTemplate.Properties) + (itemTemplate) => IsBulletOrGrenade(itemTemplate.Properties) || IsMagazine(itemTemplate.Properties) ); if (!_lootCache.TryGetValue(botRole, out var cacheForRole)) @@ -476,10 +445,7 @@ public class BotLootCacheService( /// Pool to filter /// Delegate to filter pool by /// - protected Dictionary FilterItemPool( - Dictionary lootPool, - Func shouldBeSkipped - ) + protected Dictionary FilterItemPool(Dictionary lootPool, Func shouldBeSkipped) { var filteredItems = new Dictionary(); foreach (var (itemTpl, itemWeight) in lootPool) @@ -506,10 +472,7 @@ public class BotLootCacheService( ///
/// Weights to return /// Dictionary and should pool be hydrated by items in combined loot pool - protected static ( - Dictionary, - bool populateFromCombinedPool - ) GetGenerationWeights(Dictionary? weights) + protected static (Dictionary, bool populateFromCombinedPool) GetGenerationWeights(Dictionary? weights) { var result = weights ?? []; return (result, !result.Any()); // empty dict = should be populated from combined pool @@ -521,10 +484,7 @@ public class BotLootCacheService( ///
/// Dictionary to add item to /// Dictionary of items to add - protected void AddItemsToPool( - Dictionary poolToAddTo, - Dictionary poolOfItemsToAdd - ) + protected void AddItemsToPool(Dictionary poolToAddTo, Dictionary poolOfItemsToAdd) { foreach (var (tpl, weight) in poolOfItemsToAdd) { diff --git a/Libraries/SPTarkov.Server.Core/Services/BotNameService.cs b/Libraries/SPTarkov.Server.Core/Services/BotNameService.cs index c5ddadc1..f1e6129a 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotNameService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotNameService.cs @@ -53,8 +53,7 @@ public class BotNameService( var isPmc = botGenerationDetails.IsPmc; // Never show for players - var showTypeInNickname = - !botGenerationDetails.IsPlayerScav && _botConfig.ShowTypeInNickname; + var showTypeInNickname = !botGenerationDetails.IsPlayerScav && _botConfig.ShowTypeInNickname; var roleShouldBeUnique = uniqueRoles?.Contains(botRole.ToLowerInvariant()); var attempts = 0; @@ -62,10 +61,7 @@ public class BotNameService( { // Get bot name with leading/trailing whitespace removed var name = isPmc // Explicit handling of PMCs, all other bots will get "first_name last_name" - ? botHelper.GetPmcNicknameOfMaxLength( - _botConfig.BotNameLengthLimit, - botGenerationDetails.Side - ) + ? botHelper.GetPmcNicknameOfMaxLength(_botConfig.BotNameLengthLimit, botGenerationDetails.Side) : $"{randomUtil.GetArrayValue(botJsonTemplate.FirstNames)} {(botJsonTemplate.LastNames.Any() ? randomUtil.GetArrayValue(botJsonTemplate.LastNames) : "")}"; name = name.Trim(); @@ -79,9 +75,7 @@ public class BotNameService( // Replace pmc bot names with player name + prefix if (botGenerationDetails.IsPmc && botGenerationDetails.AllPmcsHaveSameNameAsPlayer) { - var prefix = serverLocalisationService.GetRandomTextThatMatchesPartialKey( - "pmc-name_prefix_" - ); + var prefix = serverLocalisationService.GetRandomTextThatMatchesPartialKey("pmc-name_prefix_"); name = $"{prefix} {name}"; } @@ -95,8 +89,7 @@ public class BotNameService( if (attempts >= 5) { // 5 attempts to generate a name, pool probably isn't big enough - var genericName = - $"{botGenerationDetails.Side} {randomUtil.GetInt(100000, 999999)}"; + var genericName = $"{botGenerationDetails.Side} {randomUtil.GetInt(100000, 999999)}"; if (logger.IsLogEnabled(LogLevel.Debug)) { logger.Debug( diff --git a/Libraries/SPTarkov.Server.Core/Services/BotWeaponModLimitService.cs b/Libraries/SPTarkov.Server.Core/Services/BotWeaponModLimitService.cs index c3c38b92..e2fa873c 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotWeaponModLimitService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotWeaponModLimitService.cs @@ -12,11 +12,7 @@ using LogLevel = SPTarkov.Server.Core.Models.Spt.Logging.LogLevel; namespace SPTarkov.Server.Core.Services; [Injectable(InjectionType.Singleton)] -public class BotWeaponModLimitService( - ISptLogger logger, - ConfigServer configServer, - ItemHelper itemHelper -) +public class BotWeaponModLimitService(ISptLogger logger, ConfigServer configServer, ItemHelper itemHelper) { protected readonly BotConfig _botConfig = configServer.GetConfig(); @@ -41,12 +37,7 @@ public class BotWeaponModLimitService( ], FlashlightLaser = new ItemCount { Count = 0 }, FlashlightLaserMax = _botConfig.Equipment[botRole]?.WeaponModLimits?.LightLaserLimit, - FlashlightLaserBaseTypes = - [ - BaseClasses.TACTICAL_COMBO, - BaseClasses.FLASHLIGHT, - BaseClasses.PORTABLE_RANGE_FINDER, - ], + FlashlightLaserBaseTypes = [BaseClasses.TACTICAL_COMBO, BaseClasses.FLASHLIGHT, BaseClasses.PORTABLE_RANGE_FINDER], }; } @@ -72,21 +63,14 @@ public class BotWeaponModLimitService( ) { // If mod or mods parent is the NcSTAR MPR45 Backup mount, allow it as it looks cool - if ( - modsParent.Id == ItemTpl.MOUNT_NCSTAR_MPR45_BACKUP - || modTemplate.Id == ItemTpl.MOUNT_NCSTAR_MPR45_BACKUP - ) + if (modsParent.Id == ItemTpl.MOUNT_NCSTAR_MPR45_BACKUP || modTemplate.Id == ItemTpl.MOUNT_NCSTAR_MPR45_BACKUP) { // If weapon already has a longer ranged scope on it, allow ncstar to be spawned if ( weapon.Any(item => itemHelper.IsOfBaseclasses( item.Template, - [ - BaseClasses.ASSAULT_SCOPE, - BaseClasses.OPTIC_SCOPE, - BaseClasses.SPECIAL_SCOPE, - ] + [BaseClasses.ASSAULT_SCOPE, BaseClasses.OPTIC_SCOPE, BaseClasses.SPECIAL_SCOPE] ) ) ) @@ -107,12 +91,7 @@ public class BotWeaponModLimitService( // If mod is a scope , Exit early if (modIsScope) { - return WeaponModLimitReached( - modTemplate.Id, - modLimits.Scope, - modLimits.ScopeMax ?? 0, - botRole - ); + return WeaponModLimitReached(modTemplate.Id, modLimits.Scope, modLimits.ScopeMax ?? 0, botRole); } // Don't allow multiple mounts on a weapon (except when mount is on another mount) @@ -132,18 +111,10 @@ public class BotWeaponModLimitService( } // If mod is a light/laser, return if limit reached - var modIsLightOrLaser = itemHelper.IsOfBaseclasses( - modTemplate.Id, - modLimits.FlashlightLaserBaseTypes - ); + var modIsLightOrLaser = itemHelper.IsOfBaseclasses(modTemplate.Id, modLimits.FlashlightLaserBaseTypes); if (modIsLightOrLaser) { - return WeaponModLimitReached( - modTemplate.Id, - modLimits.FlashlightLaser, - modLimits.FlashlightLaserMax ?? 0, - botRole - ); + return WeaponModLimitReached(modTemplate.Id, modLimits.FlashlightLaser, modLimits.FlashlightLaserMax ?? 0, botRole); } // Mod is a mount that can hold only flashlights ad limit is reached (don't want to add empty mounts if limit is reached) @@ -168,12 +139,7 @@ public class BotWeaponModLimitService( /// mod limit allowed /// role of bot we're checking weapon of /// true if limit reached - protected bool WeaponModLimitReached( - MongoId modTpl, - ItemCount currentCount, - int? maxLimit, - string botRole - ) + protected bool WeaponModLimitReached(MongoId modTpl, ItemCount currentCount, int? maxLimit, string botRole) { // No value or 0 if (maxLimit is null || maxLimit is 0) @@ -186,9 +152,7 @@ public class BotWeaponModLimitService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"[{botRole}] scope limit reached! tried to add {modTpl} but scope count is {currentCount.Count}" - ); + logger.Debug($"[{botRole}] scope limit reached! tried to add {modTpl} but scope count is {currentCount.Count}"); } return true; diff --git a/Libraries/SPTarkov.Server.Core/Services/BtrDeliveryService.cs b/Libraries/SPTarkov.Server.Core/Services/BtrDeliveryService.cs index 6f8b74e0..48e6a814 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BtrDeliveryService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BtrDeliveryService.cs @@ -24,8 +24,7 @@ public class BtrDeliveryService( ServerLocalisationService serverLocalisationService ) { - protected readonly BtrDeliveryConfig _btrDeliveryConfig = - configServer.GetConfig(); + protected readonly BtrDeliveryConfig _btrDeliveryConfig = configServer.GetConfig(); protected readonly TraderConfig _traderConfig = configServer.GetConfig(); protected static readonly List _transferTypes = ["btr", "transit"]; @@ -71,9 +70,7 @@ public class BtrDeliveryService( // Remove any items that were returned by the item delivery, but also insured, from the player's insurance list // This is to stop items being duplicated by being returned from both item delivery and insurance var deliveredItemIds = items.Select(item => item.Id).ToHashSet(); - pmcData.InsuredItems = pmcData - .InsuredItems.Where(insuredItem => !deliveredItemIds.Contains(insuredItem.ItemId.Value)) - .ToList(); + pmcData.InsuredItems = pmcData.InsuredItems.Where(insuredItem => !deliveredItemIds.Contains(insuredItem.ItemId.Value)).ToList(); saveServer.GetProfile(sessionId).BtrDeliveryList ??= []; @@ -95,31 +92,19 @@ public class BtrDeliveryService( var dialogueTemplates = databaseService.GetTrader(Traders.BTR).Dialogue; if (dialogueTemplates is null) { - logger.Error( - serverLocalisationService.GetText( - "inraid-unable_to_deliver_item_no_trader_found", - Traders.BTR - ) - ); + logger.Error(serverLocalisationService.GetText("inraid-unable_to_deliver_item_no_trader_found", Traders.BTR)); return; } if (!dialogueTemplates.TryGetValue("itemsDelivered", out var itemsDelivered)) { - logger.Error( - serverLocalisationService.GetText( - "btr-unable_to_find_items_in_dialog_template", - sessionId - ) - ); + logger.Error(serverLocalisationService.GetText("btr-unable_to_find_items_in_dialog_template", sessionId)); return; } var messageId = randomUtil.GetArrayValue(itemsDelivered); - var messageStoreTime = timeUtil.GetHoursAsSeconds( - _traderConfig.Fence.BtrDeliveryExpireHours - ); + var messageStoreTime = timeUtil.GetHoursAsSeconds(_traderConfig.Fence.BtrDeliveryExpireHours); // Send the items to the player mailSendService.SendLocalisedNpcMessageToPlayer( @@ -140,15 +125,11 @@ public class BtrDeliveryService( public void RemoveBTRDeliveryPackageFromProfile(MongoId sessionId, BtrDelivery delivery) { var profile = saveServer.GetProfile(sessionId); - profile.BtrDeliveryList = profile - .BtrDeliveryList.Where(package => package.Id != delivery.Id) - .ToList(); + profile.BtrDeliveryList = profile.BtrDeliveryList.Where(package => package.Id != delivery.Id).ToList(); if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Removed processed BTR delivery package. Remaining packages: {profile.BtrDeliveryList.Count}" - ); + logger.Debug($"Removed processed BTR delivery package. Remaining packages: {profile.BtrDeliveryList.Count}"); } } @@ -163,9 +144,7 @@ public class BtrDeliveryService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"BTR delivery override used: returning in {_btrDeliveryConfig.ReturnTimeOverrideSeconds} seconds" - ); + logger.Debug($"BTR delivery override used: returning in {_btrDeliveryConfig.ReturnTimeOverrideSeconds} seconds"); } return timeUtil.GetTimeStamp() + _btrDeliveryConfig.ReturnTimeOverrideSeconds; diff --git a/Libraries/SPTarkov.Server.Core/Services/BundleHashCacheService.cs b/Libraries/SPTarkov.Server.Core/Services/BundleHashCacheService.cs index 41a2b76f..f9f37dd7 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BundleHashCacheService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BundleHashCacheService.cs @@ -5,12 +5,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Services; [Injectable(InjectionType.Singleton)] -public class BundleHashCacheService( - ISptLogger logger, - JsonUtil jsonUtil, - HashUtil hashUtil, - FileUtil fileUtil -) +public class BundleHashCacheService(ISptLogger logger, JsonUtil jsonUtil, HashUtil hashUtil, FileUtil fileUtil) { protected const string _bundleHashCachePath = "./user/cache/"; protected const string _cacheName = "bundleHashCache.json"; @@ -35,10 +30,7 @@ public class BundleHashCacheService( Directory.CreateDirectory(_bundleHashCachePath); } - await fileUtil.WriteFileAsync( - Path.Join(_bundleHashCachePath, _cacheName), - jsonUtil.Serialize(_bundleHashes) - ); + await fileUtil.WriteFileAsync(Path.Join(_bundleHashCachePath, _cacheName), jsonUtil.Serialize(_bundleHashes)); logger.Debug($"Bundle: {bundlePath} hash stored in: ${_bundleHashCachePath}"); } diff --git a/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs b/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs index 1c35530d..e49b0697 100644 --- a/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs @@ -74,49 +74,25 @@ public class CircleOfCultistService( } // `cultistRecipes` just has single recipeId - var cultistCraftData = databaseService - .GetHideout() - .Production.CultistRecipes.FirstOrDefault(); + var cultistCraftData = databaseService.GetHideout().Production.CultistRecipes.FirstOrDefault(); var sacrificedItems = GetSacrificedItems(pmcData); - var sacrificedItemCostRoubles = sacrificedItems.Aggregate( - 0D, - (sum, curr) => sum + (itemHelper.GetItemPrice(curr.Template) ?? 0) - ); + var sacrificedItemCostRoubles = sacrificedItems.Aggregate(0D, (sum, curr) => sum + (itemHelper.GetItemPrice(curr.Template) ?? 0)); - var rewardAmountMultiplier = GetRewardAmountMultiplier( - pmcData, - _hideoutConfig.CultistCircle - ); + var rewardAmountMultiplier = GetRewardAmountMultiplier(pmcData, _hideoutConfig.CultistCircle); // Get the rouble amount we generate rewards with from cost of sacrificed items * above multiplier var rewardAmountRoubles = Math.Round(sacrificedItemCostRoubles * rewardAmountMultiplier); // Check if it matches any direct swap recipes - var directRewardsCache = GenerateSacrificedItemsCache( - _hideoutConfig.CultistCircle.DirectRewards - ); - var directRewardSettings = CheckForDirectReward( - sessionId, - sacrificedItems, - directRewardsCache - ); + var directRewardsCache = GenerateSacrificedItemsCache(_hideoutConfig.CultistCircle.DirectRewards); + var directRewardSettings = CheckForDirectReward(sessionId, sacrificedItems, directRewardsCache); var hasDirectReward = directRewardSettings?.Reward.Count > 0; // Get craft time and bonus status - var craftingInfo = GetCircleCraftingInfo( - rewardAmountRoubles, - _hideoutConfig.CultistCircle, - directRewardSettings - ); + var craftingInfo = GetCircleCraftingInfo(rewardAmountRoubles, _hideoutConfig.CultistCircle, directRewardSettings); // Create production in pmc profile - RegisterCircleOfCultistProduction( - sessionId, - pmcData, - cultistCraftData.Id, - sacrificedItems, - craftingInfo.Time - ); + RegisterCircleOfCultistProduction(sessionId, pmcData, cultistCraftData.Id, sacrificedItems, craftingInfo.Time); // Remove sacrificed items from circle inventory foreach (var item in sacrificedItems) @@ -130,32 +106,18 @@ public class CircleOfCultistService( var rewards = hasDirectReward ? GetDirectRewards(sessionId, directRewardSettings, cultistCircleStashId.Value) : GetRewardsWithinBudget( - GetCultistCircleRewardPool( - sessionId, - pmcData, - craftingInfo, - _hideoutConfig.CultistCircle - ), + GetCultistCircleRewardPool(sessionId, pmcData, craftingInfo, _hideoutConfig.CultistCircle), rewardAmountRoubles, cultistCircleStashId.Value, _hideoutConfig.CultistCircle ); // Get the container grid for cultist stash area - var cultistStashDbItem = itemHelper.GetItem( - ItemTpl.HIDEOUTAREACONTAINER_CIRCLEOFCULTISTS_STASH_1 - ); + var cultistStashDbItem = itemHelper.GetItem(ItemTpl.HIDEOUTAREACONTAINER_CIRCLEOFCULTISTS_STASH_1); // Ensure rewards fit into container var containerGrid = inventoryHelper.GetContainerSlotMap(cultistStashDbItem.Value.Id); - AddRewardsToCircleContainer( - sessionId, - pmcData, - rewards, - containerGrid, - cultistCircleStashId.Value, - output - ); + AddRewardsToCircleContainer(sessionId, pmcData, rewards, containerGrid, cultistCircleStashId.Value, output); return output; } @@ -166,10 +128,7 @@ public class CircleOfCultistService( /// Player profile /// Circle config settings /// Reward Amount Multiplier - private double GetRewardAmountMultiplier( - PmcData pmcData, - CultistCircleSettings cultistCircleSettings - ) + private double GetRewardAmountMultiplier(PmcData pmcData, CultistCircleSettings cultistCircleSettings) { // Get a randomised value to multiply the sacrificed rouble cost by var rewardAmountMultiplier = randomUtil.GetDouble( @@ -249,40 +208,28 @@ public class CircleOfCultistService( var random = new Random(); // Get a threshold where sacrificed amount is between thresholds min and max - var matchingThreshold = GetMatchingThreshold( - circleConfig.CraftTimeThresholds, - rewardAmountRoubles - ); + var matchingThreshold = GetMatchingThreshold(circleConfig.CraftTimeThresholds, rewardAmountRoubles); if ( rewardAmountRoubles >= circleConfig.HideoutCraftSacrificeThresholdRub && random.Next(0, 1) <= circleConfig.BonusChanceMultiplier ) { // Sacrifice amount is enough + passed 25% check to get hideout/task rewards - result.Time = - circleConfig.CraftTimeOverride != -1 - ? circleConfig.CraftTimeOverride - : circleConfig.HideoutTaskRewardTimeSeconds; + result.Time = circleConfig.CraftTimeOverride != -1 ? circleConfig.CraftTimeOverride : circleConfig.HideoutTaskRewardTimeSeconds; result.RewardType = CircleRewardType.HIDEOUT_TASK; return result; } // Edge case, check if override exists, Otherwise use matching threshold craft time - result.Time = - circleConfig.CraftTimeOverride != -1 - ? circleConfig.CraftTimeOverride - : matchingThreshold.CraftTimeSeconds; + result.Time = circleConfig.CraftTimeOverride != -1 ? circleConfig.CraftTimeOverride : matchingThreshold.CraftTimeSeconds; result.RewardDetails = matchingThreshold; return result; } - protected CraftTimeThreshold GetMatchingThreshold( - List thresholds, - double rewardAmountRoubles - ) + protected CraftTimeThreshold GetMatchingThreshold(List thresholds, double rewardAmountRoubles) { var matchingThreshold = thresholds.FirstOrDefault(craftThreshold => craftThreshold.Min <= rewardAmountRoubles && craftThreshold.Max >= rewardAmountRoubles @@ -293,18 +240,12 @@ public class CircleOfCultistService( { // None found, use a default logger.Warning( - localisationService.GetText( - "cultistcircle-no_matching_threshhold_found", - new { rewardAmountRoubles = rewardAmountRoubles } - ) + localisationService.GetText("cultistcircle-no_matching_threshhold_found", new { rewardAmountRoubles = rewardAmountRoubles }) ); // Use first threshold value (cheapest) from parameter array, otherwise use 12 hours var firstThreshold = thresholds.FirstOrDefault(); - var craftTime = - firstThreshold?.CraftTimeSeconds > 0 - ? firstThreshold.CraftTimeSeconds - : timeUtil.GetHoursAsSeconds(12); + var craftTime = firstThreshold?.CraftTimeSeconds > 0 ? firstThreshold.CraftTimeSeconds : timeUtil.GetHoursAsSeconds(12); return new CraftTimeThreshold { @@ -325,9 +266,7 @@ public class CircleOfCultistService( protected List GetSacrificedItems(PmcData pmcData) { // Get root items that are in the cultist sacrifice window - var inventoryRootItemsInCultistGrid = pmcData.Inventory.Items.Where(item => - item.SlotId == CircleOfCultistSlotId - ); + var inventoryRootItemsInCultistGrid = pmcData.Inventory.Items.Where(item => item.SlotId == CircleOfCultistSlotId); // Get rootitem + its children List sacrificedItems = []; @@ -362,11 +301,7 @@ public class CircleOfCultistService( var totalRewardCost = 0; var rewardItemCount = 0; var failedAttempts = 0; - while ( - totalRewardCost < rewardBudget - && rewardItemTplPool.Count > 0 - && rewardItemCount < circleConfig.MaxRewardItemCount - ) + while (totalRewardCost < rewardBudget && rewardItemTplPool.Count > 0 && rewardItemCount < circleConfig.MaxRewardItemCount) { if (failedAttempts > circleConfig.MaxAttemptsToPickRewardsWithinBudget) { @@ -387,9 +322,7 @@ public class CircleOfCultistService( var defaultPreset = presetHelper.GetDefaultPreset(randomItemTplFromPool); if (defaultPreset is null) { - logger.Warning( - $"Reward tpl: {randomItemTplFromPool} lacks a default preset, skipping reward" - ); + logger.Warning($"Reward tpl: {randomItemTplFromPool} lacks a default preset, skipping reward"); failedAttempts++; continue; @@ -456,11 +389,7 @@ public class CircleOfCultistService( /// Items sacrificed /// Id of stash item /// The reward object - protected List> GetDirectRewards( - MongoId sessionId, - DirectRewardSettings directReward, - MongoId cultistCircleStashId - ) + protected List> GetDirectRewards(MongoId sessionId, DirectRewardSettings directReward, MongoId cultistCircleStashId) { // Prep rewards array (reward can be item with children, hence array of arrays) List> rewards = []; @@ -476,17 +405,12 @@ public class CircleOfCultistService( foreach (var rewardTpl in directReward.Reward) { // Is weapon/armor, handle differently - if ( - itemHelper.ArmorItemHasRemovableOrSoftInsertSlots(rewardTpl) - || itemHelper.IsOfBaseclass(rewardTpl, BaseClasses.WEAPON) - ) + if (itemHelper.ArmorItemHasRemovableOrSoftInsertSlots(rewardTpl) || itemHelper.IsOfBaseclass(rewardTpl, BaseClasses.WEAPON)) { var defaultPreset = presetHelper.GetDefaultPreset(rewardTpl); if (defaultPreset is null) { - logger.Warning( - $"Reward tpl: {rewardTpl} lacks a default preset, skipping reward" - ); + logger.Warning($"Reward tpl: {rewardTpl} lacks a default preset, skipping reward"); continue; } @@ -552,9 +476,7 @@ public class CircleOfCultistService( ) { // Get sacrificed tpls - var sacrificedItemTpls = sacrificedItems - .Select(item => item.Template) - .Where(item => item != null); + var sacrificedItemTpls = sacrificedItems.Select(item => item.Template).Where(item => item != null); // Create md5 key of the items player sacrificed so we can compare against the direct reward cache var sacrificedItemsKey = CreateSacrificeCacheKey(sacrificedItemTpls); @@ -610,9 +532,7 @@ public class CircleOfCultistService( } // Look for parent in dict - var settings = _hideoutConfig.CultistCircle.DirectRewardStackSize.GetValueOrDefault( - itemDetails.Value.Parent - ); + var settings = _hideoutConfig.CultistCircle.DirectRewardStackSize.GetValueOrDefault(itemDetails.Value.Parent); if (settings is null) { return 1; @@ -626,10 +546,7 @@ public class CircleOfCultistService( ///
/// Session id /// Reward sent to player - protected void FlagDirectRewardAsAcceptedInProfile( - MongoId sessionId, - DirectRewardSettings directReward - ) + protected void FlagDirectRewardAsAcceptedInProfile(MongoId sessionId, DirectRewardSettings directReward) { var fullProfile = profileHelper.GetFullProfile(sessionId); var dataToStoreInProfile = new AcceptedCultistReward @@ -639,8 +556,7 @@ public class CircleOfCultistService( RewardItems = directReward.Reward, }; - fullProfile.SptData.CultistRewards[GetDirectRewardHashKey(directReward)] = - dataToStoreInProfile; + fullProfile.SptData.CultistRewards[GetDirectRewardHashKey(directReward)] = dataToStoreInProfile; } /// @@ -667,10 +583,7 @@ public class CircleOfCultistService( var percentOfPoolToUse = randomUtil.GetDouble(settings.Min, settings.Max); // Rouble amount of pool we want to reward as currency - var roubleAmountToFill = randomUtil.GetPercentOfValue( - percentOfPoolToUse, - rewardPoolRemaining - ); + var roubleAmountToFill = randomUtil.GetPercentOfValue(percentOfPoolToUse, rewardPoolRemaining); // Convert currency to roubles var currencyPriceAsRouble = itemHelper.GetItemPrice(itemTpl); @@ -723,35 +636,21 @@ public class CircleOfCultistService( case CircleRewardType.RANDOM: { // Does reward pass the high value threshold - var isHighValueReward = - craftingInfo.RewardAmountRoubles >= cultistCircleConfig.HighValueThresholdRub; - GenerateRandomisedItemsAndAddToRewardPool( - rewardPool, - itemRewardBlacklist, - isHighValueReward - ); + var isHighValueReward = craftingInfo.RewardAmountRoubles >= cultistCircleConfig.HighValueThresholdRub; + GenerateRandomisedItemsAndAddToRewardPool(rewardPool, itemRewardBlacklist, isHighValueReward); break; } case CircleRewardType.HIDEOUT_TASK: { // Hideout/Task loot - AddHideoutUpgradeRequirementsToRewardPool( - hideoutDbData, - pmcData, - itemRewardBlacklist, - rewardPool - ); + AddHideoutUpgradeRequirementsToRewardPool(hideoutDbData, pmcData, itemRewardBlacklist, rewardPool); AddTaskItemRequirementsToRewardPool(pmcData, itemRewardBlacklist, rewardPool); // If we have no tasks or hideout stuff left or need more loot to fill it out, default to high value if (rewardPool.Count < cultistCircleConfig.MaxRewardItemCount + 2) { - GenerateRandomisedItemsAndAddToRewardPool( - rewardPool, - itemRewardBlacklist, - true - ); + GenerateRandomisedItemsAndAddToRewardPool(rewardPool, itemRewardBlacklist, true); } break; @@ -782,19 +681,13 @@ public class CircleOfCultistService( /// Player profile /// Items not to add to pool /// Pool to add items to - protected void AddTaskItemRequirementsToRewardPool( - PmcData pmcData, - HashSet itemRewardBlacklist, - HashSet rewardPool - ) + protected void AddTaskItemRequirementsToRewardPool(PmcData pmcData, HashSet itemRewardBlacklist, HashSet rewardPool) { var activeTasks = pmcData.Quests.Where(quest => quest.Status == QuestStatusEnum.Started); foreach (var task in activeTasks) { var questData = questHelper.GetQuestFromDb(task.QId, pmcData); - var handoverConditions = questData.Conditions.AvailableForFinish.Where(condition => - condition.ConditionType == "HandoverItem" - ); + var handoverConditions = questData.Conditions.AvailableForFinish.Where(condition => condition.ConditionType == "HandoverItem"); foreach (var condition in handoverConditions) foreach (var neededItem in condition.Target.List) { @@ -842,10 +735,7 @@ public class CircleOfCultistService( var itemRequirements = GetItemRequirements(nextStageDbData.Requirements); foreach (var rewardToAdd in itemRequirements) { - if ( - itemRewardBlacklist.Contains(rewardToAdd.TemplateId) - || !itemHelper.IsValidItem(rewardToAdd.TemplateId) - ) + if (itemRewardBlacklist.Contains(rewardToAdd.TemplateId) || !itemHelper.IsValidItem(rewardToAdd.TemplateId)) // Dont reward items sacrificed { continue; @@ -853,9 +743,7 @@ public class CircleOfCultistService( if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Added Hideout Loot: {itemHelper.GetItemName(rewardToAdd.TemplateId)}" - ); + logger.Debug($"Added Hideout Loot: {itemHelper.GetItemName(rewardToAdd.TemplateId)}"); } rewardPool.Add(rewardToAdd.TemplateId); @@ -869,16 +757,11 @@ public class CircleOfCultistService( /// /// Hideout areas to iterate over /// Active area array - protected IEnumerable GetPlayerAccessibleHideoutAreas( - IEnumerable areas - ) + protected IEnumerable GetPlayerAccessibleHideoutAreas(IEnumerable areas) { return areas.Where(area => { - if ( - area.Type == HideoutAreas.ChristmasIllumination - && !seasonalEventService.ChristmasEventEnabled() - ) + if (area.Type == HideoutAreas.ChristmasIllumination && !seasonalEventService.ChristmasEventEnabled()) // Christmas tree area and not Christmas, skip { return false; @@ -904,17 +787,11 @@ public class CircleOfCultistService( var currentItemCount = 0; var attempts = 0; // `currentItemCount` var will look for the correct number of items, `attempts` var will keep this from never stopping if the highValueThreshold is too high - while ( - currentItemCount < _hideoutConfig.CultistCircle.MaxRewardItemCount + 2 - && attempts < allItems.Count - ) + while (currentItemCount < _hideoutConfig.CultistCircle.MaxRewardItemCount + 2 && attempts < allItems.Count) { attempts++; var randomItem = randomUtil.GetArrayValue(allItems); - if ( - itemRewardBlacklist.Contains(randomItem.Key) - || !itemHelper.IsValidItem(randomItem.Key) - ) + if (itemRewardBlacklist.Contains(randomItem.Key) || !itemHelper.IsValidItem(randomItem.Key)) { continue; } @@ -944,9 +821,7 @@ public class CircleOfCultistService( ///
/// Requirements to iterate over /// Array of item requirements - protected IEnumerable GetItemRequirements( - IEnumerable requirements - ) + protected IEnumerable GetItemRequirements(IEnumerable requirements) { return requirements.Where(requirement => requirement.Type == "Item").ToList(); } @@ -967,9 +842,7 @@ public class CircleOfCultistService( ///
/// Direct rewards array from hideout config /// Dictionary - protected Dictionary GenerateSacrificedItemsCache( - List directRewards - ) + protected Dictionary GenerateSacrificedItemsCache(List directRewards) { var result = new Dictionary(); foreach (var rewardSettings in directRewards) @@ -1016,18 +889,11 @@ public class CircleOfCultistService( foreach (var itemToAdd in rewards) { - var result = inventoryHelper.PlaceItemInContainer( - containerGrid, - itemToAdd, - cultistCircleStashId, - CircleOfCultistSlotId - ); + var result = inventoryHelper.PlaceItemInContainer(containerGrid, itemToAdd, cultistCircleStashId, CircleOfCultistSlotId); if (!result.Success.GetValueOrDefault()) { - logger.Warning( - $"Failed to place sacrifice reward: {itemToAdd.FirstOrDefault()?.Template}" - ); + logger.Warning($"Failed to place sacrifice reward: {itemToAdd.FirstOrDefault()?.Template}"); continue; } diff --git a/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs b/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs index 2657964a..2b8f7972 100644 --- a/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs @@ -39,15 +39,10 @@ public class CreateProfileService( MailSendService mailSendService ) { - public async ValueTask CreateProfile( - MongoId sessionId, - ProfileCreateRequestData request - ) + public async ValueTask CreateProfile(MongoId sessionId, ProfileCreateRequestData request) { var account = cloner.Clone(saveServer.GetProfile(sessionId)); - var profileTemplateClone = cloner.Clone( - profileHelper.GetProfileTemplateForSide(account.ProfileInfo.Edition, request.Side) - ); + var profileTemplateClone = cloner.Clone(profileHelper.GetProfileTemplateForSide(account.ProfileInfo.Edition, request.Side)); var pmcData = profileTemplateClone.Character; @@ -119,25 +114,17 @@ public class CreateProfileService( { if (pmcData.Stats.Eft is not null) { - pmcData.Stats.Eft.TotalInGameTime = account - .CharacterData - .PmcData - .Stats - .Eft - .TotalInGameTime; + pmcData.Stats.Eft.TotalInGameTime = account.CharacterData.PmcData.Stats.Eft.TotalInGameTime; // Get the old profile's scav lifetime counter, if it exists - var lifetimeCounter = - account.CharacterData?.PmcData?.Stats?.Eft?.OverallCounters?.Items?.FirstOrDefault( - x => x.Key?.Contains("LifeTime") == true - ); + var lifetimeCounter = account.CharacterData?.PmcData?.Stats?.Eft?.OverallCounters?.Items?.FirstOrDefault(x => + x.Key?.Contains("LifeTime") == true + ); if (lifetimeCounter is not null) { // Set the old lifetime counter back, bsg seems to use this as well to keep track of the total amount of time played - profileDetails.CharacterData.PmcData.Stats.Eft.OverallCounters.Items.Add( - lifetimeCounter - ); + profileDetails.CharacterData.PmcData.Stats.Eft.OverallCounters.Items.Add(lifetimeCounter); } } } @@ -157,9 +144,7 @@ public class CreateProfileService( foreach (var (achievementId, _) in profileDetails.CharacterData.PmcData.Achievements) { - var rewards = achievementsDb - .FirstOrDefault(achievementDb => achievementDb.Id == achievementId) - ?.Rewards; + var rewards = achievementsDb.FirstOrDefault(achievementDb => achievementDb.Id == achievementId)?.Rewards; if (rewards is null) { @@ -190,24 +175,16 @@ public class CreateProfileService( } // Process handling if the account is forced to prestige, or if the account currently has any pending prestiges - if ( - request.SptForcePrestigeLevel is not null - || account.SptData?.PendingPrestige is not null - ) + if (request.SptForcePrestigeLevel is not null || account.SptData?.PendingPrestige is not null) { - var pendingPrestige = - account.SptData.PendingPrestige - ?? new PendingPrestige { PrestigeLevel = request.SptForcePrestigeLevel }; + var pendingPrestige = account.SptData.PendingPrestige ?? new PendingPrestige { PrestigeLevel = request.SptForcePrestigeLevel }; prestigeHelper.ProcessPendingPrestige(account, profileDetails, pendingPrestige); } if (profileTemplateClone.Trader.SetQuestsAvailableForStart ?? false) { - questHelper.AddAllQuestsToProfile( - profileDetails.CharacterData.PmcData, - [QuestStatusEnum.AvailableForStart] - ); + questHelper.AddAllQuestsToProfile(profileDetails.CharacterData.PmcData, [QuestStatusEnum.AvailableForStart]); } // Profile is flagged as wanting quests set to ready to hand in and collect rewards @@ -215,11 +192,7 @@ public class CreateProfileService( { questHelper.AddAllQuestsToProfile( profileDetails.CharacterData.PmcData, - [ - QuestStatusEnum.AvailableForStart, - QuestStatusEnum.Started, - QuestStatusEnum.AvailableForFinish, - ] + [QuestStatusEnum.AvailableForStart, QuestStatusEnum.Started, QuestStatusEnum.AvailableForFinish] ); // Make unused response so applyQuestReward works @@ -231,36 +204,24 @@ public class CreateProfileService( ResetAllTradersInProfile(sessionId); - saveServer.GetProfile(sessionId).CharacterData.ScavData = playerScavGenerator.Generate( - sessionId - ); + saveServer.GetProfile(sessionId).CharacterData.ScavData = playerScavGenerator.Generate(sessionId); // Set old account in-game time data on wipe, if it exists to the scav if (account.CharacterData?.ScavData?.Stats?.Eft is not null) { if (profileDetails.CharacterData.ScavData.Stats?.Eft is not null) { - profileDetails.CharacterData.ScavData.Stats.Eft.TotalInGameTime = account - .CharacterData - .ScavData - .Stats - .Eft - .TotalInGameTime; + profileDetails.CharacterData.ScavData.Stats.Eft.TotalInGameTime = account.CharacterData.ScavData.Stats.Eft.TotalInGameTime; // Get the old profile's scav lifetime counter, if it exists - var lifetimeCounter = - account.CharacterData?.ScavData?.Stats?.Eft?.OverallCounters?.Items?.FirstOrDefault( - x => x.Key?.Contains("LifeTime") == true - ); + var lifetimeCounter = account.CharacterData?.ScavData?.Stats?.Eft?.OverallCounters?.Items?.FirstOrDefault(x => + x.Key?.Contains("LifeTime") == true + ); if (lifetimeCounter is not null) { // Set the old lifetime counter back, bsg seems to use this as well to keep track of the total amount of time played - saveServer - .GetProfile(sessionId) - .CharacterData.ScavData.Stats.Eft.OverallCounters.Items.Add( - lifetimeCounter - ); + saveServer.GetProfile(sessionId).CharacterData.ScavData.Stats.Eft.OverallCounters.Items.Add(lifetimeCounter); } } } @@ -288,12 +249,7 @@ public class CreateProfileService( } else { - logger.Warning( - serverLocalisationService.GetText( - "profile-unable_to_find_profile_by_id_cannot_delete", - sessionID - ) - ); + logger.Warning(serverLocalisationService.GetText("profile-unable_to_find_profile_by_id_cannot_delete", sessionID)); } } @@ -340,52 +296,28 @@ public class CreateProfileService( /// Profile to check public void AddMissingInternalContainersToProfile(PmcData pmcData) { - if ( - !pmcData.Inventory.Items.Any(item => - item.Id == pmcData.Inventory.HideoutCustomizationStashId - ) - ) + if (!pmcData.Inventory.Items.Any(item => item.Id == pmcData.Inventory.HideoutCustomizationStashId)) { pmcData.Inventory.Items.Add( - new Item - { - Id = pmcData.Inventory.HideoutCustomizationStashId.Value, - Template = ItemTpl.HIDEOUTAREACONTAINER_CUSTOMIZATION, - } + new Item { Id = pmcData.Inventory.HideoutCustomizationStashId.Value, Template = ItemTpl.HIDEOUTAREACONTAINER_CUSTOMIZATION } ); } if (!pmcData.Inventory.Items.Any(item => item.Id == pmcData.Inventory.SortingTable)) { pmcData.Inventory.Items.Add( - new Item - { - Id = pmcData.Inventory.SortingTable.Value, - Template = ItemTpl.SORTINGTABLE_SORTING_TABLE, - } + new Item { Id = pmcData.Inventory.SortingTable.Value, Template = ItemTpl.SORTINGTABLE_SORTING_TABLE } ); } if (!pmcData.Inventory.Items.Any(item => item.Id == pmcData.Inventory.QuestStashItems)) { - pmcData.Inventory.Items.Add( - new Item - { - Id = pmcData.Inventory.QuestStashItems.Value, - Template = ItemTpl.STASH_QUESTOFFLINE, - } - ); + pmcData.Inventory.Items.Add(new Item { Id = pmcData.Inventory.QuestStashItems.Value, Template = ItemTpl.STASH_QUESTOFFLINE }); } if (!pmcData.Inventory.Items.Any(item => item.Id == pmcData.Inventory.QuestRaidItems)) { - pmcData.Inventory.Items.Add( - new Item - { - Id = pmcData.Inventory.QuestRaidItems.Value, - Template = ItemTpl.STASH_QUESTRAID, - } - ); + pmcData.Inventory.Items.Add(new Item { Id = pmcData.Inventory.QuestRaidItems.Value, Template = ItemTpl.STASH_QUESTRAID }); } } @@ -396,25 +328,15 @@ public class CreateProfileService( /// Player profile /// Session ID /// Event router response - protected void GivePlayerStartingQuestRewards( - SptProfile profileDetails, - MongoId sessionID, - ItemEventRouterResponse response - ) + protected void GivePlayerStartingQuestRewards(SptProfile profileDetails, MongoId sessionID, ItemEventRouterResponse response) { foreach (var quest in profileDetails.CharacterData.PmcData.Quests) { - var questFromDb = questHelper.GetQuestFromDb( - quest.QId, - profileDetails.CharacterData.PmcData - ); + var questFromDb = questHelper.GetQuestFromDb(quest.QId, profileDetails.CharacterData.PmcData); // Get messageId of text to send to player as text message in game // Copy of code from QuestController.acceptQuest() - var messageId = questHelper.GetMessageIdForQuestStart( - questFromDb.StartedMessageText, - questFromDb.Description - ); + var messageId = questHelper.GetMessageIdForQuestStart(questFromDb.StartedMessageText, questFromDb.Description); var itemRewards = questRewardHelper.ApplyQuestReward( profileDetails.CharacterData.PmcData, quest.QId, diff --git a/Libraries/SPTarkov.Server.Core/Services/CustomLocationWaveService.cs b/Libraries/SPTarkov.Server.Core/Services/CustomLocationWaveService.cs index 58783915..f6e91bf2 100644 --- a/Libraries/SPTarkov.Server.Core/Services/CustomLocationWaveService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/CustomLocationWaveService.cs @@ -67,9 +67,7 @@ public class CustomLocationWaveService( var locationBase = databaseService.GetLocation(mapKvP.Key).Base; if (locationBase is null) { - logger.Warning( - $"Unable to add custom boss wave to location: {mapKvP}, location not found" - ); + logger.Warning($"Unable to add custom boss wave to location: {mapKvP}, location not found"); continue; } @@ -97,9 +95,7 @@ public class CustomLocationWaveService( var locationBase = databaseService.GetLocation(mapKvP.Key).Base; if (locationBase is null) { - logger.Warning( - $"Unable to add custom wave to location: {mapKvP}, location not found" - ); + logger.Warning($"Unable to add custom wave to location: {mapKvP}, location not found"); continue; } diff --git a/Libraries/SPTarkov.Server.Core/Services/DatabaseService.cs b/Libraries/SPTarkov.Server.Core/Services/DatabaseService.cs index de07b31a..bcabab49 100644 --- a/Libraries/SPTarkov.Server.Core/Services/DatabaseService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/DatabaseService.cs @@ -39,12 +39,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Bots == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/bots" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/bots")); } return databaseServer.GetTables().Bots!; @@ -55,12 +50,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Globals == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/globals.json" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/globals.json")); } return databaseServer.GetTables().Globals!; @@ -71,12 +61,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Hideout == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/hideout" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/hideout")); } return databaseServer.GetTables().Hideout!; @@ -87,12 +72,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Locales == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/locales" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/locales")); } return databaseServer.GetTables().Locales!; @@ -103,12 +83,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Locations == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/locations" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/locations")); } return databaseServer.GetTables().Locations!; @@ -121,13 +96,10 @@ public class DatabaseService( /// assets/database/locations/ public Location? GetLocation(string locationId) { - var desiredLocation = GetLocations() - ?.GetByJsonProp(locationId.ToLowerInvariant()); + var desiredLocation = GetLocations()?.GetByJsonProp(locationId.ToLowerInvariant()); if (desiredLocation == null) { - logger.Error( - serverLocalisationService.GetText("database-no_location_found_with_id", locationId) - ); + logger.Error(serverLocalisationService.GetText("database-no_location_found_with_id", locationId)); return null; } @@ -140,12 +112,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Match == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/locales" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/locales")); } return databaseServer.GetTables().Match!; @@ -156,12 +123,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Server == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/server.json" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/server.json")); } return databaseServer.GetTables().Server!; @@ -172,12 +134,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Settings == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/settings.json" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/settings.json")); } return databaseServer.GetTables().Settings!; @@ -188,12 +145,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Templates == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates")); } return databaseServer.GetTables().Templates!; @@ -205,10 +157,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Achievements == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/achievements.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/achievements.json") ); } @@ -221,10 +170,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Achievements == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/customAchievements.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/customAchievements.json") ); } @@ -237,10 +183,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Customization == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/customization.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/customization.json") ); } @@ -253,10 +196,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Handbook == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/handbook.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/handbook.json") ); } @@ -268,12 +208,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Templates?.Items == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/items.json" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/items.json")); } return databaseServer.GetTables().Templates?.Items!; @@ -285,10 +220,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Prices == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/prices.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/prices.json") ); } @@ -301,10 +233,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Profiles == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/profiles.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/profiles.json") ); } @@ -317,10 +246,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.Quests == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/templates/quests.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/templates/quests.json") ); } @@ -332,12 +258,7 @@ public class DatabaseService( { if (databaseServer.GetTables().Traders == null) { - throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/traders" - ) - ); + throw new Exception(serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/traders")); } return databaseServer.GetTables().Traders!; @@ -352,9 +273,7 @@ public class DatabaseService( { if (!databaseServer.GetTables().Traders.TryGetValue(traderId, out var desiredTrader)) { - logger.Error( - serverLocalisationService.GetText("database-no_trader_found_with_id", traderId) - ); + logger.Error(serverLocalisationService.GetText("database-no_trader_found_with_id", traderId)); return null; } @@ -368,10 +287,7 @@ public class DatabaseService( if (databaseServer.GetTables().Templates?.LocationServices == null) { throw new Exception( - serverLocalisationService.GetText( - "database-data_at_path_missing", - "assets/database/locationServices.json" - ) + serverLocalisationService.GetText("database-data_at_path_missing", "assets/database/locationServices.json") ); } diff --git a/Libraries/SPTarkov.Server.Core/Services/FenceService.cs b/Libraries/SPTarkov.Server.Core/Services/FenceService.cs index ccec9a14..02abaa37 100644 --- a/Libraries/SPTarkov.Server.Core/Services/FenceService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/FenceService.cs @@ -204,9 +204,7 @@ public class FenceService( { if (itemHelper.IsOfBaseclass(item.Template, BaseClasses.AMMO)) { - total += - handbookHelper.GetTemplatePrice(item.Template) - * (item.Upd?.StackObjectsCount ?? 1); + total += handbookHelper.GetTemplatePrice(item.Template) * (item.Upd?.StackObjectsCount ?? 1); } } @@ -219,11 +217,7 @@ public class FenceService( /// (clone) Assort that contains items with prices to adjust /// Multiplier to use on items /// Multiplier to use on presets - protected void AdjustAssortItemPricesByConfigMultiplier( - TraderAssort assort, - double itemMultiplier, - double presetMultiplier - ) + protected void AdjustAssortItemPricesByConfigMultiplier(TraderAssort assort, double itemMultiplier, double presetMultiplier) { // Only get root items foreach (var item in assort.Items.Where(x => x.SlotId is "hideout")) @@ -266,18 +260,11 @@ public class FenceService( /// Assort to be modified /// Value to multiply item price by /// Value to multiply preset price by - protected void AdjustItemPriceByModifier( - Item item, - TraderAssort assort, - double modifier, - double presetModifier - ) + protected void AdjustItemPriceByModifier(Item item, TraderAssort assort, double modifier, double presetModifier) { if (assort?.BarterScheme is null) { - logger.Warning( - $"Unable to adjust item: {item.Id} on assort as it lacks a barterScheme object" - ); + logger.Warning($"Unable to adjust item: {item.Id} on assort as it lacks a barterScheme object"); return; } @@ -300,9 +287,7 @@ public class FenceService( } else { - logger.Warning( - $"adjustItemPriceByModifier() - no action taken for item: {item.Template}" - ); + logger.Warning($"adjustItemPriceByModifier() - no action taken for item: {item.Template}"); } } @@ -330,27 +315,19 @@ public class FenceService( public void PerformPartialRefresh() { var itemCountToReplace = GetCountOfItemsToReplace(traderConfig.Fence.AssortSize); - var discountItemCountToReplace = GetCountOfItemsToReplace( - traderConfig.Fence.DiscountOptions.AssortSize - ); + var discountItemCountToReplace = GetCountOfItemsToReplace(traderConfig.Fence.DiscountOptions.AssortSize); // Simulate players buying items DeleteRandomAssorts(itemCountToReplace, fenceAssort); DeleteRandomAssorts(discountItemCountToReplace, fenceDiscountAssort); - var normalItemCountsToGenerate = GetItemCountsToGenerate( - fenceAssort.Items, - desiredAssortCounts.Normal - ); + var normalItemCountsToGenerate = GetItemCountsToGenerate(fenceAssort.Items, desiredAssortCounts.Normal); var newItems = CreateAssorts(normalItemCountsToGenerate, 1); // Push newly generated assorts into existing data UpdateFenceAssorts(newItems, fenceAssort); - var discountItemCountsToGenerate = GetItemCountsToGenerate( - fenceDiscountAssort.Items, - desiredAssortCounts.Discount - ); + var discountItemCountsToGenerate = GetItemCountsToGenerate(fenceDiscountAssort.Items, desiredAssortCounts.Discount); var newDiscountItems = CreateAssorts(discountItemCountsToGenerate, 2); // Push newly generated discount assorts into existing data @@ -371,17 +348,13 @@ public class FenceService( // Add new barter items to fence assorts discounted barter scheme foreach (var barterItemKey in newDiscountItems.BarterScheme.Keys) { - fenceDiscountAssort.BarterScheme[barterItemKey] = newDiscountItems.BarterScheme[ - barterItemKey - ]; + fenceDiscountAssort.BarterScheme[barterItemKey] = newDiscountItems.BarterScheme[barterItemKey]; } // Add loyalty items to fence discount assorts loyalty object foreach (var loyaltyItemKey in newDiscountItems.LoyalLevelItems.Keys) { - fenceDiscountAssort.LoyalLevelItems[loyaltyItemKey] = newDiscountItems.LoyalLevelItems[ - loyaltyItemKey - ]; + fenceDiscountAssort.LoyalLevelItems[loyaltyItemKey] = newDiscountItems.LoyalLevelItems[loyaltyItemKey]; } // Reset the clock @@ -393,10 +366,7 @@ public class FenceService( ///
/// Assorts to fold into existing fence assorts /// Current fence assorts, new assorts will be added to - protected void UpdateFenceAssorts( - CreateFenceAssortsResult newFenceAssorts, - TraderAssort existingFenceAssorts - ) + protected void UpdateFenceAssorts(CreateFenceAssortsResult newFenceAssorts, TraderAssort existingFenceAssorts) { foreach (var itemWithChildren in newFenceAssorts.SptItems) { @@ -405,9 +375,7 @@ public class FenceService( if (newRootItem == null) { var firstItem = itemWithChildren.FirstOrDefault(x => x != null); - logger.Error( - $"Unable to process fence assort as root item is missing: {firstItem?.Template}, skipping" - ); + logger.Error($"Unable to process fence assort as root item is missing: {firstItem?.Template}, skipping"); continue; } @@ -419,16 +387,8 @@ public class FenceService( // Check if same type of item exists + its on list of item types to always stack if (existingRootItem != null && ItemInPreventDupeCategoryList(newRootItem.Template)) { - var existingFullItemTree = existingFenceAssorts.Items.GetItemWithChildren( - existingRootItem.Id - ); - if ( - itemHelper.IsSameItems( - itemWithChildren, - existingFullItemTree, - fenceItemUpdCompareProperties - ) - ) + var existingFullItemTree = existingFenceAssorts.Items.GetItemWithChildren(existingRootItem.Id); + if (itemHelper.IsSameItems(itemWithChildren, existingFullItemTree, fenceItemUpdCompareProperties)) { // Guard against a missing stack count if (existingRootItem.Upd?.StackObjectsCount == null) @@ -438,8 +398,7 @@ public class FenceService( } // Merge new items count into existing, don't add new loyalty/barter data as it already exists - existingRootItem.Upd.StackObjectsCount += - newRootItem?.Upd?.StackObjectsCount ?? 1; + existingRootItem.Upd.StackObjectsCount += newRootItem?.Upd?.StackObjectsCount ?? 1; continue; } @@ -450,12 +409,8 @@ public class FenceService( // New assort to be added to existing assorts existingFenceAssorts.Items.AddRange(itemWithChildren); - existingFenceAssorts.BarterScheme[newRootItem.Id] = newFenceAssorts.BarterScheme[ - newRootItem.Id - ]; - existingFenceAssorts.LoyalLevelItems[newRootItem.Id] = newFenceAssorts.LoyalLevelItems[ - newRootItem.Id - ]; + existingFenceAssorts.BarterScheme[newRootItem.Id] = newFenceAssorts.BarterScheme[newRootItem.Id]; + existingFenceAssorts.LoyalLevelItems[newRootItem.Id] = newFenceAssorts.LoyalLevelItems[newRootItem.Id]; } } @@ -464,8 +419,7 @@ public class FenceService( ///
protected void IncrementPartialRefreshTime() { - nextPartialRefreshTimestamp = - timeUtil.GetTimeStamp() + traderConfig.Fence.PartialRefreshTimeSeconds; + nextPartialRefreshTimestamp = timeUtil.GetTimeStamp() + traderConfig.Fence.PartialRefreshTimeSeconds; } /// @@ -474,10 +428,7 @@ public class FenceService( /// Current assorts after items have been removed /// Base counts assorts should be adjusted to /// GenerationAssortValues object with adjustments needed to reach desired state - protected GenerationAssortValues GetItemCountsToGenerate( - IEnumerable assortItems, - GenerationAssortValues generationValues - ) + protected GenerationAssortValues GetItemCountsToGenerate(IEnumerable assortItems, GenerationAssortValues generationValues) { var allRootItems = assortItems.Where(item => item.SlotId == "hideout"); var rootPresetItems = allRootItems.Where(item => item?.Upd?.SptPresetId != null); @@ -485,8 +436,7 @@ public class FenceService( // Get count of weapons var currentWeaponPresetCount = rootPresetItems.Aggregate( 0, - (count, item) => - itemHelper.IsOfBaseclass(item.Template, BaseClasses.WEAPON) ? count + 1 : count + (count, item) => itemHelper.IsOfBaseclass(item.Template, BaseClasses.WEAPON) ? count + 1 : count ); // Get count of equipment @@ -496,22 +446,12 @@ public class FenceService( ); // Normal item count is total count minus weapon + armor count - var nonPresetItemAssortCount = - allRootItems.Count() - (currentWeaponPresetCount + currentEquipmentPresetCount); + var nonPresetItemAssortCount = allRootItems.Count() - (currentWeaponPresetCount + currentEquipmentPresetCount); // Get counts of items to generate, never var values fall below 0 - var itemCountToGenerate = Math.Max( - generationValues.Item.Value - nonPresetItemAssortCount, - 0 - ); - var weaponCountToGenerate = Math.Max( - generationValues.WeaponPreset.Value - currentWeaponPresetCount, - 0 - ); - var equipmentCountToGenerate = Math.Max( - generationValues.EquipmentPreset.Value - currentEquipmentPresetCount, - 0 - ); + var itemCountToGenerate = Math.Max(generationValues.Item.Value - nonPresetItemAssortCount, 0); + var weaponCountToGenerate = Math.Max(generationValues.WeaponPreset.Value - currentWeaponPresetCount, 0); + var equipmentCountToGenerate = Math.Max(generationValues.EquipmentPreset.Value - currentEquipmentPresetCount, 0); return new GenerationAssortValues { @@ -562,9 +502,7 @@ public class FenceService( { if (rootItemToAdjust.Upd == null) { - logger.Warning( - $"Fence Item: {rootItemToAdjust.Template} lacks a Upd object, adding" - ); + logger.Warning($"Fence Item: {rootItemToAdjust.Template} lacks a Upd object, adding"); rootItemToAdjust.Upd = new Upd(); } @@ -596,8 +534,7 @@ public class FenceService( /// Rounded int of items to replace protected int GetCountOfItemsToReplace(int totalItemCount) { - return (int) - Math.Round(totalItemCount * (traderConfig.Fence.PartialRefreshChangePercent / 100)); + return (int)Math.Round(totalItemCount * (traderConfig.Fence.PartialRefreshChangePercent / 100)); } /// @@ -728,10 +665,7 @@ public class FenceService( /// Number of items to generate per type (Item, WeaponPreset, EquipmentPreset) /// Loyalty level to set new item to /// CreateFenceAssortResult object - protected CreateFenceAssortsResult CreateAssorts( - GenerationAssortValues itemCounts, - int loyaltyLevel - ) + protected CreateFenceAssortsResult CreateAssorts(GenerationAssortValues itemCounts, int loyaltyLevel) { var result = new CreateFenceAssortsResult { @@ -745,24 +679,12 @@ public class FenceService( if (itemCounts.Item > 0) { - AddItemAssorts( - itemCounts.Item, - result, - baseFenceAssortClone, - itemTypeLimitCounts, - loyaltyLevel - ); + AddItemAssorts(itemCounts.Item, result, baseFenceAssortClone, itemTypeLimitCounts, loyaltyLevel); } if (itemCounts.WeaponPreset > 0 || itemCounts.EquipmentPreset > 0) { - AddPresetsToAssort( - itemCounts.WeaponPreset, - itemCounts.EquipmentPreset, - result, - baseFenceAssortClone, - loyaltyLevel - ); + AddPresetsToAssort(itemCounts.WeaponPreset, itemCounts.EquipmentPreset, result, baseFenceAssortClone, loyaltyLevel); } return result; @@ -787,8 +709,7 @@ public class FenceService( var priceLimits = traderConfig.Fence.ItemCategoryRoublePriceLimit; var assortRootItems = baseFenceAssortClone .Items.Where(item => - string.Equals(item.ParentId, "hideout", StringComparison.OrdinalIgnoreCase) - && item.Upd?.SptPresetId == null + string.Equals(item.ParentId, "hideout", StringComparison.OrdinalIgnoreCase) && item.Upd?.SptPresetId == null ) .ToList(); @@ -813,10 +734,7 @@ public class FenceService( continue; } - var itemLimitCount = GetMatchingItemLimit( - itemTypeLimits, - chosenBaseAssortRoot.Template - ); + var itemLimitCount = GetMatchingItemLimit(itemTypeLimits, chosenBaseAssortRoot.Template); if (itemLimitCount?.current >= itemLimitCount?.max) { // Skip adding item as assort as limit reached, try another item @@ -829,10 +747,7 @@ public class FenceService( } var price = baseFenceAssortClone.BarterScheme?[chosenBaseAssortRoot.Id][0][0].Count; - if ( - price is 0 or 100 - || (price == 1 && !presetHelper.IsPreset(chosenBaseAssortRoot.Id)) - ) + if (price is 0 or 100 || (price == 1 && !presetHelper.IsPreset(chosenBaseAssortRoot.Id))) { // Don't allow "special" items / presets, try another item i--; @@ -843,10 +758,7 @@ public class FenceService( } var itemDbDetails = itemHelper.GetItem(chosenBaseAssortRoot.Template).Value; - if ( - priceLimits.ContainsKey(itemDbDetails.Parent) - && price > priceLimits[itemDbDetails.Parent] - ) + if (priceLimits.ContainsKey(itemDbDetails.Parent) && price > priceLimits[itemDbDetails.Parent]) { // Too expensive for fence, try another item i--; @@ -865,8 +777,7 @@ public class FenceService( // Filter to only 1 root item + all children var childItemsAndSingleRoot = baseFenceAssortClone.Items.Where(item => - !string.Equals(item.ParentId, "hideout", StringComparison.Ordinal) - || item.Id == chosenBaseAssortRoot.Id + !string.Equals(item.ParentId, "hideout", StringComparison.Ordinal) || item.Id == chosenBaseAssortRoot.Id ); // MUST randomise Ids as its possible to add the same base fence assort twice = duplicate IDs = dead client @@ -882,23 +793,15 @@ public class FenceService( rootItemBeingAdded.Upd.StackObjectsCount = GetSingleItemStackCount(itemDbDetails); // Only randomise Upd values for single stacks - var isSingleStack = - Math.Abs((rootItemBeingAdded.Upd?.StackObjectsCount ?? 0) - 1) < 0.1; + var isSingleStack = Math.Abs((rootItemBeingAdded.Upd?.StackObjectsCount ?? 0) - 1) < 0.1; if (isSingleStack) { RandomiseItemUpdProperties(itemDbDetails, rootItemBeingAdded); } // Skip items already in the assort if it exists in the 'prevent duplicate' list - var existingItemThatMatches = GetMatchingItem( - rootItemBeingAdded, - itemDbDetails, - assorts.SptItems - ); - if ( - existingItemThatMatches != null - && ItemShouldBeForceStacked(existingItemThatMatches, itemDbDetails) - ) + var existingItemThatMatches = GetMatchingItem(rootItemBeingAdded, itemDbDetails, assorts.SptItems); + if (existingItemThatMatches != null && ItemShouldBeForceStacked(existingItemThatMatches, itemDbDetails)) { // Decrement loop counter so another items gets added i--; @@ -915,9 +818,7 @@ public class FenceService( assorts.SptItems.Add(desiredAssortItemAndChildrenClone); - assorts.BarterScheme[rootItemBeingAdded.Id] = _cloner.Clone( - baseFenceAssortClone.BarterScheme[chosenBaseAssortRoot.Id] - ); + assorts.BarterScheme[rootItemBeingAdded.Id] = _cloner.Clone(baseFenceAssortClone.BarterScheme[chosenBaseAssortRoot.Id]); // Only adjust item price by quality for solo items, never multi-stack if (isSingleStack) @@ -937,11 +838,7 @@ public class FenceService( /// DB details of matching item /// Items to search through /// Matching assort item - protected Item? GetMatchingItem( - Item rootItemBeingAdded, - TemplateItem itemDbDetails, - IEnumerable> itemsWithChildren - ) + protected Item? GetMatchingItem(Item rootItemBeingAdded, TemplateItem itemDbDetails, IEnumerable> itemsWithChildren) { // Get matching root items var matchingItems = itemsWithChildren @@ -959,15 +856,9 @@ public class FenceService( return null; } - var isMedical = itemHelper.IsOfBaseclasses( - rootItemBeingAdded.Template, - [BaseClasses.MEDICAL, BaseClasses.MED_KIT] - ); + var isMedical = itemHelper.IsOfBaseclasses(rootItemBeingAdded.Template, [BaseClasses.MEDICAL, BaseClasses.MED_KIT]); var isGearAndHasSlots = - itemHelper.IsOfBaseclasses( - rootItemBeingAdded.Template, - [BaseClasses.ARMORED_EQUIPMENT, BaseClasses.SEARCHABLE_ITEM] - ) + itemHelper.IsOfBaseclasses(rootItemBeingAdded.Template, [BaseClasses.ARMORED_EQUIPMENT, BaseClasses.SEARCHABLE_ITEM]) && itemDbDetails?.Properties?.Slots is not null && itemDbDetails.Properties.Slots.Any(); @@ -980,10 +871,7 @@ public class FenceService( // Items have sub properties that need to be checked against foreach (var item in matchingItems) { - if ( - isMedical - && rootItemBeingAdded.Upd?.MedKit?.HpResource == item.Upd?.MedKit?.HpResource - ) + if (isMedical && rootItemBeingAdded.Upd?.MedKit?.HpResource == item.Upd?.MedKit?.HpResource) // e.g. bandages with multiple use // Both undefined === both max resource left { @@ -994,8 +882,7 @@ public class FenceService( if ( isGearAndHasSlots && rootItemBeingAdded.Upd.Repairable?.Durability == item.Upd.Repairable?.Durability - && rootItemBeingAdded.Upd.Repairable?.MaxDurability - == item.Upd.Repairable?.MaxDurability + && rootItemBeingAdded.Upd.Repairable?.MaxDurability == item.Upd.Repairable?.MaxDurability ) { return item; @@ -1068,23 +955,15 @@ public class FenceService( } // Adjust price based on durability - if ( - itemRoot.Upd?.Repairable != null - || itemHelper.IsOfBaseclass(itemRoot.Template, BaseClasses.KEY_MECHANICAL) - ) + if (itemRoot.Upd?.Repairable != null || itemHelper.IsOfBaseclass(itemRoot.Template, BaseClasses.KEY_MECHANICAL)) { var itemQualityModifier = itemHelper.GetItemQualityModifier(itemRoot); var basePrice = barterSchemes[itemRoot.Id][0][0].Count; - barterSchemes[itemRoot.Id][0][0].Count = Math.Round( - (double)basePrice * itemQualityModifier - ); + barterSchemes[itemRoot.Id][0][0].Count = Math.Round((double)basePrice * itemQualityModifier); } } - protected (int current, int max)? GetMatchingItemLimit( - Dictionary itemTypeLimits, - MongoId itemTpl - ) + protected (int current, int max)? GetMatchingItemLimit(Dictionary itemTypeLimits, MongoId itemTpl) { foreach (var baseTypeKey in itemTypeLimits.Keys) { @@ -1127,9 +1006,7 @@ public class FenceService( var randomPresetRoot = randomUtil.GetArrayValue(weaponPresetRootItems); var rootItemDb = itemHelper.GetItem(randomPresetRoot.Template).Value; - var presetWithChildrenClone = _cloner.Clone( - baseFenceAssort.Items.GetItemWithChildren(randomPresetRoot.Id) - ); + var presetWithChildrenClone = _cloner.Clone(baseFenceAssort.Items.GetItemWithChildren(randomPresetRoot.Id)); RandomiseItemUpdProperties(rootItemDb, presetWithChildrenClone[0]); @@ -1140,12 +1017,7 @@ public class FenceService( var presetPrice = handbookHelper.GetTemplatePriceForItems(presetWithChildrenClone) * itemHelper.GetItemQualityModifierForItems(presetWithChildrenClone); - if ( - traderConfig.Fence.ItemCategoryRoublePriceLimit.TryGetValue( - rootItemDb.Parent, - out var priceLimitRouble - ) - ) + if (traderConfig.Fence.ItemCategoryRoublePriceLimit.TryGetValue(rootItemDb.Parent, out var priceLimitRouble)) { if (presetPrice > priceLimitRouble) // Too expensive, try again @@ -1164,10 +1036,7 @@ public class FenceService( } // MUST randomise Ids as its possible to add the same base fence assort twice = duplicate IDs = dead client - itemHelper.ReparentItemAndChildren( - presetWithChildrenClone[0], - presetWithChildrenClone - ); + itemHelper.ReparentItemAndChildren(presetWithChildrenClone[0], presetWithChildrenClone); presetWithChildrenClone.RemapRootItemId(); // Remapping IDs causes parentId to be altered, fix @@ -1179,13 +1048,7 @@ public class FenceService( // Must be careful to use correct id as the item has had its IDs regenerated assorts.BarterScheme[presetWithChildrenClone[0].Id] = [ - [ - new BarterScheme - { - Template = Money.ROUBLES, - Count = Math.Round(presetPrice), - }, - ], + [new BarterScheme { Template = Money.ROUBLES, Count = Math.Round(presetPrice) }], ]; assorts.LoyalLevelItems[presetWithChildrenClone[0].Id] = loyaltyLevel; @@ -1207,9 +1070,7 @@ public class FenceService( var randomPresetRoot = randomUtil.GetArrayValue(equipmentPresetRootItems); var rootItemDb = itemHelper.GetItem(randomPresetRoot.Template).Value; - var presetWithChildrenClone = _cloner.Clone( - baseFenceAssort.Items.GetItemWithChildren(randomPresetRoot.Id) - ); + var presetWithChildrenClone = _cloner.Clone(baseFenceAssort.Items.GetItemWithChildren(randomPresetRoot.Id)); // Need to add mods to armors so they don't show as red in the trade screen if (itemHelper.ItemRequiresSoftInserts(randomPresetRoot.Template)) @@ -1220,9 +1081,7 @@ public class FenceService( RemoveRandomModsOfItem(presetWithChildrenClone); // Check chosen item is below price cap - var priceLimitRouble = traderConfig.Fence.ItemCategoryRoublePriceLimit[ - rootItemDb.Parent - ]; + var priceLimitRouble = traderConfig.Fence.ItemCategoryRoublePriceLimit[rootItemDb.Parent]; var itemPrice = handbookHelper.GetTemplatePriceForItems(presetWithChildrenClone) * itemHelper.GetItemQualityModifierForItems(presetWithChildrenClone); @@ -1277,9 +1136,7 @@ public class FenceService( } // Check for and adjust plate durability values - var plateSlots = itemDbDetails.Properties.Slots?.Where(slot => - itemHelper.IsRemovablePlateSlot(slot.Name) - ); + var plateSlots = itemDbDetails.Properties.Slots?.Where(slot => itemHelper.IsRemovablePlateSlot(slot.Name)); if (plateSlots is not null && plateSlots.Any()) { RandomiseArmorInsertsDurabilities(plateSlots, armor); @@ -1291,21 +1148,13 @@ public class FenceService( /// /// Slots of items to randomise /// Array of armor + inserts to get items from - protected void RandomiseArmorSoftInsertDurabilities( - IEnumerable softInsertSlots, - IEnumerable armorItemAndMods - ) + protected void RandomiseArmorSoftInsertDurabilities(IEnumerable softInsertSlots, IEnumerable armorItemAndMods) { foreach (var requiredSlot in softInsertSlots) { - var modItemDbDetails = itemHelper - .GetItem(requiredSlot.Props.Filters.First().Plate.Value) - .Value; + var modItemDbDetails = itemHelper.GetItem(requiredSlot.Props.Filters.First().Plate.Value).Value; - var durabilityValues = GetRandomisedArmorDurabilityValues( - modItemDbDetails, - traderConfig.Fence.ArmorMaxDurabilityPercentMinMax - ); + var durabilityValues = GetRandomisedArmorDurabilityValues(modItemDbDetails, traderConfig.Fence.ArmorMaxDurabilityPercentMinMax); var plateTpl = requiredSlot.Props.Filters.First().Plate ?? string.Empty; // "Plate" property appears to be the 'default' item for slot if (plateTpl.IsEmpty()) // Some bsg plate properties are empty, skip mod @@ -1315,11 +1164,7 @@ public class FenceService( // Find items mod to apply dura changes to var modItemToAdjust = armorItemAndMods.FirstOrDefault(mod => - string.Equals( - mod.SlotId, - requiredSlot.Name.ToLowerInvariant(), - StringComparison.OrdinalIgnoreCase - ) + string.Equals(mod.SlotId, requiredSlot.Name.ToLowerInvariant(), StringComparison.OrdinalIgnoreCase) ); itemHelper.AddUpdObjectToItem(modItemToAdjust); @@ -1339,15 +1184,11 @@ public class FenceService( randomUtil.GetChance100(25) && modItemToAdjust.ParentId == BaseClasses.ARMORED_EQUIPMENT && modItemToAdjust.SlotId == "mod_equipment_000" - && modItemToAdjust.Upd.Repairable.Durability - < modItemDbDetails.Properties.MaxDurability + && modItemToAdjust.Upd.Repairable.Durability < modItemDbDetails.Properties.MaxDurability ) // Is damaged { - modItemToAdjust.Upd.FaceShield = new UpdFaceShield - { - Hits = randomUtil.GetInt(1, 3), - }; + modItemToAdjust.Upd.FaceShield = new UpdFaceShield { Hits = randomUtil.GetInt(1, 3) }; } } } @@ -1358,10 +1199,7 @@ public class FenceService( /// /// Slots of items to randomise /// Array of armor + inserts to get items from - protected void RandomiseArmorInsertsDurabilities( - IEnumerable plateSlots, - IEnumerable armorItemAndMods - ) + protected void RandomiseArmorInsertsDurabilities(IEnumerable plateSlots, IEnumerable armorItemAndMods) { foreach (var plateSlot in plateSlots) { @@ -1382,20 +1220,13 @@ public class FenceService( { // Remove plate from armor armorItemAndMods = armorItemAndMods.Where(item => - !string.Equals( - item.SlotId, - plateSlot.Name, - StringComparison.CurrentCultureIgnoreCase - ) + !string.Equals(item.SlotId, plateSlot.Name, StringComparison.CurrentCultureIgnoreCase) ); continue; } - var durabilityValues = GetRandomisedArmorDurabilityValues( - modItemDbDetails, - traderConfig.Fence.ArmorMaxDurabilityPercentMinMax - ); + var durabilityValues = GetRandomisedArmorDurabilityValues(modItemDbDetails, traderConfig.Fence.ArmorMaxDurabilityPercentMinMax); // Find items mod to apply durability changes to var modItemToAdjust = armorItemAndMods.FirstOrDefault(mod => @@ -1445,30 +1276,17 @@ public class FenceService( // No override, use stack max size from item db return itemDbDetails.Properties.StackMaxSize == 1 ? 1 - : randomUtil.GetInt( - itemDbDetails.Properties.StackMinRandom.Value, - itemDbDetails.Properties.StackMaxRandom.Value - ); + : randomUtil.GetInt(itemDbDetails.Properties.StackMinRandom.Value, itemDbDetails.Properties.StackMaxRandom.Value); } // Check for override in config, use values if exists - if ( - traderConfig.Fence.ItemStackSizeOverrideMinMax.TryGetValue( - itemDbDetails.Id, - out overrideValues - ) - ) + if (traderConfig.Fence.ItemStackSizeOverrideMinMax.TryGetValue(itemDbDetails.Id, out overrideValues)) { return randomUtil.GetInt(overrideValues.Min, overrideValues.Max); } // Check for parent override - if ( - traderConfig.Fence.ItemStackSizeOverrideMinMax.TryGetValue( - itemDbDetails.Parent, - out overrideValues - ) - ) + if (traderConfig.Fence.ItemStackSizeOverrideMinMax.TryGetValue(itemDbDetails.Parent, out overrideValues)) { return randomUtil.GetInt(overrideValues.Min, overrideValues.Max); } @@ -1521,10 +1339,7 @@ public class FenceService( protected bool PresetModItemWillBeRemoved(Item weaponMod, HashSet itemsBeingDeleted) { var slotIdsThatCanFail = traderConfig.Fence.PresetSlotsToRemoveChancePercent; - if ( - !slotIdsThatCanFail.TryGetValue(weaponMod.SlotId, out var removalChance) - || removalChance == 0.0 - ) + if (!slotIdsThatCanFail.TryGetValue(weaponMod.SlotId, out var removalChance) || removalChance == 0.0) { return false; } @@ -1544,22 +1359,14 @@ public class FenceService( { if (itemDetails.Properties == null) { - logger.Error( - $"Item {itemDetails.Name} lacks a _props field, unable to randomise item: {itemToAdjust.Id}" - ); + logger.Error($"Item {itemDetails.Name} lacks a _props field, unable to randomise item: {itemToAdjust.Id}"); return; } // Randomise hp resource of med items - if ( - itemDetails.Properties.MaxHpResource != null - && (itemDetails.Properties.MaxHpResource ?? 0) > 0 - ) + if (itemDetails.Properties.MaxHpResource != null && (itemDetails.Properties.MaxHpResource ?? 0) > 0) { - itemToAdjust.Upd.MedKit = new UpdMedKit - { - HpResource = randomUtil.GetInt(1, itemDetails.Properties.MaxHpResource.Value), - }; + itemToAdjust.Upd.MedKit = new UpdMedKit { HpResource = randomUtil.GetInt(1, itemDetails.Properties.MaxHpResource.Value) }; } // Randomise armor durability @@ -1572,15 +1379,8 @@ public class FenceService( && itemDetails.Properties.MaxDurability.GetValueOrDefault(0) > 0 ) { - var values = GetRandomisedArmorDurabilityValues( - itemDetails, - traderConfig.Fence.ArmorMaxDurabilityPercentMinMax - ); - itemToAdjust.Upd.Repairable = new UpdRepairable - { - Durability = values.Durability, - MaxDurability = values.MaxDurability, - }; + var values = GetRandomisedArmorDurabilityValues(itemDetails, traderConfig.Fence.ArmorMaxDurabilityPercentMinMax); + itemToAdjust.Upd.Repairable = new UpdRepairable { Durability = values.Durability, MaxDurability = values.MaxDurability }; return; } @@ -1589,26 +1389,15 @@ public class FenceService( if (itemHelper.IsOfBaseclass(itemDetails.Id, BaseClasses.WEAPON)) { var weaponDurabilityLimits = traderConfig.Fence.WeaponDurabilityPercentMinMax; - var maxDuraMin = - weaponDurabilityLimits.Max.Min / 100 * itemDetails.Properties.MaxDurability; - var maxDuraMax = - weaponDurabilityLimits.Max.Max / 100 * itemDetails.Properties.MaxDurability; + var maxDuraMin = weaponDurabilityLimits.Max.Min / 100 * itemDetails.Properties.MaxDurability; + var maxDuraMax = weaponDurabilityLimits.Max.Max / 100 * itemDetails.Properties.MaxDurability; var chosenMaxDurability = randomUtil.GetDouble(maxDuraMin.Value, maxDuraMax.Value); - var currentDuraMin = - weaponDurabilityLimits.Current.Min / 100 * itemDetails.Properties.MaxDurability; - var currentDuraMax = - weaponDurabilityLimits.Current.Max / 100 * itemDetails.Properties.MaxDurability; - var currentDurability = Math.Min( - randomUtil.GetDouble(currentDuraMin.Value, currentDuraMax.Value), - chosenMaxDurability - ); + var currentDuraMin = weaponDurabilityLimits.Current.Min / 100 * itemDetails.Properties.MaxDurability; + var currentDuraMax = weaponDurabilityLimits.Current.Max / 100 * itemDetails.Properties.MaxDurability; + var currentDurability = Math.Min(randomUtil.GetDouble(currentDuraMin.Value, currentDuraMax.Value), chosenMaxDurability); - itemToAdjust.Upd.Repairable = new UpdRepairable - { - Durability = currentDurability, - MaxDurability = chosenMaxDurability, - }; + itemToAdjust.Upd.Repairable = new UpdRepairable { Durability = currentDurability, MaxDurability = chosenMaxDurability }; return; } @@ -1624,17 +1413,11 @@ public class FenceService( } // Mechanical key + has limited uses - if ( - itemHelper.IsOfBaseclass(itemDetails.Id, BaseClasses.KEY_MECHANICAL) - && (itemDetails.Properties.MaximumNumberOfUsage ?? 0) > 1 - ) + if (itemHelper.IsOfBaseclass(itemDetails.Id, BaseClasses.KEY_MECHANICAL) && (itemDetails.Properties.MaximumNumberOfUsage ?? 0) > 1) { itemToAdjust.Upd.Key = new UpdKey { - NumberOfUsages = randomUtil.GetInt( - 0, - itemDetails.Properties.MaximumNumberOfUsage.Value - 1 - ), + NumberOfUsages = randomUtil.GetInt(0, itemDetails.Properties.MaximumNumberOfUsage.Value - 1), }; return; @@ -1646,11 +1429,7 @@ public class FenceService( var resourceMax = itemDetails.Properties.MaxResource; var resourceCurrent = randomUtil.GetInt(1, itemDetails.Properties.MaxResource.Value); - itemToAdjust.Upd.Resource = new UpdResource - { - Value = resourceMax - resourceCurrent, - UnitsConsumed = resourceCurrent, - }; + itemToAdjust.Upd.Resource = new UpdResource { Value = resourceMax - resourceCurrent, UnitsConsumed = resourceCurrent }; } } @@ -1660,31 +1439,17 @@ public class FenceService( /// Item to create values for /// Max durability percent min/max values /// Durability + MaxDurability values - protected UpdRepairable GetRandomisedArmorDurabilityValues( - TemplateItem itemDetails, - ItemDurabilityCurrentMax equipmentDurabilityLimits - ) + protected UpdRepairable GetRandomisedArmorDurabilityValues(TemplateItem itemDetails, ItemDurabilityCurrentMax equipmentDurabilityLimits) { - var maxDuraMin = - equipmentDurabilityLimits.Max.Min / 100 * itemDetails.Properties.MaxDurability; - var maxDuraMax = - equipmentDurabilityLimits.Max.Max / 100 * itemDetails.Properties.MaxDurability; + var maxDuraMin = equipmentDurabilityLimits.Max.Min / 100 * itemDetails.Properties.MaxDurability; + var maxDuraMax = equipmentDurabilityLimits.Max.Max / 100 * itemDetails.Properties.MaxDurability; var chosenMaxDurability = randomUtil.GetDouble(maxDuraMin.Value, maxDuraMax.Value); - var currentDuraMin = - equipmentDurabilityLimits.Current.Min / 100 * itemDetails.Properties.MaxDurability; - var currentDuraMax = - equipmentDurabilityLimits.Current.Max / 100 * itemDetails.Properties.MaxDurability; - var chosenCurrentDurability = Math.Min( - randomUtil.GetDouble(currentDuraMin.Value, currentDuraMax.Value), - chosenMaxDurability - ); + var currentDuraMin = equipmentDurabilityLimits.Current.Min / 100 * itemDetails.Properties.MaxDurability; + var currentDuraMax = equipmentDurabilityLimits.Current.Max / 100 * itemDetails.Properties.MaxDurability; + var chosenCurrentDurability = Math.Min(randomUtil.GetDouble(currentDuraMin.Value, currentDuraMax.Value), chosenMaxDurability); - return new UpdRepairable - { - Durability = chosenCurrentDurability, - MaxDurability = chosenMaxDurability, - }; + return new UpdRepairable { Durability = chosenCurrentDurability, MaxDurability = chosenMaxDurability }; } /// @@ -1692,9 +1457,7 @@ public class FenceService( /// /// Limits as defined in config /// Record, key: item tplId, value: current/max item count allowed - protected Dictionary InitItemLimitCounter( - Dictionary limits - ) + protected Dictionary InitItemLimitCounter(Dictionary limits) { var itemTypeCounts = new Dictionary(); @@ -1723,9 +1486,7 @@ public class FenceService( /// Refresh time in seconds protected int GetFenceRefreshTime() { - var fence = traderConfig - .UpdateTime.FirstOrDefault(x => x.TraderId == Traders.FENCE) - .Seconds; + var fence = traderConfig.UpdateTime.FirstOrDefault(x => x.TraderId == Traders.FENCE).Seconds; return randomUtil.GetInt(fence.Min, fence.Max); } @@ -1776,9 +1537,7 @@ public class FenceService( fenceAssortItem = fenceDiscountAssort.Items.FirstOrDefault(item => item.Id == assortId); if (fenceAssortItem == null) { - logger.Error( - localisationService.GetText("fence-unable_to_find_offer_by_id", assortId) - ); + logger.Error(localisationService.GetText("fence-unable_to_find_offer_by_id", assortId)); return; } @@ -1810,9 +1569,7 @@ public class FenceService( { if (!assortItemsToRemoveFrom.Remove(itemToRemove)) { - logger.Warning( - $"unable to remove fence assort item: {itemToRemove.Id} tpl: {itemToRemove.Template}" - ); + logger.Warning($"unable to remove fence assort item: {itemToRemove.Id} tpl: {itemToRemove.Template}"); } //var indexToRemove = assortsToDeleteFrom.FindIndex(item => item.Id == itemToRemove.Id); diff --git a/Libraries/SPTarkov.Server.Core/Services/GiftService.cs b/Libraries/SPTarkov.Server.Core/Services/GiftService.cs index 951735cc..fb37a971 100644 --- a/Libraries/SPTarkov.Server.Core/Services/GiftService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/GiftService.cs @@ -87,9 +87,7 @@ public class GiftService( if (giftData.Items?.Count > 0 && giftData.CollectionTimeHours is null) { - logger.Warning( - $"Gift {giftId} has items but no collection time limit, defaulting to 48 hours" - ); + logger.Warning($"Gift {giftId} has items but no collection time limit, defaulting to 48 hours"); } // Handle system messages @@ -155,9 +153,7 @@ public class GiftService( }, MessageText = giftData.MessageText, Items = giftData.Items, - ItemsMaxStorageLifetimeSeconds = timeUtil.GetHoursAsSeconds( - giftData.CollectionTimeHours ?? 0 - ), + ItemsMaxStorageLifetimeSeconds = timeUtil.GetHoursAsSeconds(giftData.CollectionTimeHours ?? 0), }; if (giftData.Trader is not null) @@ -209,12 +205,7 @@ public class GiftService( case GiftSenderType.User: return MessageType.UserMessage; default: - logger.Error( - serverLocalisationService.GetText( - "gift-unable_to_handle_message_type_command", - giftData.Sender - ) - ); + logger.Error(serverLocalisationService.GetText("gift-unable_to_handle_message_type_command", giftData.Sender)); return null; } } diff --git a/Libraries/SPTarkov.Server.Core/Services/InsuranceService.cs b/Libraries/SPTarkov.Server.Core/Services/InsuranceService.cs index 1c77dcb8..e7169a78 100644 --- a/Libraries/SPTarkov.Server.Core/Services/InsuranceService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/InsuranceService.cs @@ -77,12 +77,7 @@ public class InsuranceService( var traderBase = traderHelper.GetTrader(traderKvP.Key, sessionID); if (traderBase is null) { - logger.Error( - serverLocalisationService.GetText( - "insurance-unable_to_find_trader_by_id", - traderKvP.Key - ) - ); + logger.Error(serverLocalisationService.GetText("insurance-unable_to_find_trader_by_id", traderKvP.Key)); continue; } @@ -90,12 +85,7 @@ public class InsuranceService( var dialogueTemplates = databaseService.GetTrader(traderKvP.Key).Dialogue; if (dialogueTemplates is null) { - logger.Error( - serverLocalisationService.GetText( - "insurance-trader_lacks_dialogue_property", - traderKvP.Key - ) - ); + logger.Error(serverLocalisationService.GetText("insurance-trader_lacks_dialogue_property", traderKvP.Key)); continue; } @@ -112,13 +102,9 @@ public class InsuranceService( sessionID, traderKvP.Key, MessageType.NpcTraderMessage, - randomUtil.GetArrayValue( - dialogueTemplates["insuranceStart"] ?? ["INSURANCE START MESSAGE MISSING"] - ), + randomUtil.GetArrayValue(dialogueTemplates["insuranceStart"] ?? ["INSURANCE START MESSAGE MISSING"]), null, - timeUtil.GetHoursAsSeconds( - (int)globals.Configuration?.Insurance?.MaxStorageTimeInHour - ), + timeUtil.GetHoursAsSeconds((int)globals.Configuration?.Insurance?.MaxStorageTimeInHour), systemData ); @@ -134,9 +120,7 @@ public class InsuranceService( MaxStorageTime = (int)GetMaxInsuranceStorageTime(traderBase), SystemData = systemData, MessageType = MessageType.InsuranceReturn, - MessageTemplateId = randomUtil.GetArrayValue( - dialogueTemplates["insuranceFound"] - ), + MessageTemplateId = randomUtil.GetArrayValue(dialogueTemplates["insuranceFound"]), Items = GetInsurance(sessionID)[traderKvP.Key], } ); @@ -159,58 +143,38 @@ public class InsuranceService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Insurance override used: returning in {_insuranceConfig.ReturnTimeOverrideSeconds} seconds" - ); + logger.Debug($"Insurance override used: returning in {_insuranceConfig.ReturnTimeOverrideSeconds} seconds"); } return timeUtil.GetTimeStamp() + _insuranceConfig.ReturnTimeOverrideSeconds; } - var insuranceReturnTimeBonusSum = pmcData.GetBonusValueFromProfile( - BonusType.InsuranceReturnTime - ); + var insuranceReturnTimeBonusSum = pmcData.GetBonusValueFromProfile(BonusType.InsuranceReturnTime); // A negative bonus implies a faster return, since we subtract later, invert the value here var insuranceReturnTimeBonusPercent = -(insuranceReturnTimeBonusSum / 100); var traderMinReturnAsSeconds = trader.Insurance.MinReturnHour * TimeUtil.OneHourAsSeconds; var traderMaxReturnAsSeconds = trader.Insurance.MaxReturnHour * TimeUtil.OneHourAsSeconds; - var randomisedReturnTimeSeconds = randomUtil.GetDouble( - traderMinReturnAsSeconds.Value, - traderMaxReturnAsSeconds.Value - ); + var randomisedReturnTimeSeconds = randomUtil.GetDouble(traderMinReturnAsSeconds.Value, traderMaxReturnAsSeconds.Value); // Check for Mark of The Unheard in players special slots (only slot item can fit) var globals = databaseService.GetGlobals(); - var hasMarkOfUnheard = itemHelper.HasItemWithTpl( - pmcData.Inventory.Items, - ItemTpl.MARKOFUNKNOWN_MARK_OF_THE_UNHEARD, - "SpecialSlot" - ); + var hasMarkOfUnheard = itemHelper.HasItemWithTpl(pmcData.Inventory.Items, ItemTpl.MARKOFUNKNOWN_MARK_OF_THE_UNHEARD, "SpecialSlot"); if (hasMarkOfUnheard) // Reduce return time by globals multiplier value { - randomisedReturnTimeSeconds *= globals - .Configuration - .Insurance - .CoefOfHavingMarkOfUnknown; + randomisedReturnTimeSeconds *= globals.Configuration.Insurance.CoefOfHavingMarkOfUnknown; } // EoD has 30% faster returns - if ( - globals.Configuration.Insurance.EditionSendingMessageTime.TryGetValue( - pmcData.Info.GameVersion, - out var editionModifier - ) - ) + if (globals.Configuration.Insurance.EditionSendingMessageTime.TryGetValue(pmcData.Info.GameVersion, out var editionModifier)) { randomisedReturnTimeSeconds *= editionModifier.Multiplier; } // Calculate the final return time based on our bonus percent - var finalReturnTimeSeconds = - randomisedReturnTimeSeconds * (1d - insuranceReturnTimeBonusPercent); + var finalReturnTimeSeconds = randomisedReturnTimeSeconds * (1d - insuranceReturnTimeBonusPercent); return timeUtil.GetTimeStamp() + finalReturnTimeSeconds; } @@ -230,10 +194,7 @@ public class InsuranceService( ///
/// Player/session id /// Gear to store - generated by GetGearLostInRaid() - public void StoreGearLostInRaidToSendLater( - MongoId sessionID, - List equipmentPkg - ) + public void StoreGearLostInRaidToSendLater(MongoId sessionID, List equipmentPkg) { // Process all insured items lost in-raid foreach (var gear in equipmentPkg) @@ -249,24 +210,16 @@ public class InsuranceService( /// Insured items lost in a raid /// Player profile /// InsuranceEquipmentPkg list - public List MapInsuredItemsToTrader( - MongoId sessionId, - IEnumerable lostInsuredItems, - PmcData pmcProfile - ) + public List MapInsuredItemsToTrader(MongoId sessionId, IEnumerable lostInsuredItems, PmcData pmcProfile) { List result = []; foreach (var lostItem in lostInsuredItems) { - var insuranceDetails = pmcProfile.InsuredItems.FirstOrDefault(insuredItem => - insuredItem.ItemId == lostItem.Id - ); + var insuranceDetails = pmcProfile.InsuredItems.FirstOrDefault(insuredItem => insuredItem.ItemId == lostItem.Id); if (insuranceDetails is null) { - logger.Error( - $"unable to find insurance details for item id: {lostItem.Id} with tpl: {lostItem.Template}" - ); + logger.Error($"unable to find insurance details for item id: {lostItem.Id} with tpl: {lostItem.Template}"); continue; } @@ -339,9 +292,7 @@ public class InsuranceService( AddInsuranceItemToArray(sessionId, traderId, itemToReturnToPlayer); // Remove item from insured items array as it has been processed - pmcData.InsuredItems = pmcData - .InsuredItems.Where(item => item.ItemId != itemToReturnToPlayer.Id) - .ToList(); + pmcData.InsuredItems = pmcData.InsuredItems.Where(item => item.ItemId != itemToReturnToPlayer.Id).ToList(); } /// @@ -383,11 +334,7 @@ public class InsuranceService( /// Item to be insured /// Trader item is insured with /// price in roubles - public double GetRoublePriceToInsureItemWithTrader( - PmcData? pmcData, - Item inventoryItem, - MongoId traderId - ) + public double GetRoublePriceToInsureItemWithTrader(PmcData? pmcData, Item inventoryItem, MongoId traderId) { var price = itemHelper.GetStaticItemPrice(inventoryItem.Template) diff --git a/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs b/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs index 568b123e..2ed8573d 100644 --- a/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/ItemBaseClassService.cs @@ -104,9 +104,7 @@ public class ItemBaseClassService( // Not found if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - serverLocalisationService.GetText("baseclass-item_not_found", itemTpl) - ); + logger.Debug(serverLocalisationService.GetText("baseclass-item_not_found", itemTpl)); } // Not found in cache, Hydrate again - some mods add items late in server startup lifecycle @@ -120,9 +118,7 @@ public class ItemBaseClassService( return baseClassList.Overlaps(baseClasses); } - logger.Warning( - serverLocalisationService.GetText("baseclass-item_not_found_failed", itemTpl) - ); + logger.Warning(serverLocalisationService.GetText("baseclass-item_not_found_failed", itemTpl)); return false; } @@ -160,9 +156,7 @@ public class ItemBaseClassService( // Not found if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - serverLocalisationService.GetText("baseclass-item_not_found", itemTpl) - ); + logger.Debug(serverLocalisationService.GetText("baseclass-item_not_found", itemTpl)); } // Not found in cache, Hydrate again - some mods add items late in server startup lifecycle @@ -176,9 +170,7 @@ public class ItemBaseClassService( return baseClassList.Contains(baseClasses); } - logger.Warning( - serverLocalisationService.GetText("baseclass-item_not_found_failed", itemTpl) - ); + logger.Warning(serverLocalisationService.GetText("baseclass-item_not_found_failed", itemTpl)); return false; } diff --git a/Libraries/SPTarkov.Server.Core/Services/LocaleService.cs b/Libraries/SPTarkov.Server.Core/Services/LocaleService.cs index 858c72c0..91eba8c1 100644 --- a/Libraries/SPTarkov.Server.Core/Services/LocaleService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/LocaleService.cs @@ -7,11 +7,7 @@ using SPTarkov.Server.Core.Servers; namespace SPTarkov.Server.Core.Services; [Injectable(InjectionType.Singleton)] -public class LocaleService( - ISptLogger logger, - DatabaseServer databaseServer, - ConfigServer configServer -) +public class LocaleService(ISptLogger logger, DatabaseServer databaseServer, ConfigServer configServer) { protected readonly LocaleConfig _localeConfig = configServer.GetConfig(); private string _chosenServerLocale = string.Empty; @@ -26,10 +22,7 @@ public class LocaleService( var languageToUse = string.IsNullOrEmpty(language) ? GetDesiredGameLocale() : language; // if it can't get locales for language provided, default to en - if ( - TryGetLocaleDb(languageToUse, out var localeToReturn) - || TryGetLocaleDb("en", out localeToReturn) - ) + if (TryGetLocaleDb(languageToUse, out var localeToReturn) || TryGetLocaleDb("en", out localeToReturn)) { return localeToReturn; } @@ -43,17 +36,10 @@ public class LocaleService( /// The language key for which the locale database should be retrieved. /// The resulting locale database as a dictionary, or null if the operation fails. /// True if the locale database was successfully retrieved, otherwise false. - protected bool TryGetLocaleDb( - string languageKey, - out Dictionary? localeToReturn - ) + protected bool TryGetLocaleDb(string languageKey, out Dictionary? localeToReturn) { localeToReturn = null; - if ( - !databaseServer - .GetTables() - .Locales.Global.TryGetValue(languageKey, out var keyedLocales) - ) + if (!databaseServer.GetTables().Locales.Global.TryGetValue(languageKey, out var keyedLocales)) { return false; } @@ -72,11 +58,7 @@ public class LocaleService( { if (string.IsNullOrEmpty(_chosenClientLocale)) { - _chosenClientLocale = string.Equals( - _localeConfig.GameLocale, - "system", - StringComparison.OrdinalIgnoreCase - ) + _chosenClientLocale = string.Equals(_localeConfig.GameLocale, "system", StringComparison.OrdinalIgnoreCase) ? GetPlatformForClientLocale() : _localeConfig.GameLocale.ToLowerInvariant(); // Use custom locale value } @@ -93,11 +75,7 @@ public class LocaleService( { if (string.IsNullOrEmpty(_chosenServerLocale)) { - _chosenServerLocale = string.Equals( - _localeConfig.ServerLocale, - "system", - StringComparison.OrdinalIgnoreCase - ) + _chosenServerLocale = string.Equals(_localeConfig.ServerLocale, "system", StringComparison.OrdinalIgnoreCase) ? GetPlatformForServerLocale() : _localeConfig.ServerLocale.ToLowerInvariant(); // Use custom locale value } diff --git a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs index 188f21f0..b9d0c162 100644 --- a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs @@ -59,10 +59,7 @@ public class LocationLifecycleService( /// /// Handle client/match/local/start /// - public virtual StartLocalRaidResponseData StartLocalRaid( - MongoId sessionId, - StartLocalRaidRequestData request - ) + public virtual StartLocalRaidResponseData StartLocalRaid(MongoId sessionId, StartLocalRaidRequestData request) { logger.Debug($"Starting: {request.Location}"); @@ -84,15 +81,8 @@ public class LocationLifecycleService( // PVE_OFFLINE_xxxxxxxx_27_06_2025_20_20_44 ServerId = $"{request.Location}.{request.PlayerSide} {timeUtil.GetTimeStamp()}", // Only used for metrics in client ServerSettings = databaseService.GetLocationServices(), // TODO - is this per map or global? - Profile = new ProfileInsuredItems - { - InsuredItems = playerProfile.CharacterData.PmcData.InsuredItems, - }, - LocationLoot = GenerateLocationAndLoot( - sessionId, - request.Location, - !request.ShouldSkipLootGeneration ?? true - ), + Profile = new ProfileInsuredItems { InsuredItems = playerProfile.CharacterData.PmcData.InsuredItems }, + LocationLoot = GenerateLocationAndLoot(sessionId, request.Location, !request.ShouldSkipLootGeneration ?? true), TransitionType = TransitionType.NONE, Transition = new Transition { @@ -112,9 +102,7 @@ public class LocationLifecycleService( } // Get data stored at end of previous raid (if any) - var transitionData = profileActivityService - .GetProfileActivityRaidData(sessionId) - ?.LocationTransit; + var transitionData = profileActivityService.GetProfileActivityRaidData(sessionId)?.LocationTransit; if (transitionData is not null) { @@ -167,9 +155,7 @@ public class LocationLifecycleService( } // Find only scav extracts and overwrite existing exits with them - var scavExtracts = mapExtracts.Where(extract => - string.Equals(extract.Side, "scav", StringComparison.OrdinalIgnoreCase) - ); + var scavExtracts = mapExtracts.Where(extract => string.Equals(extract.Side, "scav", StringComparison.OrdinalIgnoreCase)); if (scavExtracts.Any()) // Scav extracts found, use them { @@ -186,22 +172,14 @@ public class LocationLifecycleService( foreach (var botId in _pmcConfig.HostilitySettings) { var configHostilityChanges = _pmcConfig.HostilitySettings[botId.Key]; - var locationBotHostilityDetails = - location.BotLocationModifier.AdditionalHostilitySettings.FirstOrDefault( - botSettings => - string.Equals( - botSettings.BotRole, - botId.Key, - StringComparison.OrdinalIgnoreCase - ) - ); + var locationBotHostilityDetails = location.BotLocationModifier.AdditionalHostilitySettings.FirstOrDefault(botSettings => + string.Equals(botSettings.BotRole, botId.Key, StringComparison.OrdinalIgnoreCase) + ); // No matching bot in config, skip if (locationBotHostilityDetails is null) { - logger.Warning( - $"No bot: {botId} hostility values found on: {location.Id}, can only edit existing. Skipping" - ); + logger.Warning($"No bot: {botId} hostility values found on: {location.Id}, can only edit existing. Skipping"); continue; } @@ -221,10 +199,9 @@ public class LocationLifecycleService( locationBotHostilityDetails.ChancedEnemies = []; foreach (var chanceDetailsToApply in configHostilityChanges.ChancedEnemies) { - var locationBotDetails = - locationBotHostilityDetails.ChancedEnemies.FirstOrDefault(botChance => - botChance.Role == chanceDetailsToApply.Role - ); + var locationBotDetails = locationBotHostilityDetails.ChancedEnemies.FirstOrDefault(botChance => + botChance.Role == chanceDetailsToApply.Role + ); if (locationBotDetails is not null) // Existing { @@ -251,29 +228,25 @@ public class LocationLifecycleService( // Adjust vs bear hostility chance if (configHostilityChanges.BearEnemyChance is not null) { - locationBotHostilityDetails.BearEnemyChance = - configHostilityChanges.BearEnemyChance; + locationBotHostilityDetails.BearEnemyChance = configHostilityChanges.BearEnemyChance; } // Adjust vs usec hostility chance if (configHostilityChanges.UsecEnemyChance is not null) { - locationBotHostilityDetails.UsecEnemyChance = - configHostilityChanges.UsecEnemyChance; + locationBotHostilityDetails.UsecEnemyChance = configHostilityChanges.UsecEnemyChance; } // Adjust vs savage hostility chance if (configHostilityChanges.SavageEnemyChance is not null) { - locationBotHostilityDetails.SavageEnemyChance = - configHostilityChanges.SavageEnemyChance; + locationBotHostilityDetails.SavageEnemyChance = configHostilityChanges.SavageEnemyChance; } // Adjust vs scav hostility behaviour if (configHostilityChanges.SavagePlayerBehaviour is not null) { - locationBotHostilityDetails.SavagePlayerBehaviour = - configHostilityChanges.SavagePlayerBehaviour; + locationBotHostilityDetails.SavagePlayerBehaviour = configHostilityChanges.SavagePlayerBehaviour; } } } @@ -285,11 +258,7 @@ public class LocationLifecycleService( /// Map name /// OPTIONAL - Should loot be generated for the map before being returned /// LocationBase with loot - public virtual LocationBase GenerateLocationAndLoot( - MongoId sessionId, - string name, - bool generateLoot = true - ) + public virtual LocationBase GenerateLocationAndLoot(MongoId sessionId, string name, bool generateLoot = true) { var location = databaseService.GetLocation(name); var locationBaseClone = cloner.Clone(location.Base); @@ -314,9 +283,7 @@ public class LocationLifecycleService( // Adjust raid values based raid type (e.g. Scav or PMC) LocationConfig? locationConfigClone = null; - var raidAdjustments = profileActivityService - .GetProfileActivityRaidData(sessionId) - ?.RaidAdjustments; + var raidAdjustments = profileActivityService.GetProfileActivityRaidData(sessionId)?.RaidAdjustments; if (raidAdjustments is not null) { locationConfigClone = cloner.Clone(_locationConfig); // Clone values so they can be used to reset originals later @@ -380,35 +347,17 @@ public class LocationLifecycleService( // TODO - Persist each players last visited location history over multiple transits, e.g. using InMemoryCacheService, need to take care to not let data get stored forever // Store transfer data for later use in `startLocalRaid()` when next raid starts request.LocationTransit.SptExitName = request.Results.ExitName; - profileActivityService.GetProfileActivityRaidData(sessionId).LocationTransit = - request.LocationTransit; + profileActivityService.GetProfileActivityRaidData(sessionId).LocationTransit = request.LocationTransit; } if (!isPmc) { - HandlePostRaidPlayerScav( - sessionId, - pmcProfile, - scavProfile, - isDead, - isTransfer, - isSurvived, - request - ); + HandlePostRaidPlayerScav(sessionId, pmcProfile, scavProfile, isDead, isTransfer, isSurvived, request); return; } - HandlePostRaidPmc( - sessionId, - fullProfile, - scavProfile, - isDead, - isSurvived, - isTransfer, - request, - locationName - ); + HandlePostRaidPmc(sessionId, fullProfile, scavProfile, isDead, isSurvived, isTransfer, request, locationName); // Handle car extracts if (TookCarExtract(request.Results)) @@ -509,14 +458,9 @@ public class LocationLifecycleService( // Check if new standing has leveled up trader traderHelper.LevelUp(fenceId, pmcData); - pmcData.TradersInfo[fenceId].LoyaltyLevel = Math.Max( - (int)pmcData.TradersInfo[fenceId].LoyaltyLevel, - 1 - ); + pmcData.TradersInfo[fenceId].LoyaltyLevel = Math.Max((int)pmcData.TradersInfo[fenceId].LoyaltyLevel, 1); - logger.Debug( - $"Car extract: {extractName} used, total times taken: {pmcData.CarExtractCounts[extractName]}" - ); + logger.Debug($"Car extract: {extractName} used, total times taken: {pmcData.CarExtractCounts[extractName]}"); // Copy updated fence rep values into scav profile to ensure consistency var scavData = profileHelper.GetScavProfile(sessionId); @@ -547,10 +491,7 @@ public class LocationLifecycleService( // Check if new standing has leveled up trader traderHelper.LevelUp(fenceId, pmcData); - pmcData.TradersInfo[fenceId].LoyaltyLevel = Math.Max( - (int)pmcData.TradersInfo[fenceId].LoyaltyLevel, - 1 - ); + pmcData.TradersInfo[fenceId].LoyaltyLevel = Math.Max((int)pmcData.TradersInfo[fenceId].LoyaltyLevel, 1); logger.Debug($"COOP extract: {extractName} used"); @@ -567,11 +508,7 @@ public class LocationLifecycleService( /// Amount gained for the first extract /// Number of times extract was taken /// Fence standing after taking extract - protected double GetFenceStandingAfterExtract( - PmcData pmcData, - double baseGain, - double extractCount - ) + protected double GetFenceStandingAfterExtract(PmcData pmcData, double baseGain, double extractCount) { var fenceId = Traders.FENCE; var fenceStanding = pmcData.TradersInfo[fenceId].Standing; @@ -583,9 +520,7 @@ public class LocationLifecycleService( var fenceMax = _traderConfig.Fence.PlayerRepMax; var fenceMin = _traderConfig.Fence.PlayerRepMin; var newFenceStanding = Math.Clamp(fenceStanding.GetValueOrDefault(0), fenceMin, fenceMax); - logger.Debug( - $"Old vs new fence standing: {pmcData.TradersInfo[fenceId].Standing}, {newFenceStanding}" - ); + logger.Debug($"Old vs new fence standing: {pmcData.TradersInfo[fenceId].Standing}, {newFenceStanding}"); return Math.Round(newFenceStanding, 2); } @@ -638,13 +573,7 @@ public class LocationLifecycleService( // We want scav inventory to persist into next raid when pscav is moving between maps // Also adjust FiR status when exit was runthrough - inRaidHelper.SetInventory( - sessionId, - scavProfile, - postRaidProfile, - isSurvived, - isTransfer - ); + inRaidHelper.SetInventory(sessionId, scavProfile, postRaidProfile, isSurvived, isTransfer); } scavProfile.Info.Level = postRaidProfile.Info.Level; @@ -672,20 +601,12 @@ public class LocationLifecycleService( logger.Error($"post raid fence data not found for: {sessionId}"); } - scavProfile.TradersInfo[Traders.FENCE].Standing = Math.Clamp( - postRaidFenceData.Standing.Value, - fenceMin, - fenceMax - ); + scavProfile.TradersInfo[Traders.FENCE].Standing = Math.Clamp(postRaidFenceData.Standing.Value, fenceMin, fenceMax); // Successful extract as scav, give some rep - if ( - IsPlayerSurvived(request.Results) - && scavProfile.TradersInfo[Traders.FENCE].Standing < fenceMax - ) + if (IsPlayerSurvived(request.Results) && scavProfile.TradersInfo[Traders.FENCE].Standing < fenceMax) { - scavProfile.TradersInfo[Traders.FENCE].Standing += - _inRaidConfig.ScavExtractStandingGain; + scavProfile.TradersInfo[Traders.FENCE].Standing += _inRaidConfig.ScavExtractStandingGain; } // Copy scav fence values to PMC profile @@ -725,19 +646,12 @@ public class LocationLifecycleService( var pmcQuest = pmcProfile.Quests.FirstOrDefault(quest => quest.QId == scavQuest.QId); if (pmcQuest is null) { - logger.Warning( - serverLocalisationService.GetText( - "inraid-unable_to_migrate_pmc_quest_not_found_in_profile", - scavQuest.QId - ) - ); + logger.Warning(serverLocalisationService.GetText("inraid-unable_to_migrate_pmc_quest_not_found_in_profile", scavQuest.QId)); continue; } // Get counters related to scav quest - var matchingCounters = scavProfile.TaskConditionCounters.Where(counter => - counter.Value.SourceId == scavQuest.QId - ); + var matchingCounters = scavProfile.TaskConditionCounters.Where(counter => counter.Value.SourceId == scavQuest.QId); if (matchingCounters is null) { @@ -774,10 +688,7 @@ public class LocationLifecycleService( // Check each body part foreach (var (_, hpValues) in profileHealth.BodyParts) { - if ( - transitSettings.AdjustLimbHealthPoints.GetValueOrDefault() - && hpValues.Health.Minimum <= 0 - ) + if (transitSettings.AdjustLimbHealthPoints.GetValueOrDefault() && hpValues.Health.Minimum <= 0) { // Limb has been destroyed, reset hpValues.Health.Current = randomUtil.GetPercentOfValue( @@ -793,9 +704,7 @@ public class LocationLifecycleService( } // Limb has effects, check for blacklisted values and remove - var keysToRemove = hpValues - .Effects.Keys.Where(key => transitSettings.EffectsToRemove.Contains(key)) - .ToHashSet(); + var keysToRemove = hpValues.Effects.Keys.Where(key => transitSettings.EffectsToRemove.Contains(key)).ToHashSet(); foreach (var key in keysToRemove) { @@ -835,13 +744,7 @@ public class LocationLifecycleService( var lostQuestItems = postRaidProfile.GetQuestItemsInProfile(); // Update inventory - inRaidHelper.SetInventory( - sessionId, - serverPmcProfile, - postRaidProfile, - isSurvived, - isTransfer - ); + inRaidHelper.SetInventory(sessionId, serverPmcProfile, postRaidProfile, isSurvived, isTransfer); serverPmcProfile.Info.Level = postRaidProfile.Info.Level; serverPmcProfile.Skills = postRaidProfile.Skills; @@ -858,12 +761,7 @@ public class LocationLifecycleService( serverPmcProfile.Quests = ProcessPostRaidQuests(postRaidProfile.Quests); // MUST occur AFTER processPostRaidQuests() - LightkeeperQuestWorkaround( - sessionId, - postRaidProfile.Quests, - preRaidProfileQuestDataClone, - serverPmcProfile - ); + LightkeeperQuestWorkaround(sessionId, postRaidProfile.Quests, preRaidProfileQuestDataClone, serverPmcProfile); serverPmcProfile.WishList = postRaidProfile.WishList; @@ -893,18 +791,10 @@ public class LocationLifecycleService( MergePmcAndScavEncyclopedias(serverPmcProfile, scavProfile); // Handle temp, hydration, limb hp/effects - healthHelper.ApplyHealthChangesToProfile( - sessionId, - serverPmcProfile, - postRaidProfile.Health, - isDead - ); + healthHelper.ApplyHealthChangesToProfile(sessionId, serverPmcProfile, postRaidProfile.Health, isDead); // Required when player loses limb in-raid and fixes it, max now stuck at 50% or less if lost multiple times - var profileTemplate = profileHelper.GetProfileTemplateForSide( - fullServerProfile.ProfileInfo.Edition, - serverPmcProfile.Info.Side - ); + var profileTemplate = profileHelper.GetProfileTemplateForSide(fullServerProfile.ProfileInfo.Edition, serverPmcProfile.Info.Side); serverPmcProfile.ResetMaxLimbHp(profileTemplate); if (isTransfer) @@ -922,31 +812,19 @@ public class LocationLifecycleService( // MUST occur AFTER quests have post raid quest data has been merged "processPostRaidQuests()" // Player is dead + had quest items, check and fix any broken find item quests { - CheckForAndFixPickupQuestsAfterDeath( - sessionId, - lostQuestItems, - serverPmcProfile.Quests - ); + CheckForAndFixPickupQuestsAfterDeath(sessionId, lostQuestItems, serverPmcProfile.Quests); } if (postRaidProfile.Stats.Eft.Aggressor is not null) { // get the aggressor ID from the client request body postRaidProfile.Stats.Eft.Aggressor.ProfileId = request.Results.KillerId; - pmcChatResponseService.SendKillerResponse( - sessionId, - serverPmcProfile, - postRaidProfile.Stats.Eft.Aggressor - ); + pmcChatResponseService.SendKillerResponse(sessionId, serverPmcProfile, postRaidProfile.Stats.Eft.Aggressor); } inRaidHelper.DeleteInventory(serverPmcProfile, sessionId); - inRaidHelper.RemoveFiRStatusFromItemsInContainer( - sessionId, - serverPmcProfile, - "SecuredContainer" - ); + inRaidHelper.RemoveFiRStatusFromItemsInContainer(sessionId, serverPmcProfile, "SecuredContainer"); } // Must occur AFTER killer messages have been sent @@ -954,9 +832,7 @@ public class LocationLifecycleService( var roles = new HashSet { "pmcbear", "pmcusec" }; - var victims = postRaidProfile.Stats.Eft.Victims.Where(victim => - roles.Contains(victim.Role.ToLowerInvariant()) - ); + var victims = postRaidProfile.Stats.Eft.Victims.Where(victim => roles.Contains(victim.Role.ToLowerInvariant())); if (victims is not null && victims.Any()) // Player killed PMCs, send some mail responses to them { @@ -979,18 +855,12 @@ public class LocationLifecycleService( { // Exclude completed quests var activeQuestIdsInProfile = profileQuests - .Where(quest => - quest.Status - is not QuestStatusEnum.AvailableForStart - and not QuestStatusEnum.Success - ) + .Where(quest => quest.Status is not QuestStatusEnum.AvailableForStart and not QuestStatusEnum.Success) .Select(status => status.QId) .ToHashSet(); // Get db details of quests we found above - var questDb = databaseService - .GetQuests() - .Values.Where(quest => activeQuestIdsInProfile.Contains(quest.Id)); + var questDb = databaseService.GetQuests().Values.Where(quest => activeQuestIdsInProfile.Contains(quest.Id)); foreach (var lostItem in lostQuestItems) { @@ -999,14 +869,11 @@ public class LocationLifecycleService( var matchingQuests = questDb .Where(quest => { - var matchingCondition = quest.Conditions.AvailableForFinish.FirstOrDefault( - questCondition => - questCondition.ConditionType == "FindItem" - && ( - questCondition.Target.IsList - ? questCondition.Target.List - : [questCondition.Target.Item] - ).Contains(lostItem.Template) + var matchingCondition = quest.Conditions.AvailableForFinish.FirstOrDefault(questCondition => + questCondition.ConditionType == "FindItem" + && (questCondition.Target.IsList ? questCondition.Target.List : [questCondition.Target.Item]).Contains( + lostItem.Template + ) ); if (matchingCondition is null) // Quest doesnt have a matching condition @@ -1023,18 +890,14 @@ public class LocationLifecycleService( // Fail if multiple were found if (matchingQuests.Count != 1) { - logger.Error( - $"Unable to fix quest item: {lostItem}, {matchingQuests.Count} matching quests found, expected 1" - ); + logger.Error($"Unable to fix quest item: {lostItem}, {matchingQuests.Count} matching quests found, expected 1"); continue; } var matchingQuest = matchingQuests[0]; // We have a match, remove the condition id from profile to reset progress and let player pick item up again - var profileQuestToUpdate = profileQuests.FirstOrDefault(questStatus => - questStatus.QId == matchingQuest.Id - ); + var profileQuestToUpdate = profileQuests.FirstOrDefault(questStatus => questStatus.QId == matchingQuest.Id); if (profileQuestToUpdate is null) // Profile doesn't have a matching quest { @@ -1102,9 +965,7 @@ public class LocationLifecycleService( /// List of adjusted QuestStatus post-raid protected List ProcessPostRaidQuests(List questsToProcess) { - var failedQuests = questsToProcess.Where(quest => - quest.Status == QuestStatusEnum.MarkedAsFailed - ); + var failedQuests = questsToProcess.Where(quest => quest.Status == QuestStatusEnum.MarkedAsFailed); foreach (var failedQuest in failedQuests) { var dbQuest = databaseService.GetQuests()[failedQuest.QId]; @@ -1134,12 +995,8 @@ public class LocationLifecycleService( { foreach (var traderId in tradersClientProfile) { - var serverProfileTrader = tradersServerProfile - .FirstOrDefault(x => x.Key == traderId.Key) - .Value; - var clientProfileTrader = tradersClientProfile - .FirstOrDefault(x => x.Key == traderId.Key) - .Value; + var serverProfileTrader = tradersServerProfile.FirstOrDefault(x => x.Key == traderId.Key).Value; + var clientProfileTrader = tradersClientProfile.FirstOrDefault(x => x.Key == traderId.Key).Value; if (serverProfileTrader is null || clientProfileTrader is null) { continue; @@ -1162,11 +1019,7 @@ public class LocationLifecycleService( { if (request.LostInsuredItems is not null && request.LostInsuredItems.Any()) { - var mappedItems = insuranceService.MapInsuredItemsToTrader( - sessionId, - request.LostInsuredItems, - preRaidPmcProfile - ); + var mappedItems = insuranceService.MapInsuredItemsToTrader(sessionId, request.LostInsuredItems, preRaidPmcProfile); // Is possible to have items in lostInsuredItems but removed before reaching mappedItems if (mappedItems.Count == 0) @@ -1176,11 +1029,7 @@ public class LocationLifecycleService( insuranceService.StoreGearLostInRaidToSendLater(sessionId, mappedItems); - insuranceService.StartPostRaidInsuranceLostProcess( - preRaidPmcProfile, - sessionId, - locationName - ); + insuranceService.StartPostRaidInsuranceLostProcess(preRaidPmcProfile, sessionId, locationName); } } @@ -1201,12 +1050,7 @@ public class LocationLifecycleService( /// True if dead protected bool IsPlayerDead(EndRaidResult results) { - var deathEnums = new List - { - ExitStatus.KILLED, - ExitStatus.MISSINGINACTION, - ExitStatus.LEFT, - }; + var deathEnums = new List { ExitStatus.KILLED, ExitStatus.MISSINGINACTION, ExitStatus.LEFT }; return deathEnums.Contains(results.Result.Value); } @@ -1254,18 +1098,13 @@ public class LocationLifecycleService( /// /// Profile to add customisations to /// All profile achievements at the end of a raid - protected void ProcessAchievementRewards( - SptProfile fullProfile, - Dictionary? postRaidAchievements - ) + protected void ProcessAchievementRewards(SptProfile fullProfile, Dictionary? postRaidAchievements) { var sessionId = fullProfile.ProfileInfo.ProfileId; var pmcProfile = fullProfile.CharacterData.PmcData; var preRaidAchievementIds = fullProfile.CharacterData.PmcData.Achievements; var postRaidAchievementIds = postRaidAchievements; - var achievementIdsAcquiredThisRaid = postRaidAchievementIds.Where(id => - !preRaidAchievementIds.Contains(id) - ); + var achievementIdsAcquiredThisRaid = postRaidAchievementIds.Where(id => !preRaidAchievementIds.Contains(id)); // Get achievement data from db var achievementsDb = databaseService.GetTemplates().Achievements; diff --git a/Libraries/SPTarkov.Server.Core/Services/MailSendService.cs b/Libraries/SPTarkov.Server.Core/Services/MailSendService.cs index 8180c0ce..e9e12d9b 100644 --- a/Libraries/SPTarkov.Server.Core/Services/MailSendService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/MailSendService.cs @@ -30,11 +30,7 @@ public class MailSendService( ) { private const string _systemSenderId = "59e7125688a45068a6249071"; - protected readonly FrozenSet _messageTypes = - [ - MessageType.NpcTraderMessage, - MessageType.FleamarketMessage, - ]; + protected readonly FrozenSet _messageTypes = [MessageType.NpcTraderMessage, MessageType.FleamarketMessage]; protected readonly FrozenSet _slotNames = ["hideout", "main"]; /// @@ -61,12 +57,7 @@ public class MailSendService( { if (trader is null) { - logger.Error( - serverLocalisationService.GetText( - "mailsend-missing_trader", - new { messageType, sessionId } - ) - ); + logger.Error(serverLocalisationService.GetText("mailsend-missing_trader", new { messageType, sessionId })); return; } @@ -125,12 +116,7 @@ public class MailSendService( { if (trader is null) { - logger.Error( - serverLocalisationService.GetText( - "mailsend-missing_trader", - new { messageType, sessionId } - ) - ); + logger.Error(serverLocalisationService.GetText("mailsend-missing_trader", new { messageType, sessionId })); return; } @@ -149,8 +135,7 @@ public class MailSendService( if (items is not null && items.Any()) { details.Items.AddRange(items); - details.ItemsMaxStorageLifetimeSeconds = - maxStorageTimeSeconds > 0 ? maxStorageTimeSeconds : 172800; + details.ItemsMaxStorageLifetimeSeconds = maxStorageTimeSeconds > 0 ? maxStorageTimeSeconds : 172800; } if (systemData is not null) @@ -308,11 +293,7 @@ public class MailSendService( } // Store reward items inside message and set appropriate flags inside message - AddRewardItemsToMessage( - message, - itemsToSendToPlayer, - messageDetails.ItemsMaxStorageLifetimeSeconds - ); + AddRewardItemsToMessage(message, itemsToSendToPlayer, messageDetails.ItemsMaxStorageLifetimeSeconds); if (messageDetails.ProfileChangeEvents is not null) { @@ -324,15 +305,9 @@ public class MailSendService( // TODO: clean up old code here // Offer Sold notifications are now separate from the main notification - if ( - _messageTypes.Contains(senderDialog.Type ?? MessageType.SystemMessage) - && messageDetails?.RagfairDetails is not null - ) + if (_messageTypes.Contains(senderDialog.Type ?? MessageType.SystemMessage) && messageDetails?.RagfairDetails is not null) { - var offerSoldMessage = notifierHelper.CreateRagfairOfferSoldNotification( - message, - messageDetails.RagfairDetails - ); + var offerSoldMessage = notifierHelper.CreateRagfairOfferSoldNotification(message, messageDetails.RagfairDetails); notificationSendHelper.SendMessage(messageDetails.RecipientId, offerSoldMessage); message.MessageType = MessageType.MessageWithItems; // Should prevent getting the same notification popup twice } @@ -351,14 +326,9 @@ public class MailSendService( public void SendPlayerMessageToNpc(MongoId sessionId, string targetNpcId, string message) { var playerProfile = saveServer.GetProfile(sessionId); - if ( - playerProfile.DialogueRecords is null - || !playerProfile.DialogueRecords.TryGetValue(targetNpcId, out var dialogWithNpc) - ) + if (playerProfile.DialogueRecords is null || !playerProfile.DialogueRecords.TryGetValue(targetNpcId, out var dialogWithNpc)) { - logger.Error( - serverLocalisationService.GetText("mailsend-missing_npc_dialog", targetNpcId) - ); + logger.Error(serverLocalisationService.GetText("mailsend-missing_npc_dialog", targetNpcId)); return; } @@ -395,20 +365,13 @@ public class MailSendService( HasRewards = false, RewardCollected = false, SystemData = messageDetails.SystemData, - ProfileChangeEvents = - messageDetails.ProfileChangeEvents?.Count == 0 - ? messageDetails.ProfileChangeEvents - : null, + ProfileChangeEvents = messageDetails.ProfileChangeEvents?.Count == 0 ? messageDetails.ProfileChangeEvents : null, }; // Handle replyTo if (messageDetails.ReplyTo is not null) { - var replyMessage = GetMessageToReplyTo( - messageDetails.RecipientId, - messageDetails.ReplyTo, - dialogId - ); + var replyMessage = GetMessageToReplyTo(messageDetails.RecipientId, messageDetails.ReplyTo, dialogId); if (replyMessage is not null) { message.ReplyTo = replyMessage; @@ -435,9 +398,7 @@ public class MailSendService( return null; } - var messageToReplyTo = currentDialogue.Messages?.FirstOrDefault(message => - message.Id == replyToId - ); + var messageToReplyTo = currentDialogue.Messages?.FirstOrDefault(message => message.Id == replyToId); if (messageToReplyTo is null) { return null; @@ -459,11 +420,7 @@ public class MailSendService( /// Message to add items to /// Items to add to message /// Total time the items are stored in mail before being deleted - private void AddRewardItemsToMessage( - Message message, - MessageItems? itemsToSendToPlayer, - long? maxStorageTimeSeconds - ) + private void AddRewardItemsToMessage(Message message, MessageItems? itemsToSendToPlayer, long? maxStorageTimeSeconds) { if ((itemsToSendToPlayer?.Data?.Count ?? 0) > 0) { @@ -480,10 +437,7 @@ public class MailSendService( /// The type of the dialog that will hold the reward items being processed /// Details fo the message e.g. Text, items it has etc. /// Sanitised items - private MessageItems ProcessItemsBeforeAddingToMail( - MessageType? dialogType, - SendMessageDetails messageDetails - ) + private MessageItems ProcessItemsBeforeAddingToMail(MessageType? dialogType, SendMessageDetails messageDetails) { var items = databaseService.GetItems(); @@ -509,11 +463,7 @@ public class MailSendService( } // Prep return object - itemsToSendToPlayer = new MessageItems - { - Stash = new MongoId(parentItem.ParentId), - Data = [], - }; + itemsToSendToPlayer = new MessageItems { Stash = new MongoId(parentItem.ParentId), Data = [] }; // Ensure Ids are unique and cont collide with items in player inventory later messageDetails.Items = cloner.Clone(messageDetails.Items).ReplaceIDs().ToList(); @@ -524,21 +474,14 @@ public class MailSendService( if (!items.TryGetValue(reward.Template, out var itemTemplate)) { logger.Error( - serverLocalisationService.GetText( - "dialog-missing_item_template", - new { tpl = reward.Template, type = dialogType } - ) + serverLocalisationService.GetText("dialog-missing_item_template", new { tpl = reward.Template, type = dialogType }) ); continue; } // Ensure every 'base/root' item has the same parentId + has a slotId of 'main' - if ( - reward.SlotId is null - || reward.SlotId == "hideout" - || reward.ParentId == parentItem.ParentId - ) + if (reward.SlotId is null || reward.SlotId == "hideout" || reward.ParentId == parentItem.ParentId) { // Reward items NEED a parent id + slotId reward.ParentId = parentItem.ParentId; @@ -569,12 +512,7 @@ public class MailSendService( { if (itemTemplate.Properties.StackSlots is not null) { - logger.Error( - serverLocalisationService.GetText( - "mail-unable_to_give_gift_not_handled", - itemTemplate.Id - ) - ); + logger.Error(serverLocalisationService.GetText("mail-unable_to_give_gift_not_handled", itemTemplate.Id)); } // Item is sanitised and ready to be pushed into holding array @@ -634,12 +572,7 @@ public class MailSendService( var senderId = GetMessageSenderIdByType(messageDetails); if (senderId is null) { - throw new Exception( - serverLocalisationService.GetText( - "mail-unable_to_find_message_sender_by_id", - messageDetails.Sender - ) - ); + throw new Exception(serverLocalisationService.GetText("mail-unable_to_find_message_sender_by_id", messageDetails.Sender)); } var dialogsInProfile = dialogueHelper.GetDialogsForProfile(messageDetails.RecipientId); @@ -674,10 +607,7 @@ public class MailSendService( return _systemSenderId; } - if ( - messageDetails.Sender == MessageType.NpcTraderMessage - || messageDetails.DialogType == MessageType.NpcTraderMessage - ) + if (messageDetails.Sender == MessageType.NpcTraderMessage || messageDetails.DialogType == MessageType.NpcTraderMessage) { if (messageDetails.Trader == null && logger.IsLogEnabled(LogLevel.Debug)) { diff --git a/Libraries/SPTarkov.Server.Core/Services/MapMarkerService.cs b/Libraries/SPTarkov.Server.Core/Services/MapMarkerService.cs index bd6d64cf..1eef82c6 100644 --- a/Libraries/SPTarkov.Server.Core/Services/MapMarkerService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/MapMarkerService.cs @@ -47,9 +47,7 @@ public class MapMarkerService(ISptLogger logger) var mapItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == request.Item); // remove marker - var markers = mapItem - .Upd.Map.Markers.Where(marker => marker.X != request.X && marker.Y != request.Y) - .ToList(); + var markers = mapItem.Upd.Map.Markers.Where(marker => marker.X != request.X && marker.Y != request.Y).ToList(); mapItem.Upd.Map.Markers = markers; return mapItem; @@ -69,9 +67,7 @@ public class MapMarkerService(ISptLogger logger) // edit marker // the only thing that is consistent between the old and edit is the X and Y // find the marker where X and Y match - var markerToRemove = mapItem.Upd.Map.Markers.FirstOrDefault(x => - x.X == request.X && x.Y == request.Y - ); + var markerToRemove = mapItem.Upd.Map.Markers.FirstOrDefault(x => x.X == request.X && x.Y == request.Y); if (markerToRemove is null) { diff --git a/Libraries/SPTarkov.Server.Core/Services/MatchBotDetailsCacheService.cs b/Libraries/SPTarkov.Server.Core/Services/MatchBotDetailsCacheService.cs index 6bc824e3..2b013f69 100644 --- a/Libraries/SPTarkov.Server.Core/Services/MatchBotDetailsCacheService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/MatchBotDetailsCacheService.cs @@ -17,8 +17,7 @@ public class MatchBotDetailsCacheService(ISptLogger { private static readonly FrozenSet _sidesToCache = [Sides.PmcUsec, Sides.PmcBear]; - protected readonly ConcurrentDictionary BotDetailsCache = - new(); + protected readonly ConcurrentDictionary BotDetailsCache = new(); /// /// Store a bot in the cache, keyed by its ID. @@ -33,17 +32,12 @@ public class MatchBotDetailsCacheService(ISptLogger if (botToCache.Info?.Nickname is null) { - logger.Warning( - $"Unable to cache: {botToCache.Info?.Settings?.Role} bot with id: {botToCache.Id} as it lacks a nickname" - ); + logger.Warning($"Unable to cache: {botToCache.Info?.Settings?.Role} bot with id: {botToCache.Id} as it lacks a nickname"); return; } // If bot isn't a PMC, skip - if ( - botToCache.Info?.Settings?.Role is null - || !_sidesToCache.Contains(botToCache.Info.Settings.Role) - ) + if (botToCache.Info?.Settings?.Role is null || !_sidesToCache.Contains(botToCache.Info.Settings.Role)) { return; } diff --git a/Libraries/SPTarkov.Server.Core/Services/MatchLocationService.cs b/Libraries/SPTarkov.Server.Core/Services/MatchLocationService.cs index 62e3e731..4b288406 100644 --- a/Libraries/SPTarkov.Server.Core/Services/MatchLocationService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/MatchLocationService.cs @@ -17,8 +17,7 @@ public class MatchLocationService // Find group by id by iterating over all locations and looking for it by groupId foreach (var locationKvP in _locations) { - var matchingGroup = _locations[locationKvP.Key] - .Groups.FirstOrDefault(groupKvP => groupKvP == request.GroupId); + var matchingGroup = _locations[locationKvP.Key].Groups.FirstOrDefault(groupKvP => groupKvP == request.GroupId); if (matchingGroup != null) { _locations[locationKvP.Key].Groups.Remove(request.GroupId); diff --git a/Libraries/SPTarkov.Server.Core/Services/Mod/CustomItemService.cs b/Libraries/SPTarkov.Server.Core/Services/Mod/CustomItemService.cs index 4c6091b0..05a36a03 100644 --- a/Libraries/SPTarkov.Server.Core/Services/Mod/CustomItemService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/Mod/CustomItemService.cs @@ -48,10 +48,7 @@ public class CustomItemService( } // Clone existing item - tables.Templates.Items.TryGetValue( - newItemDetails.ItemTplToClone.Value, - out var itemToClone - ); + tables.Templates.Items.TryGetValue(newItemDetails.ItemTplToClone.Value, out var itemToClone); var itemClone = cloner.Clone(itemToClone); // Update id and parentId of item @@ -62,11 +59,7 @@ public class CustomItemService( AddToItemsDb(newItemId, itemClone); - AddToHandbookDb( - newItemId, - newItemDetails.HandbookParentId, - newItemDetails.HandbookPriceRoubles - ); + AddToHandbookDb(newItemId, newItemDetails.HandbookParentId, newItemDetails.HandbookPriceRoubles); AddToLocaleDbs(newItemDetails.Locales, newItemId); @@ -110,11 +103,7 @@ public class CustomItemService( AddToItemsDb(newItem.Id, newItem); - AddToHandbookDb( - newItem.Id, - newItemDetails.HandbookParentId, - newItemDetails.HandbookPriceRoubles - ); + AddToHandbookDb(newItem.Id, newItemDetails.HandbookParentId, newItemDetails.HandbookPriceRoubles); AddToLocaleDbs(newItemDetails.Locales, newItem.Id); @@ -148,10 +137,7 @@ public class CustomItemService( /// /// New properties to apply /// Item to update - protected void UpdateBaseItemPropertiesWithOverrides( - Props? overrideProperties, - TemplateItem itemClone - ) + protected void UpdateBaseItemPropertiesWithOverrides(Props? overrideProperties, TemplateItem itemClone) { if (overrideProperties is null || itemClone?.Properties is null) return; @@ -315,9 +301,7 @@ public class CustomItemService( var weapon = itemHelper.GetItem(weaponTpl); if (!weapon.Key) { - logger.Warning( - $"Unable to add custom weapon {weaponTpl} to PMCs as it cannot be found in the Item db" - ); + logger.Warning($"Unable to add custom weapon {weaponTpl} to PMCs as it cannot be found in the Item db"); return; } @@ -339,9 +323,7 @@ public class CustomItemService( botTypes["bear"].BotInventory.Mods[weaponTpl] = baseWeaponModObject; // Add weapon to array of allowed weapons + weighting to be picked - botTypes["usec"].BotInventory.Equipment[Enum.Parse(weaponSlot)][weaponTpl] = - weaponWeight; - botTypes["bear"].BotInventory.Equipment[Enum.Parse(weaponSlot)][weaponTpl] = - weaponWeight; + botTypes["usec"].BotInventory.Equipment[Enum.Parse(weaponSlot)][weaponTpl] = weaponWeight; + botTypes["bear"].BotInventory.Equipment[Enum.Parse(weaponSlot)][weaponTpl] = weaponWeight; } } diff --git a/Libraries/SPTarkov.Server.Core/Services/Mod/ProfileDataService.cs b/Libraries/SPTarkov.Server.Core/Services/Mod/ProfileDataService.cs index 476392e7..701d7d21 100644 --- a/Libraries/SPTarkov.Server.Core/Services/Mod/ProfileDataService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/Mod/ProfileDataService.cs @@ -6,11 +6,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Services.Mod; [Injectable(InjectionType.Singleton)] -public class ProfileDataService( - ISptLogger logger, - FileUtil fileUtil, - JsonUtil jsonUtil -) +public class ProfileDataService(ISptLogger logger, FileUtil fileUtil, JsonUtil jsonUtil) { protected const string ProfileDataFilepath = "user/profileData/"; private readonly ConcurrentDictionary _profileDataCache = new(); @@ -27,9 +23,7 @@ public class ProfileDataService( { if (fileUtil.FileExists($"{ProfileDataFilepath}{profileId}/{modKey}.json")) { - value = jsonUtil.Deserialize( - fileUtil.ReadFile($"{ProfileDataFilepath}{profileId}/{modKey}.json") - ); + value = jsonUtil.Deserialize(fileUtil.ReadFile($"{ProfileDataFilepath}{profileId}/{modKey}.json")); if (value != null) { while (!_profileDataCache.TryAdd(profileDataKey, value)) { } diff --git a/Libraries/SPTarkov.Server.Core/Services/OpenZoneService.cs b/Libraries/SPTarkov.Server.Core/Services/OpenZoneService.cs index 3f4b785a..503fde77 100644 --- a/Libraries/SPTarkov.Server.Core/Services/OpenZoneService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/OpenZoneService.cs @@ -43,9 +43,7 @@ public class OpenZoneService( { if (!dbLocations.ContainsKey(mapKvP.Key)) { - logger.Error( - serverLocalisationService.GetText("openzone-unable_to_find_map", mapKvP) - ); + logger.Error(serverLocalisationService.GetText("openzone-unable_to_find_map", mapKvP)); continue; } @@ -54,11 +52,7 @@ public class OpenZoneService( // Convert openzones string into list, easier to work wih var mapOpenZonesArray = dbLocations[mapKvP.Key].Base.OpenZones.Split(",").ToHashSet(); - foreach ( - var zoneToAdd in zonesToAdd.Where(zoneToAdd => - !mapOpenZonesArray.Contains(zoneToAdd) - ) - ) + foreach (var zoneToAdd in zonesToAdd.Where(zoneToAdd => !mapOpenZonesArray.Contains(zoneToAdd))) { // Add new zone to array and convert array back into comma separated string mapOpenZonesArray.Add(zoneToAdd); diff --git a/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs b/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs index a4774642..21f6dba7 100644 --- a/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/PaymentService.cs @@ -38,17 +38,11 @@ public class PaymentService( /// Buy item request /// Session ID /// Client response - public void PayMoney( - PmcData pmcData, - ProcessBuyTradeRequestData request, - MongoId sessionID, - ItemEventRouterResponse output - ) + public void PayMoney(PmcData pmcData, ProcessBuyTradeRequestData request, MongoId sessionID, ItemEventRouterResponse output) { // May need to convert to trader currency var trader = traderHelper.GetTrader(request.TransactionId, sessionID); - var payToTrader = - request.TransactionId != "ragfair" && traderHelper.TraderExists(request.TransactionId); + var payToTrader = request.TransactionId != "ragfair" && traderHelper.TraderExists(request.TransactionId); // Track the amounts of each type of currency involved in the trade. var currencyAmounts = new Dictionary(); @@ -63,13 +57,7 @@ public class PaymentService( if (!paymentHelper.IsMoneyTpl(item.Template)) { // If the item is not money, remove it from the inventory. - inventoryHelper.RemoveItemByCount( - pmcData, - item.Id, - (int)itemRequest.Count, - sessionID, - output - ); + inventoryHelper.RemoveItemByCount(pmcData, item.Id, (int)itemRequest.Count, sessionID, output); itemRequest.Count = 0; } else @@ -93,9 +81,7 @@ public class PaymentService( var totalCurrencyAmount = 0d; // Convert id to mongoId if we know it'll be valid (trader id) - var requestTransactionId = payToTrader - ? new MongoId(request.TransactionId) - : MongoId.Empty(); // Likely flea, use default + var requestTransactionId = payToTrader ? new MongoId(request.TransactionId) : MongoId.Empty(); // Likely flea, use default // Loop through each type of currency involved in the trade. foreach (var (currencyTpl, currencyAmount) in currencyAmounts) @@ -162,10 +148,7 @@ public class PaymentService( /// Handbook rouble price of the item private double? GetTraderItemHandbookPriceRouble(MongoId traderAssortId, MongoId traderId) { - var purchasedAssortItem = traderHelper.GetTraderAssortItemByAssortId( - traderId, - traderAssortId - ); + var purchasedAssortItem = traderHelper.GetTraderAssortItemByAssortId(traderId, traderAssortId); if (purchasedAssortItem is null) { return 1; @@ -174,9 +157,7 @@ public class PaymentService( var assortItemPriceRouble = handbookHelper.GetTemplatePrice(purchasedAssortItem.Template); if (assortItemPriceRouble == 0) { - logger.Debug( - $"No item price found for {purchasedAssortItem.Template} on trader: {traderId} in assort: {traderAssortId}" - ); + logger.Debug($"No item price found for {purchasedAssortItem.Template} on trader: {traderId} in assort: {traderAssortId}"); return 1; } @@ -203,24 +184,17 @@ public class PaymentService( var trader = traderHelper.GetTrader(request.TransactionId, sessionID); if (trader is null) { - logger.Error( - $"Unable to add currency to profile as trader: {request.TransactionId} does not exist" - ); + logger.Error($"Unable to add currency to profile as trader: {request.TransactionId} does not exist"); return; } var currencyTpl = trader.Currency.Value.GetCurrencyTpl(); - var calcAmount = handbookHelper.FromRUB( - handbookHelper.InRUB(amountToSend ?? 0, currencyTpl), - currencyTpl - ); + var calcAmount = handbookHelper.FromRUB(handbookHelper.InRUB(amountToSend ?? 0, currencyTpl), currencyTpl); var currencyMaxStackSize = itemHelper.GetItem(currencyTpl).Value.Properties?.StackMaxSize; if (currencyMaxStackSize is null) { - logger.Error( - $"Unable to add currency: {currencyTpl} to profile as it lacks a _props property" - ); + logger.Error($"Unable to add currency: {currencyTpl} to profile as it lacks a _props property"); return; } @@ -312,11 +286,7 @@ public class PaymentService( ItemEventRouterResponse output ) { - var moneyItemsInInventory = GetSortedMoneyItemsInInventory( - pmcData, - currencyTpl, - pmcData.Inventory.Stash.Value - ); + var moneyItemsInInventory = GetSortedMoneyItemsInInventory(pmcData, currencyTpl, pmcData.Inventory.Stash.Value); //Ensure all money items found have a upd foreach (var moneyStack in moneyItemsInInventory) @@ -324,10 +294,7 @@ public class PaymentService( moneyStack.Upd ??= new Upd { StackObjectsCount = 1 }; } - var amountAvailable = moneyItemsInInventory.Aggregate( - 0d, - (accumulator, item) => accumulator + item.Upd.StackObjectsCount.Value - ); + var amountAvailable = moneyItemsInInventory.Aggregate(0d, (accumulator, item) => accumulator + item.Upd.StackObjectsCount.Value); // If no money in inventory or amount is not enough we return false if (moneyItemsInInventory.Count <= 0 || amountAvailable < amountToPay) @@ -340,10 +307,7 @@ public class PaymentService( ); httpResponseUtil.AppendErrorToOutput( output, - serverLocalisationService.GetText( - "payment-not_enough_money_to_complete_transation_short", - amountToPay - ), // Typo, needs locale updated if fixed + serverLocalisationService.GetText("payment-not_enough_money_to_complete_transation_short", amountToPay), // Typo, needs locale updated if fixed BackendErrorCodes.UnknownTradingError ); @@ -383,18 +347,10 @@ public class PaymentService( /// Players stash ID /// List of sorted money items // TODO - ensure money in containers inside secure container are LAST - protected List GetSortedMoneyItemsInInventory( - PmcData pmcData, - MongoId currencyTpl, - MongoId playerStashId - ) + protected List GetSortedMoneyItemsInInventory(PmcData pmcData, MongoId currencyTpl, MongoId playerStashId) { // Get money stacks player has - var moneyItemsInInventory = itemHelper.FindBarterItems( - "tpl", - pmcData.Inventory.Items, - [currencyTpl] - ); + var moneyItemsInInventory = itemHelper.FindBarterItems("tpl", pmcData.Inventory.Items, [currencyTpl]); if (moneyItemsInInventory.Count == 0) { logger.Debug($"No {currencyTpl} money items found in inventory"); @@ -406,9 +362,7 @@ public class PaymentService( var itemsInStashCache = GetItemInStashCache(pmcData.Inventory.Items, playerStashId); // Filter out 'Locked' money stacks as they cannot be used - var noLocked = moneyItemsInInventory.Where(moneyItem => - moneyItem.Upd.PinLockState != PinLockState.Locked - ); + var noLocked = moneyItemsInInventory.Where(moneyItem => moneyItem.Upd.PinLockState != PinLockState.Locked); if (noLocked.Any()) { // We found unlocked money @@ -416,9 +370,7 @@ public class PaymentService( } // Prioritise items in stash to top of array - moneyItemsInInventory.Sort( - (a, b) => PrioritiseStashSort(a, b, pmcData.Inventory.Items, itemsInStashCache) - ); + moneyItemsInInventory.Sort((a, b) => PrioritiseStashSort(a, b, pmcData.Inventory.Items, itemsInStashCache)); return moneyItemsInInventory; } @@ -429,18 +381,12 @@ public class PaymentService( /// Inventory items to check /// Id of players stash /// Dictionary - protected IReadOnlyDictionary GetItemInStashCache( - List items, - MongoId playerStashId - ) + protected IReadOnlyDictionary GetItemInStashCache(List items, MongoId playerStashId) { var itemsInStashCache = new Dictionary(); foreach (var inventoryItem in items) { - itemsInStashCache.TryAdd( - inventoryItem.Id, - GetItemLocation(inventoryItem.Id, items, playerStashId) - ); + itemsInStashCache.TryAdd(inventoryItem.Id, GetItemLocation(inventoryItem.Id, items, playerStashId)); } return itemsInStashCache; @@ -480,16 +426,8 @@ public class PaymentService( if (bothInStash) { // Determine if they're in containers - var aInContainer = string.Equals( - a.SlotId, - "main", - StringComparison.InvariantCultureIgnoreCase - ); - var bInContainer = string.Equals( - b.SlotId, - "main", - StringComparison.InvariantCultureIgnoreCase - ); + var aInContainer = string.Equals(a.SlotId, "main", StringComparison.InvariantCultureIgnoreCase); + var bInContainer = string.Equals(b.SlotId, "main", StringComparison.InvariantCultureIgnoreCase); // Return item not in container var compare = aInContainer.CompareTo(bInContainer); @@ -505,12 +443,8 @@ public class PaymentService( var aImmediateParent = inventoryItems.FirstOrDefault(item => item.Id == a.ParentId); var bImmediateParent = inventoryItems.FirstOrDefault(item => item.Id == b.ParentId); - var aInDeprioContainer = _inventoryConfig.DeprioritisedMoneyContainers.Contains( - aImmediateParent.Template - ); - var bInDeprioContainer = _inventoryConfig.DeprioritisedMoneyContainers.Contains( - bImmediateParent.Template - ); + var aInDeprioContainer = _inventoryConfig.DeprioritisedMoneyContainers.Contains(aImmediateParent.Template); + var bInDeprioContainer = _inventoryConfig.DeprioritisedMoneyContainers.Contains(bImmediateParent.Template); // Prioritize B if (!aInDeprioContainer && bInDeprioContainer) @@ -586,11 +520,7 @@ public class PaymentService( /// Player inventory /// Players stash ID /// True if it's in inventory - protected InventoryLocation GetItemLocation( - MongoId itemId, - List inventoryItems, - MongoId playerStashId - ) + protected InventoryLocation GetItemLocation(MongoId itemId, List inventoryItems, MongoId playerStashId) { var inventoryItem = inventoryItems.FirstOrDefault(item => item.Id == itemId); if (inventoryItem is null) diff --git a/Libraries/SPTarkov.Server.Core/Services/PmcChatResponseService.cs b/Libraries/SPTarkov.Server.Core/Services/PmcChatResponseService.cs index 3624d60b..12d87464 100644 --- a/Libraries/SPTarkov.Server.Core/Services/PmcChatResponseService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/PmcChatResponseService.cs @@ -26,8 +26,7 @@ public class PmcChatResponseService( ConfigServer configServer ) { - protected readonly PmcChatResponse _pmcResponsesConfig = - configServer.GetConfig(); + protected readonly PmcChatResponse _pmcResponsesConfig = configServer.GetConfig(); /// /// For each PMC victim of the player, have a chance to send a message to the player, can be positive or negative @@ -35,11 +34,7 @@ public class PmcChatResponseService( /// Session ID /// List of bots killed by player /// Player profile - public void SendVictimResponse( - MongoId sessionId, - IEnumerable pmcVictims, - PmcData pmcData - ) + public void SendVictimResponse(MongoId sessionId, IEnumerable pmcVictims, PmcData pmcData) { foreach (var victim in pmcVictims) { @@ -50,9 +45,7 @@ public class PmcChatResponseService( if (string.IsNullOrEmpty(victim.Name)) { - logger.Warning( - $"Victim: {victim.ProfileId.ToString()} does not have a nickname, skipping pmc response message send" - ); + logger.Warning($"Victim: {victim.ProfileId.ToString()} does not have a nickname, skipping pmc response message send"); continue; } @@ -61,12 +54,7 @@ public class PmcChatResponseService( var message = ChooseMessage(true, pmcData, victim); if (message is not null) { - notificationSendHelper.SendMessageToPlayer( - sessionId, - victimDetails, - message, - MessageType.UserMessage - ); + notificationSendHelper.SendMessageToPlayer(sessionId, victimDetails, message, MessageType.UserMessage); } } } @@ -114,12 +102,7 @@ public class PmcChatResponseService( return; } - notificationSendHelper.SendMessageToPlayer( - sessionId, - killerDetails, - message, - MessageType.UserMessage - ); + notificationSendHelper.SendMessageToPlayer(sessionId, killerDetails, message, MessageType.UserMessage); } /// @@ -138,9 +121,7 @@ public class PmcChatResponseService( var possibleResponseLocaleKeys = GetResponseLocaleKeys(responseType, isVictim); if (possibleResponseLocaleKeys.Count == 0) { - logger.Warning( - serverLocalisationService.GetText("pmcresponse-unable_to_find_key", responseType) - ); + logger.Warning(serverLocalisationService.GetText("pmcresponse-unable_to_find_key", responseType)); return null; } @@ -153,9 +134,7 @@ public class PmcChatResponseService( playerName = pmcData.Info.Nickname, playerLevel = pmcData.Info.Level, playerSide = pmcData.Info.Side, - victimDeathLocation = victimData is not null - ? GetLocationName(victimData.Location) - : "", + victimDeathLocation = victimData is not null ? GetLocationName(victimData.Location) : "", } ); @@ -170,9 +149,7 @@ public class PmcChatResponseService( if (AppendSuffixToMessageEnd(isVictim)) { - var suffixText = serverLocalisationService.GetText( - randomUtil.GetArrayValue(GetResponseSuffixLocaleKeys()) - ); + var suffixText = serverLocalisationService.GetText(randomUtil.GetArrayValue(GetResponseSuffixLocaleKeys())); responseText += $" {suffixText}"; } @@ -221,9 +198,7 @@ public class PmcChatResponseService( /// True = should be stripped protected bool AllCaps(bool isVictim) { - var chance = isVictim - ? _pmcResponsesConfig.Victim.AllCapsChancePercent - : _pmcResponsesConfig.Killer.AllCapsChancePercent; + var chance = isVictim ? _pmcResponsesConfig.Victim.AllCapsChancePercent : _pmcResponsesConfig.Killer.AllCapsChancePercent; return randomUtil.GetChance100(chance); } @@ -249,9 +224,7 @@ public class PmcChatResponseService( /// Response type (positive/negative) protected string ChooseResponseType(bool isVictim = true) { - var responseWeights = isVictim - ? _pmcResponsesConfig.Victim.ResponseTypeWeights - : _pmcResponsesConfig.Killer.ResponseTypeWeights; + var responseWeights = isVictim ? _pmcResponsesConfig.Victim.ResponseTypeWeights : _pmcResponsesConfig.Killer.ResponseTypeWeights; return weightedRandomHelper.GetWeightedValue(responseWeights); } diff --git a/Libraries/SPTarkov.Server.Core/Services/PostDbLoadService.cs b/Libraries/SPTarkov.Server.Core/Services/PostDbLoadService.cs index 22ec84b5..c713da24 100644 --- a/Libraries/SPTarkov.Server.Core/Services/PostDbLoadService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/PostDbLoadService.cs @@ -130,10 +130,7 @@ public class PostDbLoadService( if (_botConfig.WeeklyBoss.Enabled) { - var chosenBoss = GetWeeklyBoss( - _botConfig.WeeklyBoss.BossPool, - _botConfig.WeeklyBoss.ResetDay - ); + var chosenBoss = GetWeeklyBoss(_botConfig.WeeklyBoss.BossPool, _botConfig.WeeklyBoss.ResetDay); FlagMapAsGuaranteedBoss(chosenBoss); } } @@ -200,9 +197,7 @@ public class PostDbLoadService( return; } - var bossSpawn = location.Base.BossLocationSpawn.FirstOrDefault(x => - x.BossName == boss.ToString() - ); + var bossSpawn = location.Base.BossLocationSpawn.FirstOrDefault(x => x.BossName == boss.ToString()); if (bossSpawn is null) { logger.Warning($"Boss: {boss} not found on map, unable to set as weekly. Skipping"); @@ -223,9 +218,7 @@ public class PostDbLoadService( // Check if exists if (hideout.Areas!.Exists(area => area.Id == customArea.Id)) { - logger.Warning( - $"Unable to add new hideout area with Id: {customArea.Id} as ID is already in use, skipping" - ); + logger.Warning($"Unable to add new hideout area with Id: {customArea.Id} as ID is already in use, skipping"); continue; } @@ -244,9 +237,7 @@ public class PostDbLoadService( { if (achievements.Exists(a => a.Id == customAchievement.Id)) { - logger.Debug( - $"Unable to add custom achievement as id: {customAchievement.Id} already exists" - ); + logger.Debug($"Unable to add custom achievement as id: {customAchievement.Id} already exists"); continue; } @@ -257,16 +248,10 @@ public class PostDbLoadService( private void RemoveNewBeginningRequirementFromPrestige() { var prestigeDb = databaseService.GetTemplates().Prestige; - var newBeginningQuestId = new HashSet - { - "6761f28a022f60bb320f3e95", - "6761ff17cdc36bd66102e9d0", - }; + var newBeginningQuestId = new HashSet { "6761f28a022f60bb320f3e95", "6761ff17cdc36bd66102e9d0" }; foreach (var prestige in prestigeDb.Elements) { - var itemToRemove = prestige.Conditions?.FirstOrDefault(cond => - newBeginningQuestId.Contains(cond.Target?.Item) - ); + var itemToRemove = prestige.Conditions?.FirstOrDefault(cond => newBeginningQuestId.Contains(cond.Target?.Item)); if (itemToRemove is null) { continue; @@ -299,14 +284,10 @@ public class PostDbLoadService( var craftsToAdd = _hideoutConfig.HideoutCraftsToAdd; foreach (var craftToAdd in craftsToAdd) { - var clonedCraft = cloner.Clone( - hideoutCraftDb.Recipes.FirstOrDefault(x => x.Id == craftToAdd.CraftIdToCopy) - ); + var clonedCraft = cloner.Clone(hideoutCraftDb.Recipes.FirstOrDefault(x => x.Id == craftToAdd.CraftIdToCopy)); if (clonedCraft is null) { - logger.Warning( - $"Unable to find hideout craft: {craftToAdd.CraftIdToCopy}, skipping" - ); + logger.Warning($"Unable to find hideout craft: {craftToAdd.CraftIdToCopy}, skipping"); continue; } @@ -325,11 +306,7 @@ public class PostDbLoadService( var reserveBase = databaseService.GetLocation(ELocationName.RezervBase.ToString()).Base; // Raiders are bosses, get only those from boss spawn array - foreach ( - var raiderSpawn in reserveBase.BossLocationSpawn.Where(boss => - boss.BossName == "pmcBot" - ) - ) + foreach (var raiderSpawn in reserveBase.BossLocationSpawn.Where(boss => boss.BossName == "pmcBot")) { var isTriggered = raiderSpawn.TriggerId.Length > 0; // Empty string if not triggered var newSpawnChance = isTriggered @@ -356,12 +333,7 @@ public class PostDbLoadService( { if (mapId is null) { - logger.Warning( - serverLocalisationService.GetText( - "location-unable_to_add_custom_loot_position", - mapId - ) - ); + logger.Warning(serverLocalisationService.GetText("location-unable_to_add_custom_loot_position", mapId)); continue; } @@ -372,12 +344,7 @@ public class PostDbLoadService( { if (looselootData is null) { - logger.Warning( - serverLocalisationService.GetText( - "location-map_has_no_loose_loot_data", - mapId - ) - ); + logger.Warning(serverLocalisationService.GetText("location-map_has_no_loose_loot_data", mapId)); return looselootData; } @@ -391,15 +358,11 @@ public class PostDbLoadService( if (existingLootPosition is not null) { - existingLootPosition.Template.Items = - existingLootPosition.Template.Items.Union( - positionToAdd.Template.Items - ); + existingLootPosition.Template.Items = existingLootPosition.Template.Items.Union(positionToAdd.Template.Items); - existingLootPosition.ItemDistribution = - existingLootPosition.ItemDistribution.Union( - positionToAdd.ItemDistribution - ); + existingLootPosition.ItemDistribution = existingLootPosition.ItemDistribution.Union( + positionToAdd.ItemDistribution + ); continue; } @@ -429,9 +392,7 @@ public class PostDbLoadService( { if (itemDb[shotgunId].Properties.ShotgunDispersion.HasValue) { - itemDb[shotgunId].Properties.shotgunDispersion = itemDb[shotgunId] - .Properties - .ShotgunDispersion; + itemDb[shotgunId].Properties.shotgunDispersion = itemDb[shotgunId].Properties.ShotgunDispersion; } } } @@ -449,9 +410,7 @@ public class PostDbLoadService( } locationkvP.Value.Base.BossLocationSpawn = locationkvP - .Value.Base.BossLocationSpawn.Where(bossSpawn => - !pmcTypes.Contains(bossSpawn.BossName) - ) + .Value.Base.BossLocationSpawn.Where(bossSpawn => !pmcTypes.Contains(bossSpawn.BossName)) .ToList(); } } @@ -471,12 +430,7 @@ public class PostDbLoadService( { if (!mapsDb.TryGetValue(mapId, out var map)) { - logger.Warning( - serverLocalisationService.GetText( - "bot-unable_to_edit_limits_of_unknown_map", - mapId - ) - ); + logger.Warning(serverLocalisationService.GetText("bot-unable_to_edit_limits_of_unknown_map", mapId)); continue; } @@ -523,28 +477,18 @@ public class PostDbLoadService( { if (looselootData is null) { - logger.Warning( - serverLocalisationService.GetText( - "location-map_has_no_loose_loot_data", - mapId - ) - ); + logger.Warning(serverLocalisationService.GetText("location-map_has_no_loose_loot_data", mapId)); return looselootData; } foreach (var (lootKey, newChanceValue) in mapAdjustments) { - var lootPostionToAdjust = looselootData.Spawnpoints.FirstOrDefault( - spawnPoint => spawnPoint.Template.Id == lootKey - ); + var lootPostionToAdjust = looselootData.Spawnpoints.FirstOrDefault(spawnPoint => spawnPoint.Template.Id == lootKey); if (lootPostionToAdjust is null) { logger.Warning( - serverLocalisationService.GetText( - "location-unable_to_adjust_loot_position_on_map", - new { lootKey, mapId } - ) + serverLocalisationService.GetText("location-unable_to_adjust_loot_position_on_map", new { lootKey, mapId }) ); continue; @@ -583,9 +527,7 @@ public class PostDbLoadService( /// protected void FixRoguesSpawningInstantlyOnLighthouse() { - var rogueSpawnDelaySeconds = _locationConfig - .RogueLighthouseSpawnTimeSettings - .WaitTimeSeconds; + var rogueSpawnDelaySeconds = _locationConfig.RogueLighthouseSpawnTimeSettings.WaitTimeSeconds; var lighthouse = databaseService.GetLocations().Lighthouse?.Base; if (lighthouse is null) // Just in case they remove this cursed map @@ -594,9 +536,7 @@ public class PostDbLoadService( } // Find Rogues that spawn instantly - var instantRogueBossSpawns = lighthouse.BossLocationSpawn.Where(spawn => - spawn.BossName == "exUsec" && spawn.Time == -1 - ); + var instantRogueBossSpawns = lighthouse.BossLocationSpawn.Where(spawn => spawn.BossName == "exUsec" && spawn.Time == -1); foreach (var wave in instantRogueBossSpawns) { wave.Time = rogueSpawnDelaySeconds; @@ -666,9 +606,7 @@ public class PostDbLoadService( foreach (var craftId in hideoutLootBoxCraftIds) { - var recipe = databaseService - .GetHideout() - .Production.Recipes.FirstOrDefault(craft => craft.Id == craftId); + var recipe = databaseService.GetHideout().Production.Recipes.FirstOrDefault(craft => craft.Id == craftId); if (recipe is not null) { recipe.Locked = false; @@ -707,17 +645,8 @@ public class PostDbLoadService( if (!traderAssorts.LoyalLevelItems.ContainsKey(assortKey)) { // Reverse lookup of enum key by value - var messageValues = new - { - traderName = traderId, - questName = quests[questKey]?.QuestName ?? "UNKNOWN", - }; - logger.Warning( - serverLocalisationService.GetText( - "assort-missing_quest_assort_unlock", - messageValues - ) - ); + var messageValues = new { traderName = traderId, questName = quests[questKey]?.QuestName ?? "UNKNOWN" }; + logger.Warning(serverLocalisationService.GetText("assort-missing_quest_assort_unlock", messageValues)); } } } @@ -740,13 +669,8 @@ public class PostDbLoadService( protected void AddMissingTraderBuyRestrictionMaxValue() { - var restrictions = databaseService - .GetGlobals() - .Configuration.TradingSettings.BuyRestrictionMaxBonus; - restrictions["unheard_edition"] = new BuyRestrictionMaxBonus - { - Multiplier = restrictions["edge_of_darkness"].Multiplier, - }; + var restrictions = databaseService.GetGlobals().Configuration.TradingSettings.BuyRestrictionMaxBonus; + restrictions["unheard_edition"] = new BuyRestrictionMaxBonus { Multiplier = restrictions["edge_of_darkness"].Multiplier }; } protected void ApplyFleaPriceOverrides() @@ -764,9 +688,7 @@ public class PostDbLoadService( { if (databaseService.GetGlobals().ItemPresets.ContainsKey(presetToAdd.Id)) { - logger.Warning( - $"Global ItemPreset with Id of: {presetToAdd.Id} already exists, unable to overwrite" - ); + logger.Warning($"Global ItemPreset with Id of: {presetToAdd.Id} already exists, unable to overwrite"); continue; } diff --git a/Libraries/SPTarkov.Server.Core/Services/ProfileActivityService.cs b/Libraries/SPTarkov.Server.Core/Services/ProfileActivityService.cs index 98bfa11c..b38d18c4 100644 --- a/Libraries/SPTarkov.Server.Core/Services/ProfileActivityService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/ProfileActivityService.cs @@ -16,11 +16,7 @@ public class ProfileActivityService(TimeUtil timeUtil) _activeProfiles.AddOrUpdate( sessionId, // On add value - key => new ProfileActivityData - { - ClientStartedTimestamp = clientStartedTimestamp, - LastActive = timeUtil.GetTimeStamp(), - }, + key => new ProfileActivityData { ClientStartedTimestamp = clientStartedTimestamp, LastActive = timeUtil.GetTimeStamp() }, // On Update value, client was started before but crashed or user restarted (key, existingValue) => { diff --git a/Libraries/SPTarkov.Server.Core/Services/ProfileFixerService.cs b/Libraries/SPTarkov.Server.Core/Services/ProfileFixerService.cs index 19d07c72..5f6fb754 100644 --- a/Libraries/SPTarkov.Server.Core/Services/ProfileFixerService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/ProfileFixerService.cs @@ -80,9 +80,7 @@ public class ProfileFixerService( } // Skip any messages that don't have a stashId collision with the player's equipment ID - if ( - message.Items?.Stash != fullProfile.CharacterData?.PmcData?.Inventory?.Equipment - ) + if (message.Items?.Stash != fullProfile.CharacterData?.PmcData?.Inventory?.Equipment) { continue; } @@ -107,9 +105,7 @@ public class ProfileFixerService( public void FixProfileBreakingInventoryItemIssues(PmcData pmcProfile) { // Create a mapping of all inventory items, keyed by _id value - var itemMapping = pmcProfile - .Inventory.Items.GroupBy(item => item.Id) - .ToDictionary(x => x.Key, x => x.ToList()); + var itemMapping = pmcProfile.Inventory.Items.GroupBy(item => item.Id).ToDictionary(x => x.Key, x => x.ToList()); foreach (var mappingKvP in itemMapping) { @@ -119,9 +115,7 @@ public class ProfileFixerService( continue; } - logger.Warning( - $"{mappingKvP.Value.Count - 1} duplicate(s) found for item: {mappingKvP.Key}" - ); + logger.Warning($"{mappingKvP.Value.Count - 1} duplicate(s) found for item: {mappingKvP.Key}"); var itemAJson = jsonUtil.Serialize(mappingKvP.Value[0]); var itemBJson = jsonUtil.Serialize(mappingKvP.Value[1]); if (itemAJson == itemBJson) @@ -135,18 +129,12 @@ public class ProfileFixerService( { // Items are different, replace ID with unique value // Only replace ID if items have no children, we don't want orphaned children - var itemsHaveChildren = pmcProfile.Inventory.Items.Any(x => - x.ParentId == mappingKvP.Key - ); + var itemsHaveChildren = pmcProfile.Inventory.Items.Any(x => x.ParentId == mappingKvP.Key); if (!itemsHaveChildren) { - var itemToAdjust = pmcProfile.Inventory.Items.FirstOrDefault(x => - x.Id == mappingKvP.Key - ); + var itemToAdjust = pmcProfile.Inventory.Items.FirstOrDefault(x => x.Id == mappingKvP.Key); itemToAdjust.Id = new MongoId(); - logger.Warning( - $"Replace duplicate item Id: {mappingKvP.Key} with {itemToAdjust.Id}" - ); + logger.Warning($"Replace duplicate item Id: {mappingKvP.Key} with {itemToAdjust.Id}"); } } } @@ -171,9 +159,7 @@ public class ProfileFixerService( // Check items with StackObjectsCount (undefined) if (item.Upd.StackObjectsCount is null) { - logger.Warning( - $"Fixed item: {item.Id}s undefined StackObjectsCount value, now set to 1" - ); + logger.Warning($"Fixed item: {item.Id}s undefined StackObjectsCount value, now set to 1"); item.Upd.StackObjectsCount = 1; } } @@ -181,11 +167,7 @@ public class ProfileFixerService( // Iterate over clothing var customizationDb = databaseService.GetTemplates().Customization; var customizationDbArray = customizationDb.Values; - var playerIsUsec = string.Equals( - pmcProfile.Info.Side, - "usec", - StringComparison.OrdinalIgnoreCase - ); + var playerIsUsec = string.Equals(pmcProfile.Info.Side, "usec", StringComparison.OrdinalIgnoreCase); // Check Head if (!customizationDb.ContainsKey(pmcProfile.Customization.Head.Value)) @@ -236,11 +218,7 @@ public class ProfileFixerService( return; } - foreach ( - var counterKvP in pmcProfile.TaskConditionCounters.Where(counterKvP => - counterKvP.Value.SourceId is null - ) - ) + foreach (var counterKvP in pmcProfile.TaskConditionCounters.Where(counterKvP => counterKvP.Value.SourceId is null)) { pmcProfile.TaskConditionCounters.Remove(counterKvP.Key); } @@ -270,12 +248,8 @@ public class ProfileFixerService( var existsInActiveRepeatableQuests = activeRepeatableQuests.Any(quest => quest.Id == TaskConditionCounterKvP.Value.SourceId ); - var existsInQuests = pmcProfile.Quests.Any(quest => - quest.QId == TaskConditionCounterKvP.Value.SourceId - ); - var isAchievementTracker = achievements.Any(quest => - quest.Id == TaskConditionCounterKvP.Value.SourceId - ); + var existsInQuests = pmcProfile.Quests.Any(quest => quest.QId == TaskConditionCounterKvP.Value.SourceId); + var isAchievementTracker = achievements.Any(quest => quest.Id == TaskConditionCounterKvP.Value.SourceId); // If task conditions id is neither in activeQuests, quests or achievements - it's stale and should be cleaned up if (!(existsInActiveRepeatableQuests || existsInQuests || isAchievementTracker)) @@ -296,16 +270,10 @@ public class ProfileFixerService( } } - protected List GetActiveRepeatableQuests( - List repeatableQuests - ) + protected List GetActiveRepeatableQuests(List repeatableQuests) { var activeQuests = new List(); - foreach ( - var repeatableQuest in repeatableQuests.Where(questType => - questType.ActiveQuests?.Count > 0 - ) - ) + foreach (var repeatableQuest in repeatableQuests.Where(questType => questType.ActiveQuests?.Count > 0)) // daily/weekly collection has active quests in them, add to array and return { activeQuests.AddRange(repeatableQuest.ActiveQuests); @@ -327,16 +295,9 @@ public class ProfileFixerService( for (var i = profileQuests.Count - 1; i >= 0; i--) { - if ( - !( - quests.ContainsKey(profileQuests[i].QId) - || activeRepeatableQuests.Any(x => x.Id == profileQuests[i].QId) - ) - ) + if (!(quests.ContainsKey(profileQuests[i].QId) || activeRepeatableQuests.Any(x => x.Id == profileQuests[i].QId))) { - logger.Info( - $"Successfully removed orphaned quest: {profileQuests[i].QId} that doesn't exist in quest data" - ); + logger.Info($"Successfully removed orphaned quest: {profileQuests[i].QId} that doesn't exist in quest data"); profileQuests.RemoveAt(i); } } @@ -362,9 +323,7 @@ public class ProfileFixerService( // For started or successful quests, check for unlocks in the `Started` rewards if (profileQuest.Status is QuestStatusEnum.Started or QuestStatusEnum.Success) { - var productionRewards = quest - .Rewards["Started"] - ?.Where(reward => reward.Type == RewardType.ProductionScheme); + var productionRewards = quest.Rewards["Started"]?.Where(reward => reward.Type == RewardType.ProductionScheme); if (productionRewards is not null) { @@ -378,9 +337,7 @@ public class ProfileFixerService( // For successful quests, check for unlocks in the `Success` rewards if (profileQuest.Status is QuestStatusEnum.Success) { - var productionRewards = quest - .Rewards["Success"] - ?.Where(reward => reward.Type == RewardType.ProductionScheme); + var productionRewards = quest.Rewards["Success"]?.Where(reward => reward.Type == RewardType.ProductionScheme); if (productionRewards is not null) { @@ -399,27 +356,16 @@ public class ProfileFixerService( /// Profile to check /// The quest reward to validate /// The quest the reward belongs to - protected void VerifyQuestProductionUnlock( - PmcData pmcProfile, - Reward productionUnlockReward, - Quest questDetails - ) + protected void VerifyQuestProductionUnlock(PmcData pmcProfile, Reward productionUnlockReward, Quest questDetails) { - var matchingProductions = rewardHelper.GetRewardProductionMatch( - productionUnlockReward, - questDetails.Id - ); + var matchingProductions = rewardHelper.GetRewardProductionMatch(productionUnlockReward, questDetails.Id); if (matchingProductions.Count != 1) { logger.Error( serverLocalisationService.GetText( "quest-unable_to_find_matching_hideout_production", - new - { - questName = questDetails.QuestName, - matchCount = matchingProductions.Count, - } + new { questName = questDetails.QuestName, matchCount = matchingProductions.Count } ) ); @@ -432,9 +378,7 @@ public class ProfileFixerService( { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Added production: {matchingProductionId} to unlocked production recipes for: {questDetails.QuestName}" - ); + logger.Debug($"Added production: {matchingProductionId} to unlocked production recipes for: {questDetails.QuestName}"); } } } @@ -448,9 +392,7 @@ public class ProfileFixerService( { // Check if the player inventory contains this item pmcProfile.InsuredItems = pmcProfile - .InsuredItems.Where(insuredItem => - pmcProfile.Inventory.Items.Any(item => item.Id == insuredItem.ItemId) - ) + .InsuredItems.Where(insuredItem => pmcProfile.Inventory.Items.Any(item => item.Id == insuredItem.ItemId)) .ToList(); } @@ -463,122 +405,64 @@ public class ProfileFixerService( { var globals = databaseService.GetGlobals(); - var generator = pmcProfile.Hideout.Areas.FirstOrDefault(area => - area.Type == HideoutAreas.Generator - ); + var generator = pmcProfile.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.Generator); if (generator is not null) { var genSlots = generator.Slots.Count; - var extraGenSlots = globals - .Configuration - .SkillsSettings - .HideoutManagement - .EliteSlots - .Generator - .Slots; + var extraGenSlots = globals.Configuration.SkillsSettings.HideoutManagement.EliteSlots.Generator.Slots; if (genSlots < 6 + extraGenSlots) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - "Updating generator area slots to a size of 6 + hideout management skill" - ); + logger.Debug("Updating generator area slots to a size of 6 + hideout management skill"); } - AddEmptyObjectsToHideoutAreaSlots( - HideoutAreas.Generator, - (int)(6 + extraGenSlots), - pmcProfile - ); + AddEmptyObjectsToHideoutAreaSlots(HideoutAreas.Generator, (int)(6 + extraGenSlots), pmcProfile); } } - var waterCollSlots = pmcProfile - .Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.WaterCollector) - .Slots.Count; - var extraWaterCollSlots = globals - .Configuration - .SkillsSettings - .HideoutManagement - .EliteSlots - .WaterCollector - .Slots; + var waterCollSlots = pmcProfile.Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.WaterCollector).Slots.Count; + var extraWaterCollSlots = globals.Configuration.SkillsSettings.HideoutManagement.EliteSlots.WaterCollector.Slots; if (waterCollSlots < 1 + extraWaterCollSlots) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - "Updating water collector area slots to a size of 1 + hideout management skill" - ); + logger.Debug("Updating water collector area slots to a size of 1 + hideout management skill"); } - AddEmptyObjectsToHideoutAreaSlots( - HideoutAreas.WaterCollector, - (int)(1 + extraWaterCollSlots), - pmcProfile - ); + AddEmptyObjectsToHideoutAreaSlots(HideoutAreas.WaterCollector, (int)(1 + extraWaterCollSlots), pmcProfile); } - var filterSlots = pmcProfile - .Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.AirFilteringUnit) - .Slots.Count; - var extraFilterSlots = globals - .Configuration - .SkillsSettings - .HideoutManagement - .EliteSlots - .AirFilteringUnit - .Slots; + var filterSlots = pmcProfile.Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.AirFilteringUnit).Slots.Count; + var extraFilterSlots = globals.Configuration.SkillsSettings.HideoutManagement.EliteSlots.AirFilteringUnit.Slots; if (filterSlots < 3 + extraFilterSlots) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - "Updating air filter area slots to a size of 3 + hideout management skill" - ); + logger.Debug("Updating air filter area slots to a size of 3 + hideout management skill"); } - AddEmptyObjectsToHideoutAreaSlots( - HideoutAreas.AirFilteringUnit, - (int)(3 + extraFilterSlots), - pmcProfile - ); + AddEmptyObjectsToHideoutAreaSlots(HideoutAreas.AirFilteringUnit, (int)(3 + extraFilterSlots), pmcProfile); } - var btcFarmSlots = pmcProfile - .Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.BitcoinFarm) - .Slots.Count; - var extraBtcSlots = globals - .Configuration - .SkillsSettings - .HideoutManagement - .EliteSlots - .BitcoinFarm - .Slots; + var btcFarmSlots = pmcProfile.Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.BitcoinFarm).Slots.Count; + var extraBtcSlots = globals.Configuration.SkillsSettings.HideoutManagement.EliteSlots.BitcoinFarm.Slots; // BTC Farm doesnt have extra slots for hideout management, but we still check for modded stuff!! if (btcFarmSlots < 50 + extraBtcSlots) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - "Updating bitcoin farm area slots to a size of 50 + hideout management skill" - ); + logger.Debug("Updating bitcoin farm area slots to a size of 50 + hideout management skill"); } - AddEmptyObjectsToHideoutAreaSlots( - HideoutAreas.BitcoinFarm, - (int)(50 + extraBtcSlots), - pmcProfile - ); + AddEmptyObjectsToHideoutAreaSlots(HideoutAreas.BitcoinFarm, (int)(50 + extraBtcSlots), pmcProfile); } - var cultistAreaSlots = pmcProfile - .Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.CircleOfCultists) - .Slots.Count; + var cultistAreaSlots = pmcProfile.Hideout.Areas.FirstOrDefault(x => x.Type == HideoutAreas.CircleOfCultists).Slots.Count; if (cultistAreaSlots < 1) { if (logger.IsLogEnabled(LogLevel.Debug)) @@ -596,11 +480,7 @@ public class ProfileFixerService( /// area to check /// area to update /// profile to update - protected void AddEmptyObjectsToHideoutAreaSlots( - HideoutAreas areaType, - int emptyItemCount, - PmcData pmcProfile - ) + protected void AddEmptyObjectsToHideoutAreaSlots(HideoutAreas areaType, int emptyItemCount, PmcData pmcProfile) { var area = pmcProfile.Hideout.Areas.FirstOrDefault(x => x.Type == areaType); area.Slots = AddObjectsToList(emptyItemCount, area.Slots); @@ -646,9 +526,7 @@ public class ProfileFixerService( // Get items placed in root of stash // TODO: extend to other areas / sub items - var inventoryItemsToCheck = pmcProfile.Inventory.Items.Where(item => - _areas.Contains(item.SlotId ?? "") - ); + var inventoryItemsToCheck = pmcProfile.Inventory.Items.Where(item => _areas.Contains(item.SlotId ?? "")); if (inventoryItemsToCheck is not null) // Check each item in inventory to ensure item exists in itemdb { @@ -656,15 +534,11 @@ public class ProfileFixerService( { if (!itemsDb.ContainsKey(item.Template)) { - logger.Error( - serverLocalisationService.GetText("fixer-mod_item_found", item.Template) - ); + logger.Error(serverLocalisationService.GetText("fixer-mod_item_found", item.Template)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { - logger.Success( - $"Deleting item from inventory and insurance with id: {item.Id} tpl: {item.Template}" - ); + logger.Success($"Deleting item from inventory and insurance with id: {item.Id} tpl: {item.Template}"); // also deletes from insured array inventoryHelper.RemoveItem(pmcProfile, item.Id, sessionId); @@ -687,9 +561,7 @@ public class ProfileFixerService( .ToList(); var magazineBuild = fullProfile.UserBuildData.MagazineBuilds ?? []; - fullProfile.UserBuildData.MagazineBuilds = magazineBuild - .Where(build => !ShouldRemoveMagazineBuild(build, itemsDb)) - .ToList(); + fullProfile.UserBuildData.MagazineBuilds = magazineBuild.Where(build => !ShouldRemoveMagazineBuild(build, itemsDb)).ToList(); } // Iterate over dialogs, looking for messages with items not found in item db, remove message if item found @@ -721,17 +593,13 @@ public class ProfileFixerService( // Check item exists in itemsDb if (!itemsDb.ContainsKey(item.Template)) { - logger.Error( - serverLocalisationService.GetText("fixer-mod_item_found", item.Template) - ); + logger.Error(serverLocalisationService.GetText("fixer-mod_item_found", item.Template)); } if (_coreConfig.Fixes.RemoveModItemsFromProfile) { dialog.Value.Messages.Remove(message); - logger.Warning( - $"Item: {item.Template} has resulted in the deletion of message: {message.Id} from dialog {dialog}" - ); + logger.Warning($"Item: {item.Template} has resulted in the deletion of message: {message.Id} from dialog {dialog}"); } break; @@ -742,25 +610,19 @@ public class ProfileFixerService( var clothingDb = databaseService.GetTemplates().Customization; foreach ( var clothingItem in fullProfile - .CustomisationUnlocks.Where(customisation => - customisation.Type == CustomisationType.SUITE - ) + .CustomisationUnlocks.Where(customisation => customisation.Type == CustomisationType.SUITE) .ToList() // We're removing element, ToList to allow that to occur ) { if (!clothingDb.ContainsKey(clothingItem.Id)) { // Item in profile not found in db, not good - logger.Error( - serverLocalisationService.GetText("fixer-clothing_item_found", clothingItem) - ); + logger.Error(serverLocalisationService.GetText("fixer-clothing_item_found", clothingItem)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { fullProfile.CustomisationUnlocks.Remove(clothingItem); - logger.Warning( - $"Non-default clothing purchase: {clothingItem} removed from profile" - ); + logger.Warning($"Non-default clothing purchase: {clothingItem} removed from profile"); } } } @@ -776,12 +638,7 @@ public class ProfileFixerService( { if (!traderHelper.TraderExists(activeQuest.TraderId)) { - logger.Error( - serverLocalisationService.GetText( - "fixer-trader_found", - activeQuest.TraderId - ) - ); + logger.Error(serverLocalisationService.GetText("fixer-trader_found", activeQuest.TraderId)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { logger.Warning( @@ -799,11 +656,7 @@ public class ProfileFixerService( } // Get Item rewards only - foreach ( - var successReward in activeQuest - .Rewards["Success"] - .Where(reward => reward.Type == RewardType.Item) - ) + foreach (var successReward in activeQuest.Rewards["Success"].Where(reward => reward.Type == RewardType.Item)) foreach (var item in successReward.Items) { if (!itemsDb.ContainsKey(item.Template)) @@ -818,19 +671,13 @@ public class ProfileFixerService( } foreach ( - var TraderPurchaseKvP in fullProfile.TraderPurchases.Where(TraderPurchase => - !traderHelper.TraderExists(TraderPurchase.Key) - ) + var TraderPurchaseKvP in fullProfile.TraderPurchases.Where(TraderPurchase => !traderHelper.TraderExists(TraderPurchase.Key)) ) { - logger.Error( - serverLocalisationService.GetText("fixer-trader_found", TraderPurchaseKvP.Key) - ); + logger.Error(serverLocalisationService.GetText("fixer-trader_found", TraderPurchaseKvP.Key)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { - logger.Warning( - $"Non-default trader: {TraderPurchaseKvP.Key} purchase removed from traderPurchases list in profile" - ); + logger.Warning($"Non-default trader: {TraderPurchaseKvP.Key} purchase removed from traderPurchases list in profile"); fullProfile.TraderPurchases.Remove(TraderPurchaseKvP.Key); } } @@ -843,30 +690,18 @@ public class ProfileFixerService( /// The build to check for invalid items /// The items database to use for item lookup /// True if the build should be removed from the build list, false otherwise - protected bool ShouldRemoveWeaponEquipmentBuild( - string buildType, - UserBuild build, - Dictionary itemsDb - ) + protected bool ShouldRemoveWeaponEquipmentBuild(string buildType, UserBuild build, Dictionary itemsDb) { if (buildType == "weapon") // Get items not found in items db { - foreach ( - var item in (build as WeaponBuild).Items.Where(item => - !itemsDb.ContainsKey(item.Template) - ) - ) + foreach (var item in (build as WeaponBuild).Items.Where(item => !itemsDb.ContainsKey(item.Template))) { - logger.Error( - serverLocalisationService.GetText("fixer-mod_item_found", item.Template) - ); + logger.Error(serverLocalisationService.GetText("fixer-mod_item_found", item.Template)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { - logger.Warning( - $"Item: {item.Template} has resulted in the deletion of {buildType} build: {build.Name}" - ); + logger.Warning($"Item: {item.Template} has resulted in the deletion of {buildType} build: {build.Name}"); return true; } @@ -880,21 +715,13 @@ public class ProfileFixerService( if (buildType == "equipment") // Get items not found in items db { - foreach ( - var item in (build as EquipmentBuild).Items.Where(item => - !itemsDb.ContainsKey(item.Template) - ) - ) + foreach (var item in (build as EquipmentBuild).Items.Where(item => !itemsDb.ContainsKey(item.Template))) { - logger.Error( - serverLocalisationService.GetText("fixer-mod_item_found", item.Template) - ); + logger.Error(serverLocalisationService.GetText("fixer-mod_item_found", item.Template)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { - logger.Warning( - $"Item: {item.Template} has resulted in the deletion of {buildType} build: {build.Name}" - ); + logger.Warning($"Item: {item.Template} has resulted in the deletion of {buildType} build: {build.Name}"); return true; } @@ -913,10 +740,7 @@ public class ProfileFixerService( /// The magazine build to check for validity /// The items database to use for item lookup /// True if the build should be removed from the build list, false otherwise - protected bool ShouldRemoveMagazineBuild( - MagazineBuild magazineBuild, - Dictionary itemsDb - ) + protected bool ShouldRemoveMagazineBuild(MagazineBuild magazineBuild, Dictionary itemsDb) { foreach (var item in magazineBuild.Items) { @@ -929,15 +753,11 @@ public class ProfileFixerService( // Check item exists in itemsDb if (!itemsDb.ContainsKey(item.TemplateId)) { - logger.Error( - serverLocalisationService.GetText("fixer-mod_item_found", item.TemplateId) - ); + logger.Error(serverLocalisationService.GetText("fixer-mod_item_found", item.TemplateId)); if (_coreConfig.Fixes.RemoveModItemsFromProfile) { - logger.Warning( - $"Item: {item.TemplateId} has resulted in the deletion of magazine build: {magazineBuild.Name}" - ); + logger.Warning($"Item: {item.TemplateId} has resulted in the deletion of magazine build: {magazineBuild.Name}"); return true; } @@ -955,10 +775,7 @@ public class ProfileFixerService( /// /// Profile to update /// - public void AddMissingHideoutBonusesToProfile( - PmcData pmcProfile, - List? dbHideoutAreas - ) + public void AddMissingHideoutBonusesToProfile(PmcData pmcProfile, List? dbHideoutAreas) { foreach (var profileArea in pmcProfile.Hideout?.Areas ?? []) { @@ -1003,9 +820,7 @@ public class ProfileFixerService( if (profileBonus is null) { // no bonus, add to profile - logger.Debug( - $"Profile has level {level} area {profileArea.Type} but no bonus found, adding {bonus.Type}" - ); + logger.Debug($"Profile has level {level} area {profileArea.Type} but no bonus found, adding {bonus.Type}"); hideoutHelper.ApplyPlayerUpgradesBonuses(pmcProfile, bonus); } } @@ -1029,15 +844,11 @@ public class ProfileFixerService( return bonus.Type switch { - BonusType.StashSize => profileBonuses?.FirstOrDefault(x => - x.Type == bonus.Type && x.TemplateId == bonus.TemplateId - ), + BonusType.StashSize => profileBonuses?.FirstOrDefault(x => x.Type == bonus.Type && x.TemplateId == bonus.TemplateId), BonusType.AdditionalSlots => profileBonuses?.FirstOrDefault(x => x.Type == bonus.Type && x?.Value == bonus?.Value && x?.IsVisible == bonus?.IsVisible ), - _ => profileBonuses?.FirstOrDefault(x => - x.Type == bonus.Type && x.Value == bonus.Value - ), + _ => profileBonuses?.FirstOrDefault(x => x.Type == bonus.Type && x.Value == bonus.Value), }; } diff --git a/Libraries/SPTarkov.Server.Core/Services/ProfileMigratorService.cs b/Libraries/SPTarkov.Server.Core/Services/ProfileMigratorService.cs index 3e1f14f2..02d381ee 100644 --- a/Libraries/SPTarkov.Server.Core/Services/ProfileMigratorService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/ProfileMigratorService.cs @@ -37,9 +37,7 @@ namespace SPTarkov.Server.Core.Services ) { return profile.Deserialize(JsonUtil.JsonSerializerOptionsNoIndent) - ?? throw new InvalidOperationException( - $"Could not deserialize the profile {profileId}" - ); + ?? throw new InvalidOperationException($"Could not deserialize the profile {profileId}"); } var ranMigrations = new List(); @@ -48,9 +46,7 @@ namespace SPTarkov.Server.Core.Services { if (profileMigration.CanMigrate(profile, ranMigrations)) { - logger.Warning( - $"{profileId} has a pending profile migration: {profileMigration.MigrationName}" - ); + logger.Warning($"{profileId} has a pending profile migration: {profileMigration.MigrationName}"); var migratedProfile = profileMigration.Migrate(profile); @@ -65,27 +61,20 @@ namespace SPTarkov.Server.Core.Services var sptReadyProfile = profile.Deserialize(JsonUtil.JsonSerializerOptionsNoIndent) - ?? throw new InvalidOperationException( - $"Could not deserialize the profile {profileId}" - ); + ?? throw new InvalidOperationException($"Could not deserialize the profile {profileId}"); foreach (var ranMigration in ranMigrations) { if (ranMigration.PostMigrate(sptReadyProfile)) { - logger.Success( - $"{profileId} successfully ran profile migration: {ranMigration.MigrationName}" - ); + logger.Success($"{profileId} successfully ran profile migration: {ranMigration.MigrationName}"); if (sptReadyProfile.SptData!.Migrations is null) { sptReadyProfile.SptData.Migrations = []; } - sptReadyProfile.SptData.Migrations.Add( - ranMigration.MigrationName, - timeUtil.GetTimeStamp() - ); + sptReadyProfile.SptData.Migrations.Add(ranMigration.MigrationName, timeUtil.GetTimeStamp()); } } @@ -96,18 +85,11 @@ namespace SPTarkov.Server.Core.Services { var sortedMigrations = new List(); var visitedMigrations = new Dictionary(); - var migrationDict = profileMigrations - .Cast() - .ToDictionary(m => m.GetType()); + var migrationDict = profileMigrations.Cast().ToDictionary(m => m.GetType()); foreach (var migration in profileMigrations.Cast()) { - VisitMigrationForSort( - migration, - migrationDict, - visitedMigrations, - sortedMigrations - ); + VisitMigrationForSort(migration, migrationDict, visitedMigrations, sortedMigrations); } return sortedMigrations; @@ -130,9 +112,7 @@ namespace SPTarkov.Server.Core.Services } // Big error, two migrations should never depend on one another - throw new InvalidOperationException( - $"Cycle detected in migration prerequisites involving: {migrationType.Name}" - ); + throw new InvalidOperationException($"Cycle detected in migration prerequisites involving: {migrationType.Name}"); } // Mark the current migration type for visiting @@ -146,12 +126,7 @@ namespace SPTarkov.Server.Core.Services } // Visit the next prerequisite - VisitMigrationForSort( - prereqMigration, - migrationTypeDictionary, - visitedTypeDictionary, - sortedMigrations - ); + VisitMigrationForSort(prereqMigration, migrationTypeDictionary, visitedTypeDictionary, sortedMigrations); } // Done visiting, mark it as fully visited and add it to the sorted migrations diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs index 812e1392..5d253842 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairCategoriesService.cs @@ -8,10 +8,7 @@ using SPTarkov.Server.Core.Models.Utils; namespace SPTarkov.Server.Core.Services; [Injectable(InjectionType.Singleton)] -public class RagfairCategoriesService( - ISptLogger logger, - PaymentHelper paymentHelper -) +public class RagfairCategoriesService(ISptLogger logger, PaymentHelper paymentHelper) { /// /// Get a dictionary of each item the play can see in their flea menu, filtered by what is available for them to buy @@ -45,29 +42,20 @@ public class RagfairCategoriesService( if ( string.IsNullOrEmpty(searchRequestData.NeededSearchId) && searchRequestData.RemoveBartering.GetValueOrDefault(false) - && ( - offer.Requirements.Count() > 1 - || !paymentHelper.IsMoneyTpl(offer.Requirements.FirstOrDefault().TemplateId) - ) + && (offer.Requirements.Count() > 1 || !paymentHelper.IsMoneyTpl(offer.Requirements.FirstOrDefault().TemplateId)) ) { return false; } // Remove when filter set to players only + offer is from trader - if ( - searchRequestData.OfferOwnerType == OfferOwnerType.PLAYEROWNERTYPE - && isTraderOffer - ) + if (searchRequestData.OfferOwnerType == OfferOwnerType.PLAYEROWNERTYPE && isTraderOffer) { return false; } // Remove when filter set to traders only + offer is not from trader - if ( - searchRequestData.OfferOwnerType == OfferOwnerType.TRADEROWNERTYPE - && !isTraderOffer - ) + if (searchRequestData.OfferOwnerType == OfferOwnerType.TRADEROWNERTYPE && !isTraderOffer) { return false; } diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairLinkedItemService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairLinkedItemService.cs index 9568b25e..bd1cd08e 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairLinkedItemService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairLinkedItemService.cs @@ -9,11 +9,7 @@ using SPTarkov.Server.Core.Models.Utils; namespace SPTarkov.Server.Core.Services; [Injectable(InjectionType.Singleton)] -public class RagfairLinkedItemService( - DatabaseService databaseService, - ItemHelper itemHelper, - ISptLogger logger -) +public class RagfairLinkedItemService(DatabaseService databaseService, ItemHelper itemHelper, ISptLogger logger) { protected readonly Dictionary> linkedItemsCache = new(); @@ -117,10 +113,7 @@ public class RagfairLinkedItemService( /// /// Revolvers cylinder /// Set to add to - protected void AddRevolverCylinderAmmoToLinkedItems( - TemplateItem cylinder, - HashSet itemLinkedSet - ) + protected void AddRevolverCylinderAmmoToLinkedItems(TemplateItem cylinder, HashSet itemLinkedSet) { var cylinderMod = cylinder.Properties.Slots?.FirstOrDefault(x => x.Name == "mod_magazine"); if (cylinderMod == null) @@ -129,8 +122,7 @@ public class RagfairLinkedItemService( } // Get the first cylinder filter tpl - var cylinderTpl = - cylinderMod.Props?.Filters?.First().Filter?.FirstOrDefault() ?? new MongoId(null); + var cylinderTpl = cylinderMod.Props?.Filters?.First().Filter?.FirstOrDefault() ?? new MongoId(null); if (!cylinderTpl.IsValidMongoId()) { diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairOfferService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairOfferService.cs index ce53df78..6afb2483 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairOfferService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairOfferService.cs @@ -233,32 +233,21 @@ public class RagfairOfferService( var offerCreatorProfile = profileHelper.GetProfileByPmcId(offerCreatorId); if (offerCreatorProfile == null) { - logger.Error( - $"Unable to return flea offer: {playerOffer.Id} as the profile: {offerCreatorId} could not be found" - ); + logger.Error($"Unable to return flea offer: {playerOffer.Id} as the profile: {offerCreatorId} could not be found"); return; } - var indexOfOfferInProfile = offerCreatorProfile.RagfairInfo.Offers.FindIndex(o => - o.Id == playerOffer.Id - ); + var indexOfOfferInProfile = offerCreatorProfile.RagfairInfo.Offers.FindIndex(o => o.Id == playerOffer.Id); if (indexOfOfferInProfile == -1) { - logger.Warning( - localisationService.GetText( - "ragfair-unable_to_find_offer_to_remove", - playerOffer.Id - ) - ); + logger.Warning(localisationService.GetText("ragfair-unable_to_find_offer_to_remove", playerOffer.Id)); return; } // Reduce player ragfair rep - offerCreatorProfile.RagfairInfo.Rating -= databaseService - .GetGlobals() - .Configuration.RagFair.RatingDecreaseCount; + offerCreatorProfile.RagfairInfo.Rating -= databaseService.GetGlobals().Configuration.RagFair.RatingDecreaseCount; offerCreatorProfile.RagfairInfo.IsRatingGrowing = false; // Increment players 'notSellSum' value @@ -353,10 +342,7 @@ public class RagfairOfferService( itemAndChildrenClone[0].Upd.StackObjectsCount = 1; // Ensure items IDs are unique to prevent collisions when added to player inventory - var reparentedItemAndChildren = itemHelper.ReparentItemAndChildren( - itemAndChildrenClone.FirstOrDefault(), - itemAndChildrenClone - ); + var reparentedItemAndChildren = itemHelper.ReparentItemAndChildren(itemAndChildrenClone.FirstOrDefault(), itemAndChildrenClone); reparentedItemAndChildren.RemapRootItemId(); result.AddRange(reparentedItemAndChildren); @@ -371,7 +357,6 @@ public class RagfairOfferService( /// True if enough offers have expired public bool EnoughExpiredOffersExistToProcess() { - return ragfairOfferHolder.GetExpiredOfferCount() - >= _ragfairConfig.Dynamic.ExpiredOfferThreshold; + return ragfairOfferHolder.GetExpiredOfferCount() >= _ragfairConfig.Dynamic.ExpiredOfferThreshold; } } diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs index 122fbbe1..dfbd6b7b 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairPriceService.cs @@ -54,9 +54,7 @@ public class RagfairPriceService( foreach ( var item in databaseService .GetItems() - .Values.Where(item => - string.Equals(item.Type, "Item", StringComparison.OrdinalIgnoreCase) - ) + .Values.Where(item => string.Equals(item.Type, "Item", StringComparison.OrdinalIgnoreCase)) ) { _staticPrices[item.Id] = handbookHelper.GetTemplatePrice(item.Id); @@ -132,10 +130,7 @@ public class RagfairPriceService( { var dynamicPrices = databaseService.GetPrices(); // Use dynamic prices first, fill in any gaps with data from static prices (handbook) - return dynamicPrices - .Concat(_staticPrices) - .GroupBy(x => x.Key) - .ToDictionary(x => x.Key, x => x.First().Value); + return dynamicPrices.Concat(_staticPrices).GroupBy(x => x.Key).ToDictionary(x => x.Key, x => x.First().Value); } public Dictionary GetAllStaticPrices() @@ -167,11 +162,7 @@ public class RagfairPriceService( /// Currency price desired in /// Price is for a pack type offer /// cost of item in desired currency - public double GetDynamicOfferPriceForOffer( - IEnumerable offerItems, - MongoId desiredCurrency, - bool isPackOffer - ) + public double GetDynamicOfferPriceForOffer(IEnumerable offerItems, MongoId desiredCurrency, bool isPackOffer) { // Price to return. var price = 0d; @@ -185,19 +176,10 @@ public class RagfairPriceService( continue; } - price += GetDynamicItemPrice( - item.Template, - desiredCurrency, - item, - offerItems, - isPackOffer - ).Value; + price += GetDynamicItemPrice(item.Template, desiredCurrency, item, offerItems, isPackOffer).Value; // Check if the item is a weapon preset. - if ( - item?.Upd?.SptPresetId is not null - && presetHelper.IsPresetBaseClass(item.Upd.SptPresetId.Value, BaseClasses.WEAPON) - ) + if (item?.Upd?.SptPresetId is not null && presetHelper.IsPresetBaseClass(item.Upd.SptPresetId.Value, BaseClasses.WEAPON)) // This is a weapon preset, which has its own price calculation that takes into account the mods in the // preset. Since we've already calculated the price for the preset entire preset in // `getDynamicItemPrice`, we can skip the rest of the items in the offer. @@ -256,21 +238,13 @@ public class RagfairPriceService( } // Check for existence of manual price adjustment multiplier - if ( - _ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue( - itemTemplateId, - out var multiplier - ) - ) + if (_ragfairConfig.Dynamic.ItemPriceMultiplier.TryGetValue(itemTemplateId, out var multiplier)) { price *= multiplier; } // The quality of the item affects the price + not on the ignore list - if ( - item is not null - && !_ragfairConfig.Dynamic.IgnoreQualityPriceVarianceBlacklist.Contains(itemTemplateId) - ) + if (item is not null && !_ragfairConfig.Dynamic.IgnoreQualityPriceVarianceBlacklist.Contains(itemTemplateId)) { var qualityModifier = itemHelper.GetItemQualityModifier(item); price *= qualityModifier; @@ -312,11 +286,7 @@ public class RagfairPriceService( /// Item being adjusted /// Current price of item /// Adjusted price of item - protected double AdjustUnreasonablePrice( - UnreasonableModPrices unreasonableItemChange, - MongoId itemTpl, - double price - ) + protected double AdjustUnreasonablePrice(UnreasonableModPrices unreasonableItemChange, MongoId itemTpl, double price) { var itemHandbookPrice = handbookHelper.GetTemplatePrice(itemTpl); if (itemHandbookPrice > 0) @@ -383,9 +353,7 @@ public class RagfairPriceService( // var itemDetails = this.itemHelper.getItem(itemTpl); // this.logger.debug(`item below handbook price {itemDetails[1]._name} handbook: {itemHandbookPrice} flea: ${itemPrice} {priceDifferencePercent}%`); { - return Math.Round( - itemHandbookPrice.Value * offerAdjustmentSettings.HandbookPriceMultiplier - ); + return Math.Round(itemHandbookPrice.Value * offerAdjustmentSettings.HandbookPriceMultiplier); } return itemPrice; @@ -400,12 +368,7 @@ public class RagfairPriceService( protected double RandomiseOfferPrice(double existingPrice, MinMax rangeValues) { // Multiply by 100 to get 2 decimal places of precision - var multiplier = randomUtil.GetBiasedRandomNumber( - rangeValues.Min * 100, - rangeValues.Max * 100, - 2, - 2 - ); + var multiplier = randomUtil.GetBiasedRandomNumber(rangeValues.Min * 100, rangeValues.Max * 100, 2, 2); // return multiplier back to its original decimal place location return existingPrice * (multiplier / 100); @@ -418,11 +381,7 @@ public class RagfairPriceService( /// weapon plus mods /// price of existing base weapon /// price of weapon in roubles - protected double GetWeaponPresetPrice( - Item weaponRootItem, - IEnumerable weaponWithChildren, - double existingPrice - ) + protected double GetWeaponPresetPrice(Item weaponRootItem, IEnumerable weaponWithChildren, double existingPrice) { // Get the default preset for this weapon var presetResult = GetWeaponPreset(weaponRootItem); @@ -456,9 +415,7 @@ public class RagfairPriceService( var replacedModsPrice = 0d; foreach (var replacedMod in modsReplacedByNewMods) { - replacedModsPrice += GetHighestHandbookOrTraderPriceAsRouble( - replacedMod.Template - ).Value; + replacedModsPrice += GetHighestHandbookOrTraderPriceAsRouble(replacedMod.Template).Value; } // Subtract replaced mods total from extra mods total diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs index bedbb71f..0bea2005 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairRequiredItemsService.cs @@ -6,10 +6,7 @@ using SPTarkov.Server.Core.Models.Common; namespace SPTarkov.Server.Core.Services; [Injectable(InjectionType.Singleton)] -public class RagfairRequiredItemsService( - RagfairOfferService ragfairOfferService, - PaymentHelper paymentHelper -) +public class RagfairRequiredItemsService(RagfairOfferService ragfairOfferService, PaymentHelper paymentHelper) { /// /// Key = tpl diff --git a/Libraries/SPTarkov.Server.Core/Services/RagfairTaxService.cs b/Libraries/SPTarkov.Server.Core/Services/RagfairTaxService.cs index 4182eba6..60a9bace 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RagfairTaxService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RagfairTaxService.cs @@ -21,15 +21,9 @@ public class RagfairTaxService( ICloner cloner ) { - protected readonly Dictionary< - MongoId, - StorePlayerOfferTaxAmountRequestData - > _playerOfferTaxCache = new(); + protected readonly Dictionary _playerOfferTaxCache = new(); - public void StoreClientOfferTaxValue( - MongoId sessionId, - StorePlayerOfferTaxAmountRequestData offer - ) + public void StoreClientOfferTaxValue(MongoId sessionId, StorePlayerOfferTaxAmountRequestData offer) { _playerOfferTaxCache[offer.Id.Value] = offer; } @@ -39,9 +33,7 @@ public class RagfairTaxService( _playerOfferTaxCache.Remove(offerIdToRemove); } - public StorePlayerOfferTaxAmountRequestData? GetStoredClientOfferTaxValueById( - MongoId offerIdToGet - ) + public StorePlayerOfferTaxAmountRequestData? GetStoredClientOfferTaxValueById(MongoId offerIdToGet) { return _playerOfferTaxCache.GetValueOrDefault(offerIdToGet); } @@ -56,13 +48,7 @@ public class RagfairTaxService( /// Number of offers being created /// /// Tax in roubles - public double CalculateTax( - Item item, - PmcData pmcData, - double? requirementsValue, - int? offerItemCount, - bool sellInOnePiece - ) + public double CalculateTax(Item item, PmcData pmcData, double? requirementsValue, int? offerItemCount, bool sellInOnePiece) { if (requirementsValue is null) { @@ -98,32 +84,22 @@ public class RagfairTaxService( itemPriceMult = Math.Pow(4.0, itemPriceMult); requirementPriceMult = Math.Pow(4.0, requirementPriceMult); - var hideoutFleaTaxDiscountBonusSum = pmcData.GetBonusValueFromProfile( - BonusType.RagfairCommission - ); + var hideoutFleaTaxDiscountBonusSum = pmcData.GetBonusValueFromProfile(BonusType.RagfairCommission); // A negative bonus implies a lower discount, since we subtract later, invert the value here var taxDiscountPercent = -(hideoutFleaTaxDiscountBonusSum / 100.0); - var tax = - itemWorth * itemTaxMult * itemPriceMult - + requirementsPrice * requirementTaxMult * requirementPriceMult; + var tax = itemWorth * itemTaxMult * itemPriceMult + requirementsPrice * requirementTaxMult * requirementPriceMult; var discountedTax = tax * (1.0 - taxDiscountPercent); var itemComissionMult = itemTemplate.Properties.RagFairCommissionModifier ?? 1; if (item.Upd.Buff is not null) { var buffType = item.Upd.Buff.BuffType; - var itemEnhancementSettings = databaseService - .GetGlobals() - .Configuration.RepairSettings.ItemEnhancementSettings; + var itemEnhancementSettings = databaseService.GetGlobals().Configuration.RepairSettings.ItemEnhancementSettings; var priceModiferValue = buffType switch { - BuffType.DamageReduction => itemEnhancementSettings - .DamageReduction - .PriceModifierValue, - BuffType.MalfunctionProtections => itemEnhancementSettings - .MalfunctionProtections - .PriceModifierValue, + BuffType.DamageReduction => itemEnhancementSettings.DamageReduction.PriceModifierValue, + BuffType.MalfunctionProtections => itemEnhancementSettings.MalfunctionProtections.PriceModifierValue, BuffType.WeaponSpread => itemEnhancementSettings.WeaponSpread.PriceModifierValue, _ => 1d, }; @@ -150,13 +126,7 @@ public class RagfairTaxService( /// /// /// - protected double CalculateItemWorth( - Item item, - TemplateItem itemTemplate, - int itemCount, - PmcData pmcData, - bool isRootItem = true - ) + protected double CalculateItemWorth(Item item, TemplateItem itemTemplate, int itemCount, PmcData pmcData, bool isRootItem = true) { var worth = ragfairPriceService.GetFleaPriceForItem(item.Template); @@ -192,9 +162,7 @@ public class RagfairTaxService( if (itemTemplate.Properties is null) { - logger.Warning( - $"Item: {item.Id} lacks _props and cannot have its worth calculated properly" - ); + logger.Warning($"Item: {item.Id} lacks _props and cannot have its worth calculated properly"); return worth; } @@ -204,53 +172,36 @@ public class RagfairTaxService( worth = worth / (itemTemplate.Properties.MaximumNumberOfUsage ?? 1) - * ( - (itemTemplate.Properties.MaximumNumberOfUsage ?? 1) - - upd.Key.NumberOfUsages.Value - ); + * ((itemTemplate.Properties.MaximumNumberOfUsage ?? 1) - upd.Key.NumberOfUsages.Value); } if (upd.Resource is not null && (itemTemplate.Properties.MaxResource ?? 0) > 0) { - worth = (double)( - worth * 0.1 - + worth * 0.9 / (itemTemplate.Properties.MaxResource ?? 1) * upd.Resource.Value - ); + worth = (double)(worth * 0.1 + worth * 0.9 / (itemTemplate.Properties.MaxResource ?? 1) * upd.Resource.Value); } if (upd.SideEffect is not null && (itemTemplate.Properties.MaxResource ?? 0) > 0) { - worth = (double)( - worth * 0.1 - + worth * 0.9 / (itemTemplate.Properties.MaxResource ?? 1) * upd.SideEffect.Value - ); + worth = (double)(worth * 0.1 + worth * 0.9 / (itemTemplate.Properties.MaxResource ?? 1) * upd.SideEffect.Value); } if (upd.MedKit is not null && (itemTemplate.Properties.MaxHpResource ?? 0) > 0) { - worth = - worth / (itemTemplate.Properties.MaxHpResource ?? 1) * upd.MedKit.HpResource.Value; + worth = worth / (itemTemplate.Properties.MaxHpResource ?? 1) * upd.MedKit.HpResource.Value; } if (upd.FoodDrink is not null && (itemTemplate.Properties.MaxResource ?? 0) > 0) { - worth = - worth / (itemTemplate.Properties.MaxResource ?? 1) * upd.FoodDrink.HpPercent.Value; + worth = worth / (itemTemplate.Properties.MaxResource ?? 1) * upd.FoodDrink.HpPercent.Value; } if (upd.Repairable is not null && (itemTemplate.Properties.ArmorClass ?? 0) > 0) { var num2 = 0.01 * Math.Pow(0.0, upd.Repairable.MaxDurability.Value); worth = - worth - * ( - upd.Repairable.MaxDurability.Value - / (itemTemplate.Properties.Durability ?? 1) - - num2 - ) + worth * (upd.Repairable.MaxDurability.Value / (itemTemplate.Properties.Durability ?? 1) - num2) - Math.Floor( - (itemTemplate.Properties.RepairCost ?? 0) - * (upd.Repairable.MaxDurability.Value - upd.Repairable.Durability.Value) + (itemTemplate.Properties.RepairCost ?? 0) * (upd.Repairable.MaxDurability.Value - upd.Repairable.Durability.Value) ); } diff --git a/Libraries/SPTarkov.Server.Core/Services/RaidTimeAdjustmentService.cs b/Libraries/SPTarkov.Server.Core/Services/RaidTimeAdjustmentService.cs index ad5d377d..ff2dfae4 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RaidTimeAdjustmentService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RaidTimeAdjustmentService.cs @@ -42,18 +42,12 @@ public class RaidTimeAdjustmentService( // Change loot multiplier values before they're used below if (raidAdjustments.DynamicLootPercent < 100) { - AdjustLootMultipliers( - _locationConfig.LooseLootMultiplier, - raidAdjustments.DynamicLootPercent - ); + AdjustLootMultipliers(_locationConfig.LooseLootMultiplier, raidAdjustments.DynamicLootPercent); } if (raidAdjustments.StaticLootPercent < 100) { - AdjustLootMultipliers( - _locationConfig.StaticLootMultiplier, - raidAdjustments.StaticLootPercent - ); + AdjustLootMultipliers(_locationConfig.StaticLootMultiplier, raidAdjustments.StaticLootPercent); } // Adjust the escape time limit @@ -99,17 +93,11 @@ public class RaidTimeAdjustmentService( /// /// Multipliers to adjust /// Percent to change values to - protected void AdjustLootMultipliers( - Dictionary mapLootMultipliers, - double? loosePercent - ) + protected void AdjustLootMultipliers(Dictionary mapLootMultipliers, double? loosePercent) { foreach (var location in mapLootMultipliers) { - mapLootMultipliers[location.Key] = randomUtil.GetPercentOfValue( - mapLootMultipliers[location.Key], - loosePercent ?? 1 - ); + mapLootMultipliers[location.Key] = randomUtil.GetPercentOfValue(mapLootMultipliers[location.Key], loosePercent ?? 1); } } @@ -122,9 +110,7 @@ public class RaidTimeAdjustmentService( { // Remove waves that spawned before the player joined var originalWaveCount = mapBase.Waves.Count; - mapBase.Waves = mapBase - .Waves.Where(x => x.TimeMax > raidAdjustments.SimulatedRaidStartSeconds) - .ToList(); + mapBase.Waves = mapBase.Waves.Where(x => x.TimeMax > raidAdjustments.SimulatedRaidStartSeconds).ToList(); // Adjust wave min/max times to match new simulated start var startSeconds = raidAdjustments.SimulatedRaidStartSeconds.GetValueOrDefault(1); @@ -156,11 +142,7 @@ public class RaidTimeAdjustmentService( var result = new RaidChanges { NewSurviveTimeSeconds = globals.Configuration.Exp.MatchEnd.SurvivedSecondsRequirement, - OriginalSurvivalTimeSeconds = globals - .Configuration - .Exp - .MatchEnd - .SurvivedSecondsRequirement, + OriginalSurvivalTimeSeconds = globals.Configuration.Exp.MatchEnd.SurvivedSecondsRequirement, DynamicLootPercent = 100, StaticLootPercent = 100, SimulatedRaidStartSeconds = 0, @@ -185,15 +167,11 @@ public class RaidTimeAdjustmentService( } // Get the weighted percent to reduce the raid time by - var chosenRaidReductionPercent = int.Parse( - weightedRandomHelper.GetWeightedValue(mapSettings.ReductionPercentWeights) - ); + var chosenRaidReductionPercent = int.Parse(weightedRandomHelper.GetWeightedValue(mapSettings.ReductionPercentWeights)); var raidTimeRemainingPercent = 100 - chosenRaidReductionPercent; // How many minutes raid will last - var newRaidTimeMinutes = Math.Floor( - randomUtil.ReduceValueByPercent(baseEscapeTimeMinutes ?? 1, chosenRaidReductionPercent) - ); + var newRaidTimeMinutes = Math.Floor(randomUtil.ReduceValueByPercent(baseEscapeTimeMinutes ?? 1, chosenRaidReductionPercent)); // Time player spawns into the raid if it was online var simulatedRaidStartTimeMinutes = baseEscapeTimeMinutes - newRaidTimeMinutes; @@ -202,31 +180,21 @@ public class RaidTimeAdjustmentService( // Calculate how long player needs to be in raid to get a `survived` extract status result.NewSurviveTimeSeconds = Math.Max( - result.OriginalSurvivalTimeSeconds.Value - - (baseEscapeTimeMinutes.Value - newRaidTimeMinutes) * 60, + result.OriginalSurvivalTimeSeconds.Value - (baseEscapeTimeMinutes.Value - newRaidTimeMinutes) * 60, 0 ); if (mapSettings.ReduceLootByPercent) { - result.DynamicLootPercent = Math.Max( - raidTimeRemainingPercent, - mapSettings.MinDynamicLootPercent - ); - result.StaticLootPercent = Math.Max( - raidTimeRemainingPercent, - mapSettings.MinStaticLootPercent - ); + result.DynamicLootPercent = Math.Max(raidTimeRemainingPercent, mapSettings.MinDynamicLootPercent); + result.StaticLootPercent = Math.Max(raidTimeRemainingPercent, mapSettings.MinStaticLootPercent); } - logger.Debug( - $"Reduced: {request.Location} raid time by: {chosenRaidReductionPercent}% to {newRaidTimeMinutes} minutes" - ); + logger.Debug($"Reduced: {request.Location} raid time by: {chosenRaidReductionPercent}% to {newRaidTimeMinutes} minutes"); // Calculate how long player needs to be in raid to get a `survived` extract status result.NewSurviveTimeSeconds = Math.Max( - result.OriginalSurvivalTimeSeconds - (baseEscapeTimeMinutes - newRaidTimeMinutes) * 60 - ?? 0, + result.OriginalSurvivalTimeSeconds - (baseEscapeTimeMinutes - newRaidTimeMinutes) * 60 ?? 0, 0D ); @@ -252,9 +220,7 @@ public class RaidTimeAdjustmentService( var mapSettings = _locationConfig.ScavRaidTimeSettings.Maps[location.ToLowerInvariant()]; if (mapSettings is null) { - logger.Warning( - $"Unable to find scav raid time settings for map: {location}, using defaults" - ); + logger.Warning($"Unable to find scav raid time settings for map: {location}, using defaults"); return new ScavRaidTimeLocationSettings(); } @@ -267,10 +233,7 @@ public class RaidTimeAdjustmentService( /// Map base file player is on /// How long raid is in minutes /// List of exit changes to send to client - protected List GetExitAdjustments( - LocationBase mapBase, - double newRaidTimeMinutes - ) + protected List GetExitAdjustments(LocationBase mapBase, double newRaidTimeMinutes) { List result = []; // Adjust train exits only @@ -310,18 +273,13 @@ public class RaidTimeAdjustmentService( // // I added 2 seconds just to be safe... // - var trainArrivalDelaySeconds = _locationConfig - .ScavRaidTimeSettings - .Settings - .TrainArrivalDelayObservedSeconds; + var trainArrivalDelaySeconds = _locationConfig.ScavRaidTimeSettings.Settings.TrainArrivalDelayObservedSeconds; // Determine the earliest possible time in the raid when the train would leave - var earliestPossibleDepartureMinutes = - (exit.MinTime + exit.Count + exit.ExfiltrationTime + trainArrivalDelaySeconds) / 60; + var earliestPossibleDepartureMinutes = (exit.MinTime + exit.Count + exit.ExfiltrationTime + trainArrivalDelaySeconds) / 60; // If raid is after last moment train can leave, assume train has already left, disable extract - var mostPossibleTimeRemainingAfterDeparture = - mapBase.EscapeTimeLimit - earliestPossibleDepartureMinutes; + var mostPossibleTimeRemainingAfterDeparture = mapBase.EscapeTimeLimit - earliestPossibleDepartureMinutes; if (newRaidTimeMinutes < mostPossibleTimeRemainingAfterDeparture) { exitChange.Chance = 0; @@ -339,9 +297,7 @@ public class RaidTimeAdjustmentService( exitChange.MinTime = Math.Max(exit.MinTime - reductionSeconds ?? 0, 0); exitChange.MaxTime = Math.Max(exit.MaxTime - reductionSeconds ?? 0, 0); - logger.Debug( - $"Train appears between: {exitChange.MinTime} and {exitChange.MaxTime} seconds raid time" - ); + logger.Debug($"Train appears between: {exitChange.MinTime} and {exitChange.MaxTime} seconds raid time"); result.Add(exitChange); } diff --git a/Libraries/SPTarkov.Server.Core/Services/RaidWeatherService.cs b/Libraries/SPTarkov.Server.Core/Services/RaidWeatherService.cs index 1cc8709e..7896a1b5 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RaidWeatherService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RaidWeatherService.cs @@ -30,18 +30,13 @@ public class RaidWeatherService( var staringTimestamp = timeUtil.GetTodayMidnightTimeStamp(); // How far into future do we generate weather - var futureTimestampToReach = - staringTimestamp - + timeUtil.GetHoursAsSeconds(_weatherConfig.Weather.GenerateWeatherAmountHours ?? 1); + var futureTimestampToReach = staringTimestamp + timeUtil.GetHoursAsSeconds(_weatherConfig.Weather.GenerateWeatherAmountHours ?? 1); // Keep adding new weather until we have reached desired future date var nextTimestamp = staringTimestamp; while (nextTimestamp <= futureTimestampToReach) { - var newWeatherToAddToCache = weatherGenerator.GenerateWeather( - currentSeason, - nextTimestamp - ); + var newWeatherToAddToCache = weatherGenerator.GenerateWeather(currentSeason, nextTimestamp); // Add generated weather for time period to cache _weatherForecast.Add(newWeatherToAddToCache); @@ -58,10 +53,7 @@ public class RaidWeatherService( protected long GetWeightedWeatherTimePeriod() { var chosenTimePeriodMinutes = weightedRandomHelper - .WeightedRandom( - _weatherConfig.Weather.TimePeriod.Values, - _weatherConfig.Weather.TimePeriod.Weights - ) + .WeightedRandom(_weatherConfig.Weather.TimePeriod.Values, _weatherConfig.Weather.TimePeriod.Weights) .Item; return chosenTimePeriodMinutes * 60; @@ -98,9 +90,7 @@ public class RaidWeatherService( _weatherForecast.RemoveAll(weather => weather.Timestamp < timeUtil.GetTimeStamp()); // Check data exists for current time - var result = _weatherForecast.Where(weather => - weather.Timestamp >= timeUtil.GetTimeStamp() - ); + var result = _weatherForecast.Where(weather => weather.Timestamp >= timeUtil.GetTimeStamp()); if (!result.Any()) { GenerateWeather(currentSeason); diff --git a/Libraries/SPTarkov.Server.Core/Services/RepairService.cs b/Libraries/SPTarkov.Server.Core/Services/RepairService.cs index 8640354c..d6fbc1ca 100644 --- a/Libraries/SPTarkov.Server.Core/Services/RepairService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/RepairService.cs @@ -44,36 +44,19 @@ public class RepairService( /// Details of the item to repair /// Trader being used to repair item /// RepairDetails object - public RepairDetails RepairItemByTrader( - MongoId sessionID, - PmcData pmcData, - RepairItem repairItemDetails, - MongoId traderId - ) + public RepairDetails RepairItemByTrader(MongoId sessionID, PmcData pmcData, RepairItem repairItemDetails, MongoId traderId) { - var itemToRepair = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == repairItemDetails.Id - ); + var itemToRepair = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == repairItemDetails.Id); if (itemToRepair is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-unable_to_find_item_in_inventory_cant_repair", - repairItemDetails.Id - ) - ); + logger.Error(serverLocalisationService.GetText("repair-unable_to_find_item_in_inventory_cant_repair", repairItemDetails.Id)); } var priceCoef = traderHelper.GetLoyaltyLevel(traderId, pmcData).RepairPriceCoefficient; var traderRepairDetails = traderHelper.GetTrader(traderId, sessionID)?.Repair; if (traderRepairDetails is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-unable_to_find_trader_details_by_id", - traderId - ) - ); + logger.Error(serverLocalisationService.GetText("repair-unable_to_find_trader_details_by_id", traderId)); } var repairQualityMultiplier = traderRepairDetails.Quality; @@ -97,19 +80,11 @@ public class RepairService( var itemRepairCost = items[itemToRepair.Template].Properties.RepairCost; if (itemRepairCost is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-unable_to_find_item_repair_cost", - itemToRepair.Template - ) - ); + logger.Error(serverLocalisationService.GetText("repair-unable_to_find_item_repair_cost", itemToRepair.Template)); } var repairCost = Math.Round( - itemRepairCost.Value - * repairItemDetails.Count.Value - * repairRate.Value - * _repairConfig.PriceMultiplier + itemRepairCost.Value * repairItemDetails.Count.Value * repairRate.Value * _repairConfig.PriceMultiplier ); if (logger.IsLogEnabled(LogLevel.Debug)) @@ -166,11 +141,7 @@ public class RepairService( /// Session id /// Details of item repaired, cost/item /// Profile to add points to - public void AddRepairSkillPoints( - MongoId sessionId, - RepairDetails repairDetails, - PmcData pmcData - ) + public void AddRepairSkillPoints(MongoId sessionId, RepairDetails repairDetails, PmcData pmcData) { // Handle kit repair of weapon if ( @@ -183,34 +154,21 @@ public class RepairService( if (skillPoints > 0) { logger.Debug($"Added: {skillPoints} WEAPON_TREATMENT points to skill"); - profileHelper.AddSkillPointsToPlayer( - pmcData, - SkillTypes.WeaponTreatment, - skillPoints, - true - ); + profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.WeaponTreatment, skillPoints, true); } } // Handle kit repair of armor if ( repairDetails.RepairedByKit.GetValueOrDefault(false) - && itemHelper.IsOfBaseclasses( - repairDetails.RepairedItem.Template, - [BaseClasses.ARMOR_PLATE, BaseClasses.BUILT_IN_INSERTS] - ) + && itemHelper.IsOfBaseclasses(repairDetails.RepairedItem.Template, [BaseClasses.ARMOR_PLATE, BaseClasses.BUILT_IN_INSERTS]) ) { var itemDetails = itemHelper.GetItem(repairDetails.RepairedItem.Template); if (!itemDetails.Key) { // No item found - logger.Error( - serverLocalisationService.GetText( - "repair-unable_to_find_item_in_db", - repairDetails.RepairedItem.Template - ) - ); + logger.Error(serverLocalisationService.GetText("repair-unable_to_find_item_in_db", repairDetails.RepairedItem.Template)); return; } @@ -219,17 +177,10 @@ public class RepairService( var vestSkillToLevel = isHeavyArmor ? SkillTypes.HeavyVests : SkillTypes.LightVests; if (repairDetails.RepairPoints is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-item_has_no_repair_points", - repairDetails.RepairedItem.Template - ) - ); + logger.Error(serverLocalisationService.GetText("repair-item_has_no_repair_points", repairDetails.RepairedItem.Template)); } - var pointsToAddToVestSkill = - repairDetails.RepairPoints - * _repairConfig.ArmorKitSkillPointGainPerRepairPointMultiplier; + var pointsToAddToVestSkill = repairDetails.RepairPoints * _repairConfig.ArmorKitSkillPointGainPerRepairPointMultiplier; logger.Debug($"Added: {pointsToAddToVestSkill} {vestSkillToLevel} skill"); profileHelper.AddSkillPointsToPlayer(pmcData, vestSkillToLevel, pointsToAddToVestSkill); @@ -240,11 +191,7 @@ public class RepairService( if (intellectGainedFromRepair > 0) { logger.Debug($"Added: {intellectGainedFromRepair} intellect skill"); - profileHelper.AddSkillPointsToPlayer( - pmcData, - SkillTypes.Intellect, - intellectGainedFromRepair - ); + profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.Intellect, intellectGainedFromRepair); } } @@ -253,35 +200,21 @@ public class RepairService( if (repairDetails.RepairedByKit.GetValueOrDefault(false)) { // Weapons/armor have different multipliers - var intRepairMultiplier = itemHelper.IsOfBaseclass( - repairDetails.RepairedItem.Template, - BaseClasses.WEAPON - ) + var intRepairMultiplier = itemHelper.IsOfBaseclass(repairDetails.RepairedItem.Template, BaseClasses.WEAPON) ? _repairConfig.RepairKitIntellectGainMultiplier.Weapon : _repairConfig.RepairKitIntellectGainMultiplier.Armor; // Limit gain to a max value defined in config.maxIntellectGainPerRepair if (repairDetails.RepairPoints is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-item_has_no_repair_points", - repairDetails.RepairedItem.Template - ) - ); + logger.Error(serverLocalisationService.GetText("repair-item_has_no_repair_points", repairDetails.RepairedItem.Template)); } - return Math.Min( - repairDetails.RepairPoints.Value * intRepairMultiplier, - _repairConfig.MaxIntellectGainPerRepair.Kit - ); + return Math.Min(repairDetails.RepairPoints.Value * intRepairMultiplier, _repairConfig.MaxIntellectGainPerRepair.Kit); } // Trader repair - Not as accurate as kit, needs data from live - return Math.Min( - repairDetails.RepairAmount.Value / 10, - _repairConfig.MaxIntellectGainPerRepair.Trader - ); + return Math.Min(repairDetails.RepairAmount.Value / 10, _repairConfig.MaxIntellectGainPerRepair.Trader); } /// @@ -341,23 +274,14 @@ public class RepairService( var itemToRepair = pmcData.Inventory.Items.FirstOrDefault(x => x.Id == itemToRepairId); if (itemToRepair is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-item_not_found_unable_to_repair", - itemToRepairId - ) - ); + logger.Error(serverLocalisationService.GetText("repair-item_not_found_unable_to_repair", itemToRepairId)); } var itemsDb = databaseService.GetItems(); var itemToRepairDetails = itemsDb[itemToRepair.Template]; var repairItemIsArmor = itemToRepairDetails.Properties.ArmorMaterial is not null; - var repairAmount = - repairKits[0].Count / GetKitDivisor(itemToRepairDetails, repairItemIsArmor, pmcData); - var shouldApplyDurabilityLoss = ShouldRepairKitApplyDurabilityLoss( - pmcData, - _repairConfig.ApplyRandomizeDurabilityLoss - ); + var repairAmount = repairKits[0].Count / GetKitDivisor(itemToRepairDetails, repairItemIsArmor, pmcData); + var shouldApplyDurabilityLoss = ShouldRepairKitApplyDurabilityLoss(pmcData, _repairConfig.ApplyRandomizeDurabilityLoss); repairHelper.UpdateItemDurability( itemToRepair, @@ -372,17 +296,10 @@ public class RepairService( // Find and use repair kit defined in body foreach (var repairKit in repairKits) { - var repairKitInInventory = pmcData.Inventory.Items.FirstOrDefault(item => - item.Id == repairKit.Id - ); + var repairKitInInventory = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == repairKit.Id); if (repairKitInInventory is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-repair_kit_not_found_in_inventory", - repairKit.Id - ) - ); + logger.Error(serverLocalisationService.GetText("repair-repair_kit_not_found_in_inventory", repairKit.Id)); } var repairKitDetails = itemsDb[repairKitInInventory.Template]; @@ -419,14 +336,9 @@ public class RepairService( var globalConfig = globals.Configuration; var globalRepairSettings = globalConfig.RepairSettings; - var intellectRepairPointsPerLevel = globalConfig - .SkillsSettings - .Intellect - .RepairPointsCostReduction; - var profileIntellectLevel = - pmcData.GetSkillFromProfile(SkillTypes.Intellect)?.Progress ?? 0; - var intellectPointReduction = - intellectRepairPointsPerLevel * Math.Truncate(profileIntellectLevel / 100); + var intellectRepairPointsPerLevel = globalConfig.SkillsSettings.Intellect.RepairPointsCostReduction; + var profileIntellectLevel = pmcData.GetSkillFromProfile(SkillTypes.Intellect)?.Progress ?? 0; + var intellectPointReduction = intellectRepairPointsPerLevel * Math.Truncate(profileIntellectLevel / 100); if (isArmor) { @@ -475,10 +387,7 @@ public class RepairService( /// Player profile /// Value from repair config /// True if loss should be applied - protected bool ShouldRepairKitApplyDurabilityLoss( - PmcData pmcData, - bool applyRandomizeDurabilityLoss - ) + protected bool ShouldRepairKitApplyDurabilityLoss(PmcData pmcData, bool applyRandomizeDurabilityLoss) { var shouldApplyDurabilityLoss = applyRandomizeDurabilityLoss; if (shouldApplyDurabilityLoss) @@ -500,25 +409,17 @@ public class RepairService( /// /// Repair kit details from db /// Repair kit to update - protected void AddMaxResourceToKitIfMissing( - TemplateItem repairKitDetails, - Item repairKitInInventory - ) + protected void AddMaxResourceToKitIfMissing(TemplateItem repairKitDetails, Item repairKitInInventory) { var maxRepairAmount = repairKitDetails.Properties.MaxRepairResource; if (repairKitInInventory.Upd is null) { if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Repair kit: {repairKitInInventory.Id} in inventory lacks upd object, adding" - ); + logger.Debug($"Repair kit: {repairKitInInventory.Id} in inventory lacks upd object, adding"); } - repairKitInInventory.Upd = new Upd - { - RepairKit = new UpdRepairKit { Resource = maxRepairAmount }, - }; + repairKitInInventory.Upd = new Upd { RepairKit = new UpdRepairKit { Resource = maxRepairAmount } }; } if (repairKitInInventory.Upd.RepairKit?.Resource is null) @@ -545,21 +446,14 @@ public class RepairService( if ( itemHelper.IsOfBaseclasses( repairDetails.RepairedItem.Template, - [ - BaseClasses.ARMOR, - BaseClasses.VEST, - BaseClasses.HEADWEAR, - BaseClasses.ARMOR_PLATE, - ] + [BaseClasses.ARMOR, BaseClasses.VEST, BaseClasses.HEADWEAR, BaseClasses.ARMOR_PLATE] ) ) { var armorConfig = _repairConfig.RepairKit.Armor; AddBuff(armorConfig, repairDetails.RepairedItem); } - else if ( - itemHelper.IsOfBaseclass(repairDetails.RepairedItem.Template, BaseClasses.WEAPON) - ) + else if (itemHelper.IsOfBaseclass(repairDetails.RepairedItem.Template, BaseClasses.WEAPON)) { var weaponConfig = _repairConfig.RepairKit.Weapon; AddBuff(weaponConfig, repairDetails.RepairedItem); @@ -583,21 +477,14 @@ public class RepairService( var bonusValue = randomUtil.GetDouble(bonusValues.Min, bonusValues.Max); var bonusThresholdPercents = bonusRarity[bonusTypeName].ActiveDurabilityPercentMinMax; - var bonusThresholdPercent = randomUtil.GetDouble( - bonusThresholdPercents.Min, - bonusThresholdPercents.Max - ); + var bonusThresholdPercent = randomUtil.GetDouble(bonusThresholdPercents.Min, bonusThresholdPercents.Max); item.Upd.Buff = new UpdBuff { Rarity = bonusRarityName, BuffType = Enum.Parse(bonusTypeName), Value = bonusValue, - ThresholdDurability = randomUtil.GetPercentOfValue( - bonusThresholdPercent, - item.Upd.Repairable.Durability.Value, - 0 - ), + ThresholdDurability = randomUtil.GetPercentOfValue(bonusThresholdPercent, item.Upd.Repairable.Durability.Value, 0), }; } @@ -627,19 +514,14 @@ public class RepairService( } // Skill < level 10 + repairing weapon - if ( - itemSkillType == SkillTypes.WeaponTreatment - && pmcData.GetSkillFromProfile(SkillTypes.WeaponTreatment)?.Progress < 1000 - ) + if (itemSkillType == SkillTypes.WeaponTreatment && pmcData.GetSkillFromProfile(SkillTypes.WeaponTreatment)?.Progress < 1000) { return false; } // Skill < level 10 + repairing armor if ( - new HashSet { SkillTypes.LightVests, SkillTypes.HeavyVests }.Contains( - itemSkillType.Value - ) + new HashSet { SkillTypes.LightVests, SkillTypes.HeavyVests }.Contains(itemSkillType.Value) && pmcData.GetSkillFromProfile(itemSkillType.Value)?.Progress < 1000 ) { @@ -655,9 +537,7 @@ public class RepairService( buffSettings = ((ArmorSkills)skillSettings[itemSkillType.ToString()]).BuffSettings; break; case SkillTypes.WeaponTreatment: - buffSettings = ( - (WeaponTreatment)skillSettings[itemSkillType.ToString()] - ).BuffSettings; + buffSettings = ((WeaponTreatment)skillSettings[itemSkillType.ToString()]).BuffSettings; break; default: logger.Error($"Unhandled buff type: {itemSkillType}"); @@ -668,30 +548,17 @@ public class RepairService( var commonBuffChanceLevelBonus = buffSettings.CommonBuffChanceLevelBonus; var receivedDurabilityMaxPercent = buffSettings.ReceivedDurabilityMaxPercent; - var skillLevel = Math.Truncate( - (pmcData.GetSkillFromProfile(itemSkillType.Value)?.Progress ?? 0) / 100 - ); + var skillLevel = Math.Truncate((pmcData.GetSkillFromProfile(itemSkillType.Value)?.Progress ?? 0) / 100); if (repairDetails.RepairPoints is null) { - logger.Error( - serverLocalisationService.GetText( - "repair-item_has_no_repair_points", - repairDetails.RepairedItem.Template - ) - ); + logger.Error(serverLocalisationService.GetText("repair-item_has_no_repair_points", repairDetails.RepairedItem.Template)); } - var durabilityToRestorePercent = - repairDetails.RepairPoints / template.Properties.MaxDurability; - var durabilityMultiplier = GetDurabilityMultiplier( - receivedDurabilityMaxPercent, - durabilityToRestorePercent.Value - ); + var durabilityToRestorePercent = repairDetails.RepairPoints / template.Properties.MaxDurability; + var durabilityMultiplier = GetDurabilityMultiplier(receivedDurabilityMaxPercent, durabilityToRestorePercent.Value); - var doBuff = - commonBuffMinChanceValue - + commonBuffChanceLevelBonus * skillLevel * durabilityMultiplier; + var doBuff = commonBuffMinChanceValue + commonBuffChanceLevelBonus * skillLevel * durabilityMultiplier; var random = new Random(); return random.Next() <= doBuff; } @@ -741,10 +608,7 @@ public class RepairService( /// Max durability percent /// current durability percent /// durability multiplier value - protected double GetDurabilityMultiplier( - double receiveDurabilityMaxPercent, - double receiveDurabilityPercent - ) + protected double GetDurabilityMultiplier(double receiveDurabilityMaxPercent, double receiveDurabilityPercent) { // Ensure the max percent is at least 0.01 var validMaxPercent = Math.Max(0.01, receiveDurabilityMaxPercent); diff --git a/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs b/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs index dc1b701d..9aa6a991 100644 --- a/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/SeasonalEventService.cs @@ -90,8 +90,7 @@ public class SeasonalEventService( protected readonly HttpConfig _httpConfig = configServer.GetConfig(); protected readonly LocationConfig _locationConfig = configServer.GetConfig(); protected readonly QuestConfig _questConfig = configServer.GetConfig(); - protected readonly SeasonalEventConfig _seasonalEventConfig = - configServer.GetConfig(); + protected readonly SeasonalEventConfig _seasonalEventConfig = configServer.GetConfig(); protected readonly WeatherConfig _weatherConfig = configServer.GetConfig(); /// @@ -204,9 +203,7 @@ public class SeasonalEventService( /// /// Name of event to get gear changes for /// bots with equipment changes - protected Dictionary>>? GetEventBotGear( - SeasonalEventType eventType - ) + protected Dictionary>>? GetEventBotGear(SeasonalEventType eventType) { return _seasonalEventConfig.EventGear.GetValueOrDefault(eventType, null); } @@ -216,9 +213,7 @@ public class SeasonalEventService( /// /// Name of event to get gear changes for /// bots with loot changes - protected Dictionary>> GetEventBotLoot( - SeasonalEventType eventType - ) + protected Dictionary>> GetEventBotLoot(SeasonalEventType eventType) { return _seasonalEventConfig.EventLoot.GetValueOrDefault(eventType, null); } @@ -270,9 +265,7 @@ public class SeasonalEventService( var seasonEvent = _seasonalEventConfig.Events.FirstOrDefault(e => e.Type == eventType); if (seasonEvent is null) { - logger.Warning( - $"Unable to force event: {eventType} as it cannot be found in events config" - ); + logger.Warning($"Unable to force event: {eventType} as it cannot be found in events config"); return false; } @@ -300,14 +293,7 @@ public class SeasonalEventService( continue; } - if ( - currentDate.DateIsBetweenTwoDates( - events.StartMonth, - events.StartDay, - events.EndMonth, - events.EndDay - ) - ) + if (currentDate.DateIsBetweenTwoDates(events.StartMonth, events.StartDay, events.EndMonth, events.EndDay)) { _currentlyActiveEvents.Add(events); } @@ -341,9 +327,7 @@ public class SeasonalEventService( } } - logger.Warning( - serverLocalisationService.GetText("season-no_matching_season_found_for_date") - ); + logger.Warning(serverLocalisationService.GetText("season-no_matching_season_found_for_date")); return Season.SUMMER; } @@ -372,9 +356,7 @@ public class SeasonalEventService( continue; } - botInventory.Equipment[equipmentSlotKey] = equipment - .Where(i => !_christmasEventItems.Contains(i.Key)) - .ToDictionary(); + botInventory.Equipment[equipmentSlotKey] = equipment.Where(i => !_christmasEventItems.Contains(i.Key)).ToDictionary(); } var containersToCheck = new List> @@ -426,17 +408,9 @@ public class SeasonalEventService( EnableHalloweenSummonEvent(); AddPumpkinsToScavBackpacks(); RenameBitcoin(); - if ( - eventType.Settings is not null - && eventType.Settings.ReplaceBotHostility.GetValueOrDefault(false) - ) + if (eventType.Settings is not null && eventType.Settings.ReplaceBotHostility.GetValueOrDefault(false)) { - if ( - _seasonalEventConfig.HostilitySettingsForEvent.TryGetValue( - "AprilFools", - out var botData - ) - ) + if (_seasonalEventConfig.HostilitySettingsForEvent.TryGetValue("AprilFools", out var botData)) { ReplaceBotHostility(botData); } @@ -483,11 +457,7 @@ public class SeasonalEventService( if (eventType.Settings?.ReplaceBotHostility ?? false) { - ReplaceBotHostility( - _seasonalEventConfig - .HostilitySettingsForEvent.FirstOrDefault(x => x.Key == "zombies") - .Value - ); + ReplaceBotHostility(_seasonalEventConfig.HostilitySettingsForEvent.FirstOrDefault(x => x.Key == "zombies").Value); } if (eventType.Settings?.AdjustBotAppearances ?? false) @@ -505,9 +475,7 @@ public class SeasonalEventService( if (eventType.Settings?.EnableChristmasHideout ?? false) { - globalConfig.EventType = globalConfig - .EventType.Where(x => x != EventType.None) - .ToList(); + globalConfig.EventType = globalConfig.EventType.Where(x => x != EventType.None).ToList(); globalConfig.EventType.Add(EventType.Christmas); } @@ -533,9 +501,7 @@ public class SeasonalEventService( if (eventType.Settings?.EnableChristmasHideout ?? false) { - globalConfig.EventType = globalConfig - .EventType.Where(x => x != EventType.None) - .ToList(); + globalConfig.EventType = globalConfig.EventType.Where(x => x != EventType.None).ToList(); globalConfig.EventType.Add(EventType.Christmas); } @@ -563,12 +529,7 @@ public class SeasonalEventService( /// Season to apply changes for protected void AdjustBotAppearanceValues(SeasonalEventType season) { - if ( - !_seasonalEventConfig.BotAppearanceChanges.TryGetValue( - season, - out var appearanceAdjustments - ) - ) + if (!_seasonalEventConfig.BotAppearanceChanges.TryGetValue(season, out var appearanceAdjustments)) { // No changes found for this season return; @@ -596,9 +557,7 @@ public class SeasonalEventService( if (partPool is null) { - logger.Warning( - $"Unable to adjust bot: {botType} body part appearance: {bodyPart}" - ); + logger.Warning($"Unable to adjust bot: {botType} body part appearance: {bodyPart}"); continue; } @@ -612,9 +571,7 @@ public class SeasonalEventService( } } - protected void ReplaceBotHostility( - Dictionary> hostilitySettings - ) + protected void ReplaceBotHostility(Dictionary> hostilitySettings) { var locations = databaseService.GetLocations().GetDictionary(); var ignoreList = _locationConfig.NonMaps; @@ -644,10 +601,9 @@ public class SeasonalEventService( foreach (var settings in newHostilitySettings) { - var matchingBaseSettings = - locationBase.Base.BotLocationModifier.AdditionalHostilitySettings.FirstOrDefault( - x => x.BotRole == settings.BotRole - ); + var matchingBaseSettings = locationBase.Base.BotLocationModifier.AdditionalHostilitySettings.FirstOrDefault(x => + x.BotRole == settings.BotRole + ); if (matchingBaseSettings is null) { continue; @@ -745,9 +701,7 @@ public class SeasonalEventService( { var zryachiyKvP = databaseService .GetBots() - .Types.FirstOrDefault(x => - string.Equals(x.Key, "bosszryachiy", StringComparison.OrdinalIgnoreCase) - ); + .Types.FirstOrDefault(x => string.Equals(x.Key, "bosszryachiy", StringComparison.OrdinalIgnoreCase)); var value = new Dictionary(); foreach (var chance in zryachiyKvP.Value.BotChances.EquipmentChances) @@ -793,22 +747,16 @@ public class SeasonalEventService( double randomInfectionPercentage = infectionPercentage == 100 ? infectionPercentage - : Convert.ToDouble( - randomUtil.GetInt(Convert.ToInt32(infectionPercentage), 100) - ); + : Convert.ToDouble(randomUtil.GetInt(Convert.ToInt32(infectionPercentage), 100)); if (logger.IsLogEnabled(LogLevel.Debug)) - logger.Debug( - $"Percent infected from map {locationId} is {randomInfectionPercentage}" - ); + logger.Debug($"Percent infected from map {locationId} is {randomInfectionPercentage}"); // Infection rates sometimes apply to multiple maps, e.g. Factory day/night or Sandbox/sandbox_high // Get the list of maps that should have infection value applied to their base // 90% of locations are just 1 map e.g. bigmap = customs var mappedLocations = GetLocationFromInfectedLocation(locationId); foreach (var locationKey in mappedLocations) { - databaseService - .GetLocation(locationKey) - .Base.Events.Halloween2024.InfectionPercentage = randomInfectionPercentage; + databaseService.GetLocation(locationKey).Base.Events.Halloween2024.InfectionPercentage = randomInfectionPercentage; } // Globals data needs value updated too @@ -825,9 +773,7 @@ public class SeasonalEventService( databaseService.GetLocation(locationId).Base.Waves = []; } - var locationsWithActiveInfection = GetLocationsWithZombies( - zombieSettings.MapInfectionAmount - ); + var locationsWithActiveInfection = GetLocationsWithZombies(zombieSettings.MapInfectionAmount); AddEventBossesToMaps("halloweenzombies", locationsWithActiveInfection); } @@ -841,9 +787,7 @@ public class SeasonalEventService( var result = new HashSet(); // Get only the locations with an infection above 0 - var infectionKeys = locationInfections.Where(location => - locationInfections[location.Key] > 0 - ); + var infectionKeys = locationInfections.Where(location => locationInfections[location.Key] > 0); // Convert the infected location id into its generic location id foreach (var location in infectionKeys) @@ -901,12 +845,7 @@ public class SeasonalEventService( /// OPTIONAL - Maps to add bosses to protected void AddEventBossesToMaps(string eventType, HashSet? mapIdWhitelist = null) { - if ( - !_seasonalEventConfig.EventBossSpawns.TryGetValue( - eventType.ToLowerInvariant(), - out var botsToAddPerMap - ) - ) + if (!_seasonalEventConfig.EventBossSpawns.TryGetValue(eventType.ToLowerInvariant(), out var botsToAddPerMap)) { logger.Warning($"Unable to add: {eventType} bosses, eventBossSpawns is missing"); return; @@ -947,30 +886,22 @@ public class SeasonalEventService( switch (eventType) { case SeasonalEventType.Halloween: - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/5a7c2ebb86f7746e324a06ab.png" - ] = "./assets/images/traders/halloween/5a7c2ebb86f7746e324a06ab.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/5ac3b86a86f77461491d1ad8.png" - ] = "./assets/images/traders/halloween/5ac3b86a86f77461491d1ad8.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/5c06531a86f7746319710e1b.png" - ] = "./assets/images/traders/halloween/5c06531a86f7746319710e1b.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/59b91ca086f77469a81232e4.png" - ] = "./assets/images/traders/halloween/59b91ca086f77469a81232e4.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/59b91cab86f77469aa5343ca.png" - ] = "./assets/images/traders/halloween/59b91cab86f77469aa5343ca.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/59b91cb486f77469a81232e5.png" - ] = "./assets/images/traders/halloween/59b91cb486f77469a81232e5.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/59b91cbd86f77469aa5343cb.png" - ] = "./assets/images/traders/halloween/59b91cbd86f77469aa5343cb.png"; - _httpConfig.ServerImagePathOverride[ - "./assets/images/traders/579dc571d53a0658a154fbec.png" - ] = "./assets/images/traders/halloween/579dc571d53a0658a154fbec.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/5a7c2ebb86f7746e324a06ab.png"] = + "./assets/images/traders/halloween/5a7c2ebb86f7746e324a06ab.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/5ac3b86a86f77461491d1ad8.png"] = + "./assets/images/traders/halloween/5ac3b86a86f77461491d1ad8.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/5c06531a86f7746319710e1b.png"] = + "./assets/images/traders/halloween/5c06531a86f7746319710e1b.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/59b91ca086f77469a81232e4.png"] = + "./assets/images/traders/halloween/59b91ca086f77469a81232e4.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/59b91cab86f77469aa5343ca.png"] = + "./assets/images/traders/halloween/59b91cab86f77469aa5343ca.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/59b91cb486f77469a81232e5.png"] = + "./assets/images/traders/halloween/59b91cb486f77469a81232e5.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/59b91cbd86f77469aa5343cb.png"] = + "./assets/images/traders/halloween/59b91cbd86f77469aa5343cb.png"; + _httpConfig.ServerImagePathOverride["./assets/images/traders/579dc571d53a0658a154fbec.png"] = + "./assets/images/traders/halloween/579dc571d53a0658a154fbec.png"; break; case SeasonalEventType.Christmas: // TODO: find christmas trader icons @@ -1019,9 +950,7 @@ public class SeasonalEventService( var botToUpdate = databaseService.GetBots().Types[botKvP.Key.ToLowerInvariant()]; if (botToUpdate is null) { - logger.Warning( - serverLocalisationService.GetText("gameevent-bot_not_found", botKvP) - ); + logger.Warning(serverLocalisationService.GetText("gameevent-bot_not_found", botKvP)); continue; } @@ -1038,8 +967,7 @@ public class SeasonalEventService( // Grab gear to add and loop over it foreach (var itemToAddKvP in equipmentKvP.Value) { - var equipmentSlot = (EquipmentSlots) - Enum.Parse(typeof(EquipmentSlots), equipmentKvP.Key); + var equipmentSlot = (EquipmentSlots)Enum.Parse(typeof(EquipmentSlots), equipmentKvP.Key); var equipmentDict = botToUpdate.BotInventory.Equipment[equipmentSlot]; equipmentDict[itemToAddKvP.Key] = equipmentKvP.Value[itemToAddKvP.Key]; } @@ -1067,9 +995,7 @@ public class SeasonalEventService( var botToUpdate = databaseService.GetBots().Types[botKvpP.Key.ToLowerInvariant()]; if (botToUpdate is null) { - logger.Warning( - serverLocalisationService.GetText("gameevent-bot_not_found", botKvpP) - ); + logger.Warning(serverLocalisationService.GetText("gameevent-bot_not_found", botKvpP)); continue; } @@ -1093,9 +1019,8 @@ public class SeasonalEventService( ///
protected void AddPumpkinsToScavBackpacks() { - databaseService.GetBots().Types["assault"].BotInventory.Items.Backpack[ - ItemTpl.RANDOMLOOTCONTAINER_PUMPKIN_RAND_LOOT_CONTAINER - ] = 400; + databaseService.GetBots().Types["assault"].BotInventory.Items.Backpack[ItemTpl.RANDOMLOOTCONTAINER_PUMPKIN_RAND_LOOT_CONTAINER] = + 400; } protected void RenameBitcoin() @@ -1145,12 +1070,7 @@ public class SeasonalEventService( var maps = databaseService.GetLocations().GetDictionary(); foreach (var gifterMapSettings in gifterSettings) { - if ( - !maps.TryGetValue( - databaseService.GetLocations().GetMappedKey(gifterMapSettings.Map), - out var mapData - ) - ) + if (!maps.TryGetValue(databaseService.GetLocations().GetMappedKey(gifterMapSettings.Map), out var mapData)) { logger.Warning($"AddGifterBotToMaps() Map not found {gifterMapSettings.Map}"); @@ -1158,9 +1078,7 @@ public class SeasonalEventService( } // Don't add gifter to map twice - var existingGifter = mapData.Base.BossLocationSpawn.FirstOrDefault(boss => - boss.BossName == "gifter" - ); + var existingGifter = mapData.Base.BossLocationSpawn.FirstOrDefault(boss => boss.BossName == "gifter"); if (existingGifter is not null) { existingGifter.BossChance = gifterMapSettings.SpawnChance; @@ -1196,17 +1114,13 @@ public class SeasonalEventService( { if (seasonalEvent.Settings?.EnableChristmasHideout ?? false) { - globalConfig.EventType = globalConfig - .EventType.Where(x => x != EventType.None) - .ToList(); + globalConfig.EventType = globalConfig.EventType.Where(x => x != EventType.None).ToList(); globalConfig.EventType.Add(EventType.Christmas); } if (seasonalEvent.Settings?.EnableHalloweenHideout ?? false) { - globalConfig.EventType = globalConfig - .EventType.Where(x => x != EventType.None) - .ToList(); + globalConfig.EventType = globalConfig.EventType.Where(x => x != EventType.None).ToList(); globalConfig.EventType.Add(EventType.Halloween); globalConfig.EventType.Add(EventType.HalloweenIllumination); } @@ -1251,13 +1165,7 @@ public class SeasonalEventService( protected void GiveGift(MongoId playerId, string giftKey) { var giftData = giftService.GetGiftById(giftKey); - if ( - !profileHelper.PlayerHasReceivedMaxNumberOfGift( - playerId, - giftKey, - giftData.MaxToSendPlayer ?? 5 - ) - ) + if (!profileHelper.PlayerHasReceivedMaxNumberOfGift(playerId, giftKey, giftData.MaxToSendPlayer ?? 5)) { giftService.SendGiftToPlayer(playerId, giftKey); } diff --git a/Libraries/SPTarkov.Server.Core/Services/ServerLocalisationService.cs b/Libraries/SPTarkov.Server.Core/Services/ServerLocalisationService.cs index 33de0afb..87fe7969 100644 --- a/Libraries/SPTarkov.Server.Core/Services/ServerLocalisationService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/ServerLocalisationService.cs @@ -21,9 +21,7 @@ public class ServerLocalisationService( { private readonly Dictionary>> _loadedLocales = []; private string _serverLocale = localeService.GetDesiredServerLocale(); - private readonly FrozenDictionary _localeFallbacks = localeService - .GetLocaleFallbacks() - .ToFrozenDictionary(); + private readonly FrozenDictionary _localeFallbacks = localeService.GetLocaleFallbacks().ToFrozenDictionary(); private const string DefaultLocale = "en"; private const string LocaleDirectory = "./SPT_Data/database/locales/server"; @@ -36,9 +34,7 @@ public class ServerLocalisationService( return; } - var files = fileUtil - .GetFiles(LocaleDirectory, true) - .Where(f => fileUtil.GetFileExtension(f) == "json"); + var files = fileUtil.GetFiles(LocaleDirectory, true).Where(f => fileUtil.GetFileExtension(f) == "json"); if (!files.Any()) { @@ -49,17 +45,13 @@ public class ServerLocalisationService( { _loadedLocales.Add( fileUtil.StripExtension(file), - new LazyLoad>(() => - jsonUtil.DeserializeFromFile>(file) ?? [] - ) + new LazyLoad>(() => jsonUtil.DeserializeFromFile>(file) ?? []) ); } if (!_loadedLocales.ContainsKey(DefaultLocale)) { - throw new Exception( - $"The default locale '{DefaultLocale}' does not exist on the loaded locales." - ); + throw new Exception($"The default locale '{DefaultLocale}' does not exist on the loaded locales."); } _serverLocalesHydrated = true; @@ -165,10 +157,7 @@ public class ServerLocalisationService( _loadedLocales.TryGetValue(DefaultLocale, out var defaults); if (!defaults.Value.TryGetValue(key, out value)) { - value = localeService - .GetLocaleDb(DefaultLocale) - .FirstOrDefault(x => x.Key == key) - .Value; + value = localeService.GetLocaleDb(DefaultLocale).FirstOrDefault(x => x.Key == key).Value; } return value ?? key; @@ -193,10 +182,7 @@ public class ServerLocalisationService( var localizedName = $"{{{{{propertyInfo.GetJsonName()}}}}}"; if (rawLocalizedString.Contains(localizedName)) { - rawLocalizedString = rawLocalizedString.Replace( - localizedName, - propertyInfo.GetValue(args)?.ToString() ?? string.Empty - ); + rawLocalizedString = rawLocalizedString.Replace(localizedName, propertyInfo.GetValue(args)?.ToString() ?? string.Empty); } } diff --git a/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs b/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs index 4913f231..d51dd15d 100644 --- a/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/TraderPurchasePersisterService.cs @@ -27,10 +27,7 @@ public class TraderPurchasePersisterService( /// Session id /// Trader to loop up purchases for /// Dictionary of assort id and count purchased - public Dictionary? GetProfileTraderPurchases( - MongoId sessionId, - MongoId traderId - ) + public Dictionary? GetProfileTraderPurchases(MongoId sessionId, MongoId traderId) { var profile = profileHelper.GetFullProfile(sessionId); @@ -44,11 +41,7 @@ public class TraderPurchasePersisterService( /// Trader to loop up purchases for /// ID of assort to get data for /// TraderPurchaseData - public TraderPurchaseData? GetProfileTraderPurchase( - MongoId sessionId, - MongoId traderId, - string assortId - ) + public TraderPurchaseData? GetProfileTraderPurchase(MongoId sessionId, MongoId traderId, string assortId) { var profile = profileHelper.GetFullProfile(sessionId); @@ -120,9 +113,7 @@ public class TraderPurchasePersisterService( foreach (var purchaseKvP in purchasesFromTrader) { - var traderUpdateDetails = _traderConfig.UpdateTime.FirstOrDefault(x => - x.TraderId == traderId - ); + var traderUpdateDetails = _traderConfig.UpdateTime.FirstOrDefault(x => x.TraderId == traderId); if (traderUpdateDetails is null) { logger.Error( @@ -138,16 +129,11 @@ public class TraderPurchasePersisterService( var purchaseDetails = purchaseKvP.Value; var resetTimeForItem = purchaseDetails.PurchaseTimestamp - + randomUtil.GetDouble( - traderUpdateDetails.Seconds.Min, - traderUpdateDetails.Seconds.Max - ); + + randomUtil.GetDouble(traderUpdateDetails.Seconds.Min, traderUpdateDetails.Seconds.Max); if (resetTimeForItem < timeUtil.GetTimeStamp()) { // Item was purchased far enough in past a trader refresh would have occured, remove purchase record from profile - logger.Debug( - $"Removed trader: {traderId} purchase: {purchaseKvP} from profile: {profile.ProfileInfo.ProfileId}" - ); + logger.Debug($"Removed trader: {traderId} purchase: {purchaseKvP} from profile: {profile.ProfileInfo.ProfileId}"); profile.TraderPurchases[traderId].Remove(purchaseKvP.Key); } diff --git a/Libraries/SPTarkov.Server.Core/Services/TraderStore.cs b/Libraries/SPTarkov.Server.Core/Services/TraderStore.cs index 37e375a5..94d1d623 100644 --- a/Libraries/SPTarkov.Server.Core/Services/TraderStore.cs +++ b/Libraries/SPTarkov.Server.Core/Services/TraderStore.cs @@ -61,9 +61,7 @@ public class TraderStore( } } - logger.Info( - $"Importing traders complete {(customTraders == 0 ? "" : $"[{customTraders} traders loaded]")}" - ); + logger.Info($"Importing traders complete {(customTraders == 0 ? "" : $"[{customTraders} traders loaded]")}"); return Task.CompletedTask; } diff --git a/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs b/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs index 2c246639..34198239 100644 --- a/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs +++ b/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs @@ -11,11 +11,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Status { [Injectable(TypePriority = 0)] - public class StatusPage( - TimeUtil timeUtil, - ProfileActivityService profileActivityService, - ConfigServer configServer - ) : IHttpListener + public class StatusPage(TimeUtil timeUtil, ProfileActivityService profileActivityService, ConfigServer configServer) : IHttpListener { protected readonly CoreConfig _coreConfig = configServer.GetConfig(); @@ -29,13 +25,10 @@ namespace SPTarkov.Server.Core.Status var sptVersion = $"SPT version: {ProgramStatics.SPT_VERSION()}"; var debugEnabled = $"Debug enabled: {ProgramStatics.DEBUG()}"; var modsEnabled = $"Mods enabled: {ProgramStatics.MODS()}"; - var timeStarted = - $"Started : {timeUtil.GetDateTimeFromTimeStamp(_coreConfig.ServerStartTime.Value)}"; - var uptime = - $"Uptime: {DateTimeOffset.UtcNow.ToUnixTimeSeconds() - _coreConfig.ServerStartTime} seconds".ToArray(); + var timeStarted = $"Started : {timeUtil.GetDateTimeFromTimeStamp(_coreConfig.ServerStartTime.Value)}"; + var uptime = $"Uptime: {DateTimeOffset.UtcNow.ToUnixTimeSeconds() - _coreConfig.ServerStartTime} seconds".ToArray(); var activeProfiles = profileActivityService.GetActiveProfileIdsWithinMinutes(30); - var activePlayerCount = - $"Profiles active in last 30 minutes: {activeProfiles.Count}. {string.Join(",", activeProfiles)}"; + var activePlayerCount = $"Profiles active in last 30 minutes: {activeProfiles.Count}. {string.Join(",", activeProfiles)}"; resp.StatusCode = 200; resp.ContentType = "text/html"; diff --git a/Libraries/SPTarkov.Server.Core/Utils/App.cs b/Libraries/SPTarkov.Server.Core/Utils/App.cs index 619aec6d..fdb47123 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/App.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/App.cs @@ -35,14 +35,10 @@ public class App( if (_logger.IsLogEnabled(LogLevel.Debug)) { - _logger.Debug( - $"OS: {Environment.OSVersion.Version} | {Environment.OSVersion.Platform}" - ); + _logger.Debug($"OS: {Environment.OSVersion.Version} | {Environment.OSVersion.Platform}"); _logger.Debug($"Ran as admin: {Environment.IsPrivilegedProcess}"); _logger.Debug($"CPU cores: {Environment.ProcessorCount}"); - _logger.Debug( - $"PATH: {(Environment.ProcessPath ?? "null returned").Encode(EncodeType.BASE64)}" - ); + _logger.Debug($"PATH: {(Environment.ProcessPath ?? "null returned").Encode(EncodeType.BASE64)}"); _logger.Debug($"Server: {ProgramStatics.SPT_VERSION() ?? _coreConfig.SptVersion}"); // _logger.Debug($"RAM: {(os.totalmem() / 1024 / 1024 / 1024).toFixed(2)}GB"); @@ -68,18 +64,8 @@ public class App( // Discard here, as this task will run indefinitely _ = Task.Run(Update); - _logger.Success( - _serverLocalisationService.GetText( - "started_webserver_success", - _httpServer.ListeningUrl() - ) - ); - _logger.Success( - _serverLocalisationService.GetText( - "websocket-started", - _httpServer.ListeningUrl().Replace("https://", "wss://") - ) - ); + _logger.Success(_serverLocalisationService.GetText("started_webserver_success", _httpServer.ListeningUrl())); + _logger.Success(_serverLocalisationService.GetText("websocket-started", _httpServer.ListeningUrl().Replace("https://", "wss://"))); _logger.Success(GetRandomisedStartMessage()); } @@ -88,9 +74,7 @@ public class App( { if (_randomUtil.GetInt(1, 1000) > 999) { - return _serverLocalisationService.GetRandomTextThatMatchesPartialKey( - "server_start_meme_" - ); + return _serverLocalisationService.GetRandomTextThatMatchesPartialKey("server_start_meme_"); } return _serverLocalisationService.GetText("server_start_success"); @@ -114,8 +98,7 @@ public class App( var updateableName = updateable.GetType().FullName; if (string.IsNullOrEmpty(updateableName)) { - updateableName = - $"{updateable.GetType().Namespace}.{updateable.GetType().Name}"; + updateableName = $"{updateable.GetType().Namespace}.{updateable.GetType().Name}"; } var lastRunTimeTimestamp = _onUpdateLastRun.GetValueOrDefault(updateableName, 0); @@ -140,12 +123,7 @@ public class App( protected void LogUpdateException(Exception err, IOnUpdate updateable) { - _logger.Error( - _serverLocalisationService.GetText( - "scheduled_event_failed_to_run", - updateable.GetType().FullName - ) - ); + _logger.Error(_serverLocalisationService.GetText("scheduled_event_failed_to_run", updateable.GetType().FullName)); _logger.Error(err.ToString()); } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Cloners/ReflectionsCloner.cs b/Libraries/SPTarkov.Server.Core/Utils/Cloners/ReflectionsCloner.cs index 9dd439b0..dd1fb2d8 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Cloners/ReflectionsCloner.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Cloners/ReflectionsCloner.cs @@ -74,17 +74,11 @@ public class ReflectionsCloner(ISptLogger logger) : ICloner (result as IDictionary).Add(clonedKey, clonedValue); } } - else if ( - objectType.IsGenericType - && objectType.GetGenericTypeDefinition() == typeof(HashSet<>) - ) + else if (objectType.IsGenericType && objectType.GetGenericTypeDefinition() == typeof(HashSet<>)) { if (!AddMethodInfoCache.TryGetValue(objectType, out var addMethodInfo)) { - addMethodInfo = objectType.GetMethod( - "Add", - BindingFlags.Instance | BindingFlags.Public - ); + addMethodInfo = objectType.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public); while (!AddMethodInfoCache.TryAdd(objectType, addMethodInfo)) { } } @@ -121,10 +115,7 @@ public class ReflectionsCloner(ISptLogger logger) : ICloner case PropertyInfo propertyInfo: var propertyValue = propertyInfo.GetValue(obj, null); - var propertyCloned = await Clone( - propertyValue, - propertyInfo.PropertyType - ); + var propertyCloned = await Clone(propertyValue, propertyInfo.PropertyType); propertyInfo.SetValue(result, propertyCloned, null); break; @@ -140,9 +131,7 @@ public class ReflectionsCloner(ISptLogger logger) : ICloner default: if (logger.IsLogEnabled(LogLevel.Debug)) { - logger.Debug( - $"Unknown member type {member.Name} {member.MemberType}" - ); + logger.Debug($"Unknown member type {member.Name} {member.MemberType}"); } break; @@ -184,10 +173,8 @@ public class ReflectionsCloner(ISptLogger logger) : ICloner while (!_listPropertyInfoCache.TryAdd(type, list)) { } } - item.GetSetMethod(true) - .Invoke(clone, [await Clone(item.GetValue(obj), item.PropertyType)]); - list.GetSetMethod(true) - .Invoke(clone, [await Clone(list.GetValue(obj), list.PropertyType)]); + item.GetSetMethod(true).Invoke(clone, [await Clone(item.GetValue(obj), item.PropertyType)]); + list.GetSetMethod(true).Invoke(clone, [await Clone(list.GetValue(obj), list.PropertyType)]); return clone; } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Collections/ProbabilityObjectArray.cs b/Libraries/SPTarkov.Server.Core/Utils/Collections/ProbabilityObjectArray.cs index 66b17ccd..2bb7d785 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Collections/ProbabilityObjectArray.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Collections/ProbabilityObjectArray.cs @@ -24,10 +24,7 @@ public class ProbabilityObjectArray : List> { private readonly ICloner _cloner; - public ProbabilityObjectArray( - ICloner cloner, - ICollection>? items = null - ) + public ProbabilityObjectArray(ICloner cloner, ICollection>? items = null) : base(items ?? []) { _cloner = cloner; @@ -73,10 +70,7 @@ public class ProbabilityObjectArray : List> public ProbabilityObjectArray Clone() { var clone = _cloner.Clone(this); - var probabilityObjects = new ProbabilityObjectArray( - _cloner, - new List>() - ); + var probabilityObjects = new ProbabilityObjectArray(_cloner, new List>()); probabilityObjects.AddRange(clone); return probabilityObjects; @@ -149,11 +143,7 @@ public class ProbabilityObjectArray : List> /// Draw with or without replacement from the input dict (true = don't remove after drawing) /// List of keys which shall be replaced even if drawing without replacement /// Collection consisting of N random keys for this ProbabilityObjectArray - public List Draw( - int drawCount = 1, - bool removeAfterDraw = true, - List? neverRemoveWhitelist = null - ) + public List Draw(int drawCount = 1, bool removeAfterDraw = true, List? neverRemoveWhitelist = null) { neverRemoveWhitelist ??= []; if (Count == 0) diff --git a/Libraries/SPTarkov.Server.Core/Utils/DatabaseImporter.cs b/Libraries/SPTarkov.Server.Core/Utils/DatabaseImporter.cs index 30da416a..fd0e98f6 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/DatabaseImporter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/DatabaseImporter.cs @@ -88,8 +88,7 @@ public class DatabaseImporter( await using var ms = new MemoryStream(jsonBytes); - var FileHashes = - await _jsonUtil.DeserializeFromMemoryStreamAsync>(ms) ?? []; + var FileHashes = await _jsonUtil.DeserializeFromMemoryStreamAsync>(ms) ?? []; foreach (var hash in FileHashes) { @@ -98,16 +97,12 @@ public class DatabaseImporter( } else { - logger.Error( - _serverLocalisationService.GetText("validation_error_exception", checksFilePath) - ); + logger.Error(_serverLocalisationService.GetText("validation_error_exception", checksFilePath)); } } catch (Exception) { - logger.Error( - _serverLocalisationService.GetText("validation_error_exception", checksFilePath) - ); + logger.Error(_serverLocalisationService.GetText("validation_error_exception", checksFilePath)); } } @@ -122,10 +117,7 @@ public class DatabaseImporter( Stopwatch timer = new(); timer.Start(); - var dataToImport = await _importerUtil.LoadRecursiveAsync( - $"{filePath}database/", - VerifyDatabase - ); + var dataToImport = await _importerUtil.LoadRecursiveAsync($"{filePath}database/", VerifyDatabase); timer.Stop(); @@ -159,16 +151,12 @@ public class DatabaseImporter( { if (databaseHashes[relativePath] != hashString) { - logger.Warning( - _serverLocalisationService.GetText("validation_error_file", fileName) - ); + logger.Warning(_serverLocalisationService.GetText("validation_error_file", fileName)); } } else { - logger.Warning( - _serverLocalisationService.GetText("validation_error_file", fileName) - ); + logger.Warning(_serverLocalisationService.GetText("validation_error_file", fileName)); } } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs index ddbbda71..87eb541d 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs @@ -13,11 +13,7 @@ public class FileUtil if (recursive) { - files.AddRange( - Directory - .GetDirectories(path) - .SelectMany(d => GetFiles(d, recursive, searchPattern)) - ); + files.AddRange(Directory.GetDirectories(path).SelectMany(d => GetFiles(d, recursive, searchPattern))); } return files; diff --git a/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs index c26cdedd..16e4f2e8 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs @@ -34,9 +34,7 @@ public class HashUtil(RandomUtil _randomUtil) return Convert.ToHexString(sha1HashData).Replace("-", string.Empty); } - throw new NotImplementedException( - $"Provided hash algorithm: {algorithm} is not supported." - ); + throw new NotImplementedException($"Provided hash algorithm: {algorithm} is not supported."); } /// @@ -66,9 +64,7 @@ public class HashUtil(RandomUtil _randomUtil) } } - throw new NotImplementedException( - $"Provided hash algorithm: {algorithm} is not supported." - ); + throw new NotImplementedException($"Provided hash algorithm: {algorithm} is not supported."); } /// diff --git a/Libraries/SPTarkov.Server.Core/Utils/HttpFileUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/HttpFileUtil.cs index e901be96..f077886d 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/HttpFileUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/HttpFileUtil.cs @@ -11,9 +11,7 @@ public class HttpFileUtil(HttpServerHelper httpServerHelper) { var pathSlice = filePath.Split("/"); var mimePath = httpServerHelper.GetMimeText(pathSlice[^1].Split(".")[^1]); - var type = string.IsNullOrWhiteSpace(mimePath) - ? httpServerHelper.GetMimeText("txt") - : mimePath; + var type = string.IsNullOrWhiteSpace(mimePath) ? httpServerHelper.GetMimeText("txt") : mimePath; resp.Headers.Append("Content-Type", type); await resp.SendFileAsync(filePath, CancellationToken.None); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/HttpResponseUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/HttpResponseUtil.cs index 9ae8ae10..82798f25 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/HttpResponseUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/HttpResponseUtil.cs @@ -9,19 +9,9 @@ using SPTarkov.Server.Core.Services; namespace SPTarkov.Server.Core.Utils; [Injectable] -public class HttpResponseUtil( - JsonUtil jsonUtil, - ServerLocalisationService serverLocalisationService -) +public class HttpResponseUtil(JsonUtil jsonUtil, ServerLocalisationService serverLocalisationService) { - protected readonly ImmutableList _cleanupRegexList = - [ - new("[\\b]"), - new("[\\f]"), - new("[\\n]"), - new("[\\r]"), - new("[\\t]"), - ]; + protected readonly ImmutableList _cleanupRegexList = [new("[\\b]"), new("[\\f]"), new("[\\n]"), new("[\\r]"), new("[\\t]")]; protected string ClearString(string? s) { @@ -54,23 +44,12 @@ public class HttpResponseUtil( /// /// /// response as string - public string GetBody( - T data, - BackendErrorCodes err = BackendErrorCodes.None, - string? errmsg = null, - bool sanitize = true - ) + public string GetBody(T data, BackendErrorCodes err = BackendErrorCodes.None, string? errmsg = null, bool sanitize = true) { - return sanitize - ? ClearString(GetUnclearedBody(data, err, errmsg)) - : GetUnclearedBody(data, err, errmsg); + return sanitize ? ClearString(GetUnclearedBody(data, err, errmsg)) : GetUnclearedBody(data, err, errmsg); } - public string GetUnclearedBody( - T? data, - BackendErrorCodes err = BackendErrorCodes.None, - string? errmsg = null - ) + public string GetUnclearedBody(T? data, BackendErrorCodes err = BackendErrorCodes.None, string? errmsg = null) { return jsonUtil.Serialize( new GetBodyResponseData diff --git a/Libraries/SPTarkov.Server.Core/Utils/ImporterUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/ImporterUtil.cs index e9afca5c..a7381ff8 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/ImporterUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/ImporterUtil.cs @@ -12,16 +12,8 @@ namespace SPTarkov.Server.Core.Utils; [Injectable(InjectionType.Singleton)] public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, JsonUtil _jsonUtil) { - private readonly FrozenSet _directoriesToIgnore = - [ - "./SPT_Data/database/locales/server", - ]; - private readonly FrozenSet _filesToIgnore = - [ - "bearsuits.json", - "usecsuits.json", - "archivedquests.json", - ]; + private readonly FrozenSet _directoriesToIgnore = ["./SPT_Data/database/locales/server"]; + private readonly FrozenSet _filesToIgnore = ["bearsuits.json", "usecsuits.json", "archivedquests.json"]; public async Task LoadRecursiveAsync( string filePath, @@ -29,12 +21,7 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, Func? onObjectDeserialized = null ) { - var result = await LoadRecursiveAsync( - filePath, - typeof(T), - onReadCallback, - onObjectDeserialized - ); + var result = await LoadRecursiveAsync(filePath, typeof(T), onReadCallback, onObjectDeserialized); return (T)result; } @@ -67,24 +54,13 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, { if ( _fileUtil.GetFileExtension(file) != "json" - || _filesToIgnore.Contains( - _fileUtil.GetFileNameAndExtension(file).ToLowerInvariant() - ) + || _filesToIgnore.Contains(_fileUtil.GetFileNameAndExtension(file).ToLowerInvariant()) ) { continue; } - tasks.Add( - ProcessFileAsync( - file, - loadedType, - onReadCallback, - onObjectDeserialized, - result, - dictionaryLock - ) - ); + tasks.Add(ProcessFileAsync(file, loadedType, onReadCallback, onObjectDeserialized, result, dictionaryLock)); } // Process directories @@ -95,16 +71,7 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, continue; } - tasks.Add( - ProcessDirectoryAsync( - directory, - loadedType, - result, - onReadCallback, - onObjectDeserialized, - dictionaryLock - ) - ); + tasks.Add(ProcessDirectoryAsync(directory, loadedType, result, onReadCallback, onObjectDeserialized, dictionaryLock)); } // Wait for all tasks to finish @@ -146,12 +113,7 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, lock (dictionaryLock) { - setMethod.Invoke( - result, - isDictionary - ? [_fileUtil.StripExtension(file), fileDeserialized] - : [fileDeserialized] - ); + setMethod.Invoke(result, isDictionary ? [_fileUtil.StripExtension(file), fileDeserialized] : [fileDeserialized]); } } catch (Exception ex) @@ -181,12 +143,7 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, GetSetMethod(parentName, loadedType, out var matchedProperty, out _); - var loadedData = await LoadRecursiveAsync( - $"{directory}/", - matchedProperty, - onReadCallback, - onObjectDeserialized - ); + var loadedData = await LoadRecursiveAsync($"{directory}/", matchedProperty, onReadCallback, onObjectDeserialized); lock (dictionaryLock) { @@ -199,19 +156,9 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, } else { - var setMethod = GetSetMethod( - directoryName, - loadedType, - out var matchedProperty, - out var isDictionary - ); + var setMethod = GetSetMethod(directoryName, loadedType, out var matchedProperty, out var isDictionary); - var loadedData = await LoadRecursiveAsync( - $"{directory}/", - matchedProperty, - onReadCallback, - onObjectDeserialized - ); + var loadedData = await LoadRecursiveAsync($"{directory}/", matchedProperty, onReadCallback, onObjectDeserialized); lock (dictionaryLock) { @@ -227,10 +174,7 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, private async Task DeserializeFileAsync(string file, Type propertyType) { - if ( - propertyType.IsGenericType - && propertyType.GetGenericTypeDefinition() == typeof(LazyLoad<>) - ) + if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(LazyLoad<>)) { return CreateLazyLoadDeserialization(file, propertyType); } @@ -252,22 +196,14 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, var typeAsExpression = Expression.TypeAs(deserializeCall, genericArgument); - var expression = Expression.Lambda( - typeof(Func<>).MakeGenericType(genericArgument), - typeAsExpression - ); + var expression = Expression.Lambda(typeof(Func<>).MakeGenericType(genericArgument), typeAsExpression); var expressionDelegate = expression.Compile(); return Activator.CreateInstance(propertyType, expressionDelegate); } - public MethodInfo GetSetMethod( - string propertyName, - Type type, - out Type propertyType, - out bool isDictionary - ) + public MethodInfo GetSetMethod(string propertyName, Type type, out Type propertyType, out bool isDictionary) { MethodInfo setMethod; isDictionary = false; @@ -291,9 +227,7 @@ public class ImporterUtil(ISptLogger _logger, FileUtil _fileUtil, if (matchedProperty == null) { - throw new Exception( - $"Unable to find property '{_fileUtil.StripExtension(propertyName)}' for type '{type.Name}'" - ); + throw new Exception($"Unable to find property '{_fileUtil.StripExtension(propertyName)}' for type '{type.Name}'"); } propertyType = matchedProperty.PropertyType; diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ArrayToObjectFactoryConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ArrayToObjectFactoryConverter.cs index fb3b50e4..cfe2c401 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ArrayToObjectFactoryConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ArrayToObjectFactoryConverter.cs @@ -10,14 +10,9 @@ public class ArrayToObjectFactoryConverter : JsonConverterFactory return typeToConvert.IsClass; } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - return Activator.CreateInstance( - typeof(ArrayToObjectConverter<>).MakeGenericType(typeToConvert) - ) as JsonConverter; + return Activator.CreateInstance(typeof(ArrayToObjectConverter<>).MakeGenericType(typeToConvert)) as JsonConverter; } private class ArrayToObjectConverter : JsonConverter @@ -27,11 +22,7 @@ public class ArrayToObjectFactoryConverter : JsonConverterFactory get { return true; } } - public override T? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { switch (reader.TokenType) { diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs index 01978c60..f96f6e59 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs @@ -18,16 +18,9 @@ namespace SPTarkov.Server.Core.Utils.Json.Converters; public class BaseInteractionRequestDataConverter : JsonConverter { - private static readonly Dictionary< - string, - Func - > _modHandlers = []; + private static readonly Dictionary> _modHandlers = []; - public override BaseInteractionRequestData? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override BaseInteractionRequestData? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { using var jsonDocument = JsonDocument.ParseValue(ref reader); @@ -71,10 +64,7 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText, options); case HideoutEventActions.HIDEOUT_UPGRADE_COMPLETE: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_PUT_ITEMS_IN_AREA_SLOTS: return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_TAKE_ITEMS_FROM_AREA_SLOTS: @@ -82,50 +72,26 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText, options); case HideoutEventActions.HIDEOUT_SINGLE_PRODUCTION_START: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_SCAV_CASE_PRODUCTION_START: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_CONTINUOUS_PRODUCTION_START: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_TAKE_PRODUCTION: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_RECORD_SHOOTING_RANGE_POINTS: return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_IMPROVE_AREA: case HideoutEventActions.HIDEOUT_CANCEL_PRODUCTION_COMMAND: return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_CIRCLE_OF_CULTIST_PRODUCTION_START: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_DELETE_PRODUCTION_COMMAND: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_CUSTOMIZATION_APPLY_COMMAND: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case HideoutEventActions.HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.INSURE: return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.ADD_TO_WISHLIST: @@ -133,24 +99,15 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText, options); case ItemEventActions.CHANGE_WISHLIST_ITEM_CATEGORY: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.TRADING_CONFIRM: { switch (jsonDocumentRoot.GetProperty("type").GetString()) { case ItemEventActions.BUY_FROM_TRADER: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.SELL_TO_TRADER: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); default: throw new Exception( $"Unhandled action type: {action}, make sure BaseInteractionRequestDataConverter has deserialization for this action." @@ -158,15 +115,9 @@ public class BaseInteractionRequestDataConverter : JsonConverter( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.SELL_ALL_FROM_SAVAGE: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.REPAIR: return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.TRADER_REPAIR: @@ -213,32 +164,17 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText, options); case ItemEventActions.READ_ENCYCLOPEDIA: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.APPLY_INVENTORY_CHANGES: return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.CREATE_MAP_MARKER: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.DELETE_MAP_MARKER: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.EDIT_MAP_MARKER: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.OPEN_RANDOM_LOOT_CONTAINER: - return JsonSerializer.Deserialize( - jsonText, - options - ); + return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.HIDEOUT_QTE_EVENT: return JsonSerializer.Deserialize(jsonText, options); case ItemEventActions.REDEEM_PROFILE_REWARD: @@ -260,24 +196,15 @@ public class BaseInteractionRequestDataConverter : JsonConverter handler - ) + public static void RegisterModDataHandler(string action, Func handler) { if (!_modHandlers.TryAdd(action, handler)) { - throw new Exception( - $"Unable to register action {action} to BaseInteractionRequestDataConverter as it already exists." - ); + throw new Exception($"Unable to register action {action} to BaseInteractionRequestDataConverter as it already exists."); } } - public override void Write( - Utf8JsonWriter writer, - BaseInteractionRequestData value, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, BaseInteractionRequestData value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value, options); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseSptLoggerReferenceConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseSptLoggerReferenceConverter.cs index a238d056..857b3ad7 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseSptLoggerReferenceConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseSptLoggerReferenceConverter.cs @@ -6,11 +6,7 @@ namespace SPTarkov.Server.Core.Utils.Json.Converters; public class BaseSptLoggerReferenceConverter : JsonConverter { - public override BaseSptLoggerReference? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override BaseSptLoggerReference? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { using (var jsonDocument = JsonDocument.ParseValue(ref reader)) { @@ -26,16 +22,10 @@ public class BaseSptLoggerReferenceConverter : JsonConverter(options); default: - throw new Exception( - $"The logger type '{typeElement.GetString()}' does not exist." - ); + throw new Exception($"The logger type '{typeElement.GetString()}' does not exist."); } } } - public override void Write( - Utf8JsonWriter writer, - BaseSptLoggerReference value, - JsonSerializerOptions options - ) { } + public override void Write(Utf8JsonWriter writer, BaseSptLoggerReference value, JsonSerializerOptions options) { } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOfListOrTConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOfListOrTConverter.cs index 81194aa4..3893ce43 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOfListOrTConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOfListOrTConverter.cs @@ -10,14 +10,10 @@ public class DictionaryOfListOrTConverter : JsonConverterFactory return typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(Dictionary<,>) && typeToConvert.GenericTypeArguments[1].IsGenericType - && typeToConvert.GenericTypeArguments[1].GetGenericTypeDefinition() - == typeof(ListOrT<>); + && typeToConvert.GenericTypeArguments[1].GetGenericTypeDefinition() == typeof(ListOrT<>); } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { return Activator.CreateInstance( typeof(DictionaryOfListOrTConverter<,>).MakeGenericType( @@ -30,11 +26,7 @@ public class DictionaryOfListOrTConverter : JsonConverterFactory public class DictionaryOfListOrTConverter : JsonConverter>?> { - public override Dictionary>? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override Dictionary>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.StartArray) { @@ -49,11 +41,7 @@ public class DictionaryOfListOrTConverter : JsonConverter> value, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, Dictionary> value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value, options); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOrListConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOrListConverter.cs index e479f597..c8922a68 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOrListConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DictionaryOrListConverter.cs @@ -7,14 +7,10 @@ public class DictionaryOrListConverter : JsonConverterFactory { public override bool CanConvert(Type typeToConvert) { - return typeToConvert.IsGenericType - && typeToConvert.GetGenericTypeDefinition() == typeof(DictionaryOrList<,>); + return typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(DictionaryOrList<,>); } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { return Activator.CreateInstance( typeof(DictionaryOrListConverter<,>).MakeGenericType( @@ -27,11 +23,7 @@ public class DictionaryOrListConverter : JsonConverterFactory public class DictionaryOrListConverter : JsonConverter?> { - public override DictionaryOrList? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override DictionaryOrList? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { switch (reader.TokenType) { @@ -46,24 +38,15 @@ public class DictionaryOrListConverter : JsonConverter>( - jsonText, - options - ); + var dictionary = JsonSerializer.Deserialize>(jsonText, options); return new DictionaryOrList(dictionary, null); } default: - throw new Exception( - $"Unable to translate object type {reader.TokenType} to ListOrT." - ); + throw new Exception($"Unable to translate object type {reader.TokenType} to ListOrT."); } } - public override void Write( - Utf8JsonWriter writer, - DictionaryOrList value, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, DictionaryOrList value, JsonSerializerOptions options) { if (value.IsList) { diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs index 4944a946..b7b2b4ae 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs @@ -6,11 +6,7 @@ namespace SPTarkov.Server.Core.Utils.Json.Converters; public class DogtagSideConverter : JsonConverter { - public override DogtagSide Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override DogtagSide Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Number) { @@ -21,11 +17,7 @@ public class DogtagSideConverter : JsonConverter return value != null ? Enum.Parse(value) : DogtagSide.NotApplicable; } - public override void Write( - Utf8JsonWriter writer, - DogtagSide value, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, DogtagSide value, JsonSerializerOptions options) { switch (value) { diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftEnumConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftEnumConverter.cs index d73bb7e9..4bcdab13 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftEnumConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftEnumConverter.cs @@ -11,28 +11,17 @@ public class EftEnumConverterFactory : JsonConverterFactory return typeToConvert.IsEnum; } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - return Activator.CreateInstance(typeof(EftEnumConverter<>).MakeGenericType(typeToConvert)) - as JsonConverter; + return Activator.CreateInstance(typeof(EftEnumConverter<>).MakeGenericType(typeToConvert)) as JsonConverter; } } public class EftEnumConverter : JsonConverter { - public override T? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - if ( - reader.TokenType == JsonTokenType.String - || reader.TokenType == JsonTokenType.PropertyName - ) + if (reader.TokenType == JsonTokenType.String || reader.TokenType == JsonTokenType.PropertyName) { var str = reader.GetString(); return (T)Enum.Parse(typeof(T), str, true); @@ -70,20 +59,12 @@ public class EftEnumConverter : JsonConverter } } - public override T ReadAsPropertyName( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override T ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return Read(ref reader, typeToConvert, options); } - public override void WriteAsPropertyName( - Utf8JsonWriter writer, - [DisallowNull] T value, - JsonSerializerOptions options - ) + public override void WriteAsPropertyName(Utf8JsonWriter writer, [DisallowNull] T value, JsonSerializerOptions options) { object propertyValue = null; if (typeof(T).GetFields().Any(f => f.FieldType == typeof(string))) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftListEnumConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftListEnumConverter.cs index 4afd7829..bf9a694e 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftListEnumConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EftListEnumConverter.cs @@ -12,16 +12,10 @@ public class EftListEnumConverterFactory : JsonConverterFactory && typeToConvert.GenericTypeArguments[0].IsEnum; } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - return Activator.CreateInstance( - typeof(EftListEnumConverter<>).MakeGenericType( - typeToConvert.GenericTypeArguments[0] - ) - ) as JsonConverter; + return Activator.CreateInstance(typeof(EftListEnumConverter<>).MakeGenericType(typeToConvert.GenericTypeArguments[0])) + as JsonConverter; } } @@ -34,11 +28,7 @@ public class EftListEnumConverter : JsonConverter> Converters = { new JsonStringEnumConverter(), new EftEnumConverterFactory() }, }; - public override List? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions _ - ) + public override List? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions _) { if (reader.TokenType == JsonTokenType.StartArray) { diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EnumerableConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EnumerableConverter.cs index d8fe04dc..790c0d89 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EnumerableConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/EnumerableConverter.cs @@ -7,53 +7,36 @@ public class EnumerableConverterFactory : JsonConverterFactory { public override bool CanConvert(Type typeToConvert) { - return typeToConvert.IsGenericType - && typeToConvert.GetGenericTypeDefinition() == typeof(IEnumerable<>); + return typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(IEnumerable<>); } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - return Activator.CreateInstance( - typeof(EnumerableConverter<>).MakeGenericType(typeToConvert.GenericTypeArguments[0]) - ) as JsonConverter; + return Activator.CreateInstance(typeof(EnumerableConverter<>).MakeGenericType(typeToConvert.GenericTypeArguments[0])) + as JsonConverter; } } public class EnumerableConverter : JsonConverter?> { - public override IEnumerable? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override IEnumerable? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { switch (reader.TokenType) { case JsonTokenType.String: case JsonTokenType.Number: case JsonTokenType.StartObject: - throw new Exception( - $"Error attempting to deserialize object, its not a valid array. Type {reader.TokenType}" - ); + throw new Exception($"Error attempting to deserialize object, its not a valid array. Type {reader.TokenType}"); case JsonTokenType.StartArray: var list = JsonSerializer.Deserialize>(ref reader, options); return list; default: - throw new Exception( - $"Unable to translate object type {reader.TokenType} to ListOrT." - ); + throw new Exception($"Unable to translate object type {reader.TokenType} to ListOrT."); } } - public override void Write( - Utf8JsonWriter writer, - IEnumerable? value, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, IEnumerable? value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value?.ToList(), options); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ListOrTConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ListOrTConverter.cs index eb7474bd..3c6e66ee 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ListOrTConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/ListOrTConverter.cs @@ -7,28 +7,18 @@ public class ListOrTConverterFactory : JsonConverterFactory { public override bool CanConvert(Type typeToConvert) { - return typeToConvert.IsGenericType - && typeToConvert.GetGenericTypeDefinition() == typeof(ListOrT<>); + return typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(ListOrT<>); } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - return Activator.CreateInstance( - typeof(ListOrTConverter<>).MakeGenericType(typeToConvert.GenericTypeArguments[0]) - ) as JsonConverter; + return Activator.CreateInstance(typeof(ListOrTConverter<>).MakeGenericType(typeToConvert.GenericTypeArguments[0])) as JsonConverter; } } public class ListOrTConverter : JsonConverter?> { - public override ListOrT? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override ListOrT? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { switch (reader.TokenType) { @@ -45,17 +35,11 @@ public class ListOrTConverter : JsonConverter?> var obj = JsonSerializer.Deserialize(ref reader, options); return new ListOrT(null, obj); default: - throw new Exception( - $"Unable to translate object type {reader.TokenType} to ListOrT." - ); + throw new Exception($"Unable to translate object type {reader.TokenType} to ListOrT."); } } - public override void Write( - Utf8JsonWriter writer, - ListOrT value, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, ListOrT value, JsonSerializerOptions options) { if (value.IsItem) { diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToMongoIdConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToMongoIdConverter.cs index f3012e60..b1a67475 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToMongoIdConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToMongoIdConverter.cs @@ -6,11 +6,7 @@ namespace SPTarkov.Server.Core.Utils.Json.Converters; public class StringToMongoIdConverter : JsonConverter { - public override MongoId Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override MongoId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { @@ -20,31 +16,19 @@ public class StringToMongoIdConverter : JsonConverter throw new JsonException(); } - public override void Write( - Utf8JsonWriter writer, - MongoId mongoId, - JsonSerializerOptions options - ) + public override void Write(Utf8JsonWriter writer, MongoId mongoId, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, mongoId.ToString(), options); } // Deserialize MongoId as a dictionary key - public override MongoId ReadAsPropertyName( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override MongoId ReadAsPropertyName(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return new MongoId(reader.GetString()); } // Serialize MongoId as a dictionary key - public override void WriteAsPropertyName( - Utf8JsonWriter writer, - MongoId value, - JsonSerializerOptions options - ) + public override void WriteAsPropertyName(Utf8JsonWriter writer, MongoId value, JsonSerializerOptions options) { writer.WritePropertyName(value.ToString()); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToNumberFactoryConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToNumberFactoryConverter.cs index 2f781516..41e4326d 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToNumberFactoryConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/StringToNumberFactoryConverter.cs @@ -21,14 +21,9 @@ public class StringToNumberFactoryConverter : JsonConverterFactory || type == typeof(decimal); } - public override JsonConverter? CreateConverter( - Type typeToConvert, - JsonSerializerOptions options - ) + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) { - return Activator.CreateInstance( - typeof(StringToNumberConverter<>).MakeGenericType(typeToConvert) - ) as JsonConverter; + return Activator.CreateInstance(typeof(StringToNumberConverter<>).MakeGenericType(typeToConvert)) as JsonConverter; } private class StringToNumberConverter : JsonConverter @@ -41,18 +36,11 @@ public class StringToNumberFactoryConverter : JsonConverterFactory if (_stringParseMethod == null) { var underlyingType = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T); - _stringParseMethod = underlyingType.GetMethod( - "Parse", - [typeof(string), typeof(IFormatProvider)] - ); + _stringParseMethod = underlyingType.GetMethod("Parse", [typeof(string), typeof(IFormatProvider)]); } } - public override T? Read( - ref Utf8JsonReader reader, - Type typeToConvert, - JsonSerializerOptions options - ) + public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { @@ -69,15 +57,12 @@ public class StringToNumberFactoryConverter : JsonConverterFactory if (_stringParseMethod != null) { - return (T) - _stringParseMethod.Invoke(null, [value, CultureInfo.InvariantCulture]); + return (T)_stringParseMethod.Invoke(null, [value, CultureInfo.InvariantCulture]); } } catch (Exception) { - Debug.WriteLine( - $"Failed to parse '{value}' into {typeToConvert.Name}, returning null." - ); + Debug.WriteLine($"Failed to parse '{value}' into {typeToConvert.Name}, returning null."); return default; } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/LazyLoad.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/LazyLoad.cs index d61db2d6..21038e82 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/LazyLoad.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/LazyLoad.cs @@ -60,10 +60,7 @@ public class LazyLoad(Func deserialize) { _result = default; _isLoaded = false; - autoCleanerTimeout?.Change( - Timeout.InfiniteTimeSpan, - Timeout.InfiniteTimeSpan - ); + autoCleanerTimeout?.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); autoCleanerTimeout = null; }, null, diff --git a/Libraries/SPTarkov.Server.Core/Utils/JsonUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/JsonUtil.cs index 8dc1fb3f..5bd09807 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/JsonUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/JsonUtil.cs @@ -30,10 +30,7 @@ public class JsonUtil } } - JsonSerializerOptionsIndented = new JsonSerializerOptions(JsonSerializerOptionsNoIndent) - { - WriteIndented = true, - }; + JsonSerializerOptionsIndented = new JsonSerializerOptions(JsonSerializerOptionsNoIndent) { WriteIndented = true }; } /// @@ -44,9 +41,7 @@ public class JsonUtil /// Deserialized object or null public T? Deserialize(string? json) { - return string.IsNullOrEmpty(json) - ? default - : JsonSerializer.Deserialize(json, JsonSerializerOptionsNoIndent); + return string.IsNullOrEmpty(json) ? default : JsonSerializer.Deserialize(json, JsonSerializerOptionsNoIndent); } /// @@ -57,9 +52,7 @@ public class JsonUtil /// public object? Deserialize(string? json, Type type) { - return string.IsNullOrEmpty(json) - ? null - : JsonSerializer.Deserialize(json, type, JsonSerializerOptionsNoIndent); + return string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, type, JsonSerializerOptionsNoIndent); } /// @@ -92,14 +85,7 @@ public class JsonUtil return default; } - await using FileStream fs = new( - file, - FileMode.Open, - FileAccess.Read, - FileShare.Read, - bufferSize: 4096, - useAsync: true - ); + await using FileStream fs = new(file, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true); return await JsonSerializer.DeserializeAsync(fs, JsonSerializerOptionsNoIndent); } @@ -136,14 +122,7 @@ public class JsonUtil return default; } - await using FileStream fs = new( - file, - FileMode.Open, - FileAccess.Read, - FileShare.Read, - bufferSize: 4096, - useAsync: true - ); + await using FileStream fs = new(file, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true); return await JsonSerializer.DeserializeAsync(fs, type, JsonSerializerOptionsNoIndent); } @@ -189,12 +168,7 @@ public class JsonUtil /// Serialised object as JSON, or null public string? Serialize(T? obj, bool indented = false) { - return obj == null - ? null - : JsonSerializer.Serialize( - obj, - indented ? JsonSerializerOptionsIndented : JsonSerializerOptionsNoIndent - ); + return obj == null ? null : JsonSerializer.Serialize(obj, indented ? JsonSerializerOptionsIndented : JsonSerializerOptionsNoIndent); } /// @@ -208,10 +182,6 @@ public class JsonUtil { return obj == null ? null - : JsonSerializer.Serialize( - obj, - type, - indented ? JsonSerializerOptionsIndented : JsonSerializerOptionsNoIndent - ); + : JsonSerializer.Serialize(obj, type, indented ? JsonSerializerOptionsIndented : JsonSerializerOptionsNoIndent); } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/BaseLogHandler.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/BaseLogHandler.cs index 5b1babf5..2857ad98 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/BaseLogHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/BaseLogHandler.cs @@ -6,11 +6,7 @@ public abstract class BaseLogHandler : ILogHandler public abstract void Log(SptLogMessage message, BaseSptLoggerReference reference); - protected string FormatMessage( - string processedMessage, - SptLogMessage message, - BaseSptLoggerReference reference - ) + protected string FormatMessage(string processedMessage, SptLogMessage message, BaseSptLoggerReference reference) { var formattedMessage = reference .Format.Replace("%date%", message.LogTime.ToString("yyyy-MM-dd")) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/ConsoleLogHandler.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/ConsoleLogHandler.cs index 90786613..1fc163e0 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/ConsoleLogHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/ConsoleLogHandler.cs @@ -13,20 +13,10 @@ public class ConsoleLogHandler : BaseLogHandler public override void Log(SptLogMessage message, BaseSptLoggerReference reference) { - Console.WriteLine( - FormatMessage( - GetColorizedText(message.Message, message.TextColor, message.BackgroundColor), - message, - reference - ) - ); + Console.WriteLine(FormatMessage(GetColorizedText(message.Message, message.TextColor, message.BackgroundColor), message, reference)); } - private string GetColorizedText( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null - ) + private string GetColorizedText(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null) { var colorString = string.Empty; if (textColor != null) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/FileLogHandler.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/FileLogHandler.cs index 0d3716ac..062d5a00 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/FileLogHandler.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/Handlers/FileLogHandler.cs @@ -20,10 +20,7 @@ public class FileLogHandler(IEnumerable replacers) : BaseL private readonly Dictionary> _cachedWipedPatterns = new(); - private readonly Dictionary _replacers = replacers.ToDictionary( - kv => kv.Pattern, - kv => kv - ); + private readonly Dictionary _replacers = replacers.ToDictionary(kv => kv.Pattern, kv => kv); private readonly ConcurrentDictionary _fileLocks = new(); private readonly ConcurrentDictionary _fileInfos = new(); @@ -58,10 +55,7 @@ public class FileLogHandler(IEnumerable replacers) : BaseL } // The AppendAllText will create the file as long as the directory exists - System.IO.File.AppendAllText( - targetFile, - FormatMessage(message.Message + "\n", message, reference) - ); + System.IO.File.AppendAllText(targetFile, FormatMessage(message.Message + "\n", message, reference)); if (!_fileInfos.TryGetValue(targetFile, out _)) { @@ -176,8 +170,7 @@ public class FileLogHandler(IEnumerable replacers) : BaseL for (var i = fileConfig.MaxRollingFiles - 1; i > 0; i--) { var oldReference = i - 1; - var oldFile = - oldReference == 0 ? fileInfo.FullName : $"{unpatternedFileName}.{i - 1}"; + var oldFile = oldReference == 0 ? fileInfo.FullName : $"{unpatternedFileName}.{i - 1}"; var newFile = $"{unpatternedFileName}.{i}"; if (System.IO.File.Exists(oldFile)) { diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs index 5714b94f..2dc635eb 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLogger.cs @@ -25,17 +25,11 @@ public class SptLogger : ISptLogger, IDisposable _category = typeof(T).FullName; _loggerQueueManager = loggerQueueManager; - LoadConfig( - fileUtil, - jsonUtil, - ProgramStatics.DEBUG() ? ConfigurationPathDev : ConfigurationPath - ); + LoadConfig(fileUtil, jsonUtil, ProgramStatics.DEBUG() ? ConfigurationPathDev : ConfigurationPath); if (_config == null) { - throw new Exception( - "The configuration path was loaded but it contained invalid or incorrect configuration." - ); + throw new Exception("The configuration path was loaded but it contained invalid or incorrect configuration."); } _loggerQueueManager.Initialize(_config); @@ -45,9 +39,7 @@ public class SptLogger : ISptLogger, IDisposable { if (fileUtil.FileExists(sptloggerDevelopmentJson)) { - _config = jsonUtil.DeserializeFromFile( - sptloggerDevelopmentJson - ); + _config = jsonUtil.DeserializeFromFile(sptloggerDevelopmentJson); } else { @@ -60,12 +52,7 @@ public class SptLogger : ISptLogger, IDisposable _category = category; } - public void LogWithColor( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ) + public void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null) { _loggerQueueManager.EnqueueMessage( new SptLogMessage( diff --git a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs index 7e111abd..6b1ff94b 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Logger/SptLoggerQueueManager.cs @@ -5,8 +5,7 @@ namespace SPTarkov.Server.Core.Utils.Logger; [Injectable(InjectionType.Singleton)] public class SptLoggerQueueManager(IEnumerable logHandlers) { - private readonly Dictionary> _resolvedMessageLoggerTypes = - new(); + private readonly Dictionary> _resolvedMessageLoggerTypes = new(); private readonly Lock _resolvedMessageLoggerTypesLock = new(); private Thread? _loggerTask; private readonly Lock LoggerTaskLock = new(); @@ -73,12 +72,8 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) messageLoggers = _config .Loggers.Where(logger => { - var excludeFilters = logger.Filters?.Where(filter => - filter.Type == SptLoggerFilterType.Exclude - ); - var includeFilters = logger.Filters?.Where(filter => - filter.Type == SptLoggerFilterType.Include - ); + var excludeFilters = logger.Filters?.Where(filter => filter.Type == SptLoggerFilterType.Exclude); + var includeFilters = logger.Filters?.Where(filter => filter.Type == SptLoggerFilterType.Include); var passed = true; if (excludeFilters?.Any() ?? false) { @@ -101,10 +96,7 @@ public class SptLoggerQueueManager(IEnumerable logHandlers) { messageLoggers.ForEach(logger => { - if ( - logger.LogLevel.CanLog(message.LogLevel) - && (_logHandlers?.TryGetValue(logger.Type, out var handler) ?? false) - ) + if (logger.LogLevel.CanLog(message.LogLevel) && (_logHandlers?.TryGetValue(logger.Type, out var handler) ?? false)) { handler.Log(message, logger); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/RagfairOfferHolder.cs b/Libraries/SPTarkov.Server.Core/Utils/RagfairOfferHolder.cs index 23dbb7ce..c969a980 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/RagfairOfferHolder.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/RagfairOfferHolder.cs @@ -93,9 +93,7 @@ public class RagfairOfferHolder( return []; } - return offerIds - .Select(offerId => _offersById.GetValueOrDefault(offerId)) - .Where(offer => offer != null); + return offerIds.Select(offerId => _offersById.GetValueOrDefault(offerId)).Where(offer => offer != null); } /// @@ -147,8 +145,7 @@ public class RagfairOfferHolder( !itemTpl.IsEmpty() // Has tpl && !(sellerIsTrader || offer.IsPlayerOffer()) && _offersByTemplate.TryGetValue(itemTpl, out var offers) - && offers?.Count - >= _ragfairServerHelper.GetOfferCountByBaseType(itemSoldTemplate.Value.Parent) + && offers?.Count >= _ragfairServerHelper.GetOfferCountByBaseType(itemSoldTemplate.Value.Parent) ) { // If it is an NPC PMC offer AND we have already reached the maximum amount of possible offers @@ -179,12 +176,7 @@ public class RagfairOfferHolder( { if (!_offersById.TryGetValue(offerId, out var offer)) { - _logger.Warning( - _serverLocalisationService.GetText( - "ragfair-unable_to_remove_offer_doesnt_exist", - offerId - ) - ); + _logger.Warning(_serverLocalisationService.GetText("ragfair-unable_to_remove_offer_doesnt_exist", offerId)); return; } @@ -374,10 +366,7 @@ public class RagfairOfferHolder( { foreach (var offer in GetOffers()) { - if ( - _expiredOfferIds.Contains(offer.Id) - || _ragfairServerHelper.IsTrader(offer.User.Id) - ) + if (_expiredOfferIds.Contains(offer.Id) || _ragfairServerHelper.IsTrader(offer.User.Id)) { // Already flagged or trader offer (handled separately), skip continue; @@ -387,9 +376,7 @@ public class RagfairOfferHolder( { if (!_expiredOfferIds.Add(offer.Id)) { - _logger.Warning( - $"Unable to add offer: {offer.Id} to expired offers as it already exists" - ); + _logger.Warning($"Unable to add offer: {offer.Id} to expired offers as it already exists"); } } } diff --git a/Libraries/SPTarkov.Server.Core/Utils/RandomUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/RandomUtil.cs index 2ac16cec..fe206fb5 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/RandomUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/RandomUtil.cs @@ -17,8 +17,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) /// public const int MaxSignificantDigits = 15; - private static readonly int DecimalPointRandomPrecisionMultiplier = (int) - Math.Pow(10, DecimalPointRandomPrecision); + private static readonly int DecimalPointRandomPrecisionMultiplier = (int)Math.Pow(10, DecimalPointRandomPrecision); public readonly Random Random = new(); /// @@ -50,10 +49,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) var realMin = (long)(min * DecimalPointRandomPrecisionMultiplier); var realMax = (long)(max * DecimalPointRandomPrecisionMultiplier); - return Math.Round( - Random.NextInt64(realMin, realMax) / (double)DecimalPointRandomPrecisionMultiplier, - DecimalPointRandomPrecision - ); + return Math.Round(Random.NextInt64(realMin, realMax) / (double)DecimalPointRandomPrecisionMultiplier, DecimalPointRandomPrecision); } /// @@ -171,11 +167,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) /// If the generated number is less than 0, it will recursively attempt to generate a valid number up to 100 times. /// If it fails to generate a valid number after 100 attempts, it will return a random float between 0.01 and twice the mean. /// - public virtual double GetNormallyDistributedRandomNumber( - double mean, - double sigma, - int attempt = 0 - ) + public virtual double GetNormallyDistributedRandomNumber(double mean, double sigma, int attempt = 0) { double u, v; @@ -197,9 +189,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) // Check if the generated value is valid if (valueDrawn < 0) { - return attempt > 100 - ? GetDouble(0.01D, mean * 2D) - : GetNormallyDistributedRandomNumber(mean, sigma, attempt + 1); + return attempt > 100 ? GetDouble(0.01D, mean * 2D) : GetNormallyDistributedRandomNumber(mean, sigma, attempt + 1); } return valueDrawn; @@ -233,17 +223,11 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) /// and MaxSignificantDigits(15), inclusive. If not provided, precision is determined by the input values. /// /// - public virtual double RandNum( - double val1, - double val2 = 0, - int precision = DecimalPointRandomPrecision - ) + public virtual double RandNum(double val1, double val2 = 0, int precision = DecimalPointRandomPrecision) { if (!double.IsFinite(val1) || !double.IsFinite(val2)) { - throw new ArgumentException( - "RandNum() parameters 'value1' and 'value2' must be finite numbers." - ); + throw new ArgumentException("RandNum() parameters 'value1' and 'value2' must be finite numbers."); } // Determine the range @@ -266,11 +250,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) /// Whether to draw with replacement. Defaults to true. /// The type of elements in the list. /// A List containing the drawn elements. - public virtual List DrawRandomFromList( - List originalList, - int count = 1, - bool replacement = true - ) + public virtual List DrawRandomFromList(List originalList, int count = 1, bool replacement = true) { var list = originalList; var drawCount = count; @@ -311,11 +291,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) /// The type of elements in keys /// The type of elements in values /// A list of randomly drawn keys from the dictionary. - public virtual List DrawRandomFromDict( - Dictionary dict, - int count = 1, - bool replacement = true - ) + public virtual List DrawRandomFromDict(Dictionary dict, int count = 1, bool replacement = true) where TKey : notnull { var keys = dict.Keys.ToList(); @@ -348,9 +324,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) if (max < min) { - _logger.Error( - $"Invalid argument, Bounded random number generation max is smaller than min({max} < {min}" - ); + _logger.Error($"Invalid argument, Bounded random number generation max is smaller than min({max} < {min}"); return -1; } @@ -422,10 +396,7 @@ public class RandomUtil(ISptLogger _logger, ICloner _cloner) currentIndex--; // Swap it with the current element. - (originalList[currentIndex], originalList[randomIndex]) = ( - originalList[randomIndex], - originalList[currentIndex] - ); + (originalList[currentIndex], originalList[randomIndex]) = (originalList[randomIndex], originalList[currentIndex]); } return originalList; diff --git a/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs index 8d69b1be..3a8f3a7d 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/TimeUtil.cs @@ -47,9 +47,7 @@ public class TimeUtil /// Unix epoch for the start of day of the calculated date public long GetStartOfDayTimeStamp(long? timestamp) { - var now = timestamp.HasValue - ? DateTimeOffset.FromUnixTimeMilliseconds(timestamp.Value).DateTime - : GetDateTimeNow(); + var now = timestamp.HasValue ? DateTimeOffset.FromUnixTimeMilliseconds(timestamp.Value).DateTime : GetDateTimeNow(); var startOfDay = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0); return ((DateTimeOffset)startOfDay).ToUnixTimeMilliseconds(); diff --git a/Patches/Ceciler.Virtualizer/VirtualizerPatch.cs b/Patches/Ceciler.Virtualizer/VirtualizerPatch.cs index cc53fefb..5e08f42c 100644 --- a/Patches/Ceciler.Virtualizer/VirtualizerPatch.cs +++ b/Patches/Ceciler.Virtualizer/VirtualizerPatch.cs @@ -73,10 +73,8 @@ public class VirtualizerPatch : IPatcher || ContainsAttribute(method.CustomAttributes, "OnDeserializedAttribute"); } - public static bool ContainsAttribute( - IEnumerable attributes, - string attributeName - ) => attributes.Any(attribute => attribute.Constructor.DeclaringType.Name == attributeName); + public static bool ContainsAttribute(IEnumerable attributes, string attributeName) => + attributes.Any(attribute => attribute.Constructor.DeclaringType.Name == attributeName); public string Name { diff --git a/SPTarkov.Server/Logger/SptLoggerProvider.cs b/SPTarkov.Server/Logger/SptLoggerProvider.cs index 282a75d0..498cf7e8 100644 --- a/SPTarkov.Server/Logger/SptLoggerProvider.cs +++ b/SPTarkov.Server/Logger/SptLoggerProvider.cs @@ -5,11 +5,7 @@ using SPTarkov.Server.Core.Utils.Logger; namespace SPTarkov.Server.Logger; [Injectable] -public class SptLoggerProvider( - JsonUtil jsonUtil, - FileUtil fileUtil, - SptLoggerQueueManager queueManager -) : ILoggerProvider, ILoggerFactory +public class SptLoggerProvider(JsonUtil jsonUtil, FileUtil fileUtil, SptLoggerQueueManager queueManager) : ILoggerProvider, ILoggerFactory { private readonly List _loggerProviders = []; diff --git a/SPTarkov.Server/Logger/SptLoggerWrapper.cs b/SPTarkov.Server/Logger/SptLoggerWrapper.cs index 43c19fa6..98bb715f 100644 --- a/SPTarkov.Server/Logger/SptLoggerWrapper.cs +++ b/SPTarkov.Server/Logger/SptLoggerWrapper.cs @@ -8,12 +8,7 @@ public class SptLoggerWrapper : ILogger { private readonly SptLogger _logger; - public SptLoggerWrapper( - string category, - JsonUtil jsonUtil, - FileUtil fileUtil, - SptLoggerQueueManager queueManager - ) + public SptLoggerWrapper(string category, JsonUtil jsonUtil, FileUtil fileUtil, SptLoggerQueueManager queueManager) { _logger = new SptLogger(fileUtil, jsonUtil, queueManager); _logger.OverrideCategory(category); diff --git a/SPTarkov.Server/Modding/ModDllLoader.cs b/SPTarkov.Server/Modding/ModDllLoader.cs index 31c9c793..d3ac489e 100644 --- a/SPTarkov.Server/Modding/ModDllLoader.cs +++ b/SPTarkov.Server/Modding/ModDllLoader.cs @@ -58,11 +58,7 @@ public class ModDllLoader { if (string.Equals(file.Extension, ".dll", StringComparison.OrdinalIgnoreCase)) { - assemblyList.Add( - AssemblyLoadContext.Default.LoadFromAssemblyPath( - Path.GetFullPath(file.FullName) - ) - ); + assemblyList.Add(AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.GetFullPath(file.FullName))); } } @@ -102,10 +98,7 @@ public class ModDllLoader /// Path of the mod directory /// Mod metadata /// Thrown if duplicate metadata implementations are found - private static AbstractModMetadata LoadModMetadata( - IEnumerable assemblies, - string path - ) + private static AbstractModMetadata LoadModMetadata(IEnumerable assemblies, string path) { AbstractModMetadata? result = null; @@ -113,15 +106,11 @@ public class ModDllLoader { foreach (var module in allAsmModules) { - var modMetadata = module - .GetTypes() - .SingleOrDefault(t => typeof(AbstractModMetadata).IsAssignableFrom(t)); + var modMetadata = module.GetTypes().SingleOrDefault(t => typeof(AbstractModMetadata).IsAssignableFrom(t)); if (result != null && modMetadata != null) { - throw new Exception( - $"Duplicate mod metadata found for mod at path: {Path.GetFullPath(path)}" - ); + throw new Exception($"Duplicate mod metadata found for mod at path: {Path.GetFullPath(path)}"); } if (modMetadata != null) @@ -133,9 +122,7 @@ public class ModDllLoader if (result == null) { - throw new Exception( - $"Failed to load mod metadata for: {Path.GetFullPath(path)} \ndid you override `AbstractModMetadata`?" - ); + throw new Exception($"Failed to load mod metadata for: {Path.GetFullPath(path)} \ndid you override `AbstractModMetadata`?"); } return result; diff --git a/SPTarkov.Server/Modding/ModLoadOrder.cs b/SPTarkov.Server/Modding/ModLoadOrder.cs index 2916f2d2..d50af1f1 100644 --- a/SPTarkov.Server/Modding/ModLoadOrder.cs +++ b/SPTarkov.Server/Modding/ModLoadOrder.cs @@ -9,9 +9,7 @@ public class ModLoadOrder(ICloner cloner) protected Dictionary mods = new(); protected Dictionary modsAvailable = new(); - public Dictionary SetModList( - Dictionary mods - ) + public Dictionary SetModList(Dictionary mods) { this.mods = mods; modsAvailable = cloner.Clone(this.mods); diff --git a/SPTarkov.Server/Modding/ModValidator.cs b/SPTarkov.Server/Modding/ModValidator.cs index 3cf22b8f..fb55efcc 100644 --- a/SPTarkov.Server/Modding/ModValidator.cs +++ b/SPTarkov.Server/Modding/ModValidator.cs @@ -33,9 +33,7 @@ public class ModValidator( { ValidateMods(mods); - var sortedModLoadOrder = modLoadOrder.SetModList( - imported.ToDictionary(m => m.Key, m => m.Value.ModMetadata) - ); + var sortedModLoadOrder = modLoadOrder.SetModList(imported.ToDictionary(m => m.Key, m => m.Value.ModMetadata)); var finalList = new List(); foreach (var orderMod in SortModsLoadOrder()) { @@ -138,9 +136,7 @@ public class ModValidator( { foreach (var missingMod in missingFromOrderJSON.Keys) { - logger.Debug( - localisationService.GetText("modloader-mod_order_missing_from_json", missingMod) - ); + logger.Debug(localisationService.GetText("modloader-mod_order_missing_from_json", missingMod)); } } @@ -225,9 +221,7 @@ public class ModValidator( // Error and prevent loading if sptVersion property is not a valid semver string if (!(semVer.IsValid(mod.SptVersion) || semVer.IsValidRange(mod.SptVersion))) { - logger.Error( - localisationService.GetText("modloader-invalid_sptversion_field", modName) - ); + logger.Error(localisationService.GetText("modloader-invalid_sptversion_field", modName)); return false; } @@ -299,10 +293,7 @@ public class ModValidator( return skippedMods.Contains($"{pkg.Author}-{pkg.Name}"); } - protected bool AreModDependenciesFulfilled( - AbstractModMetadata pkg, - Dictionary loadedMods - ) + protected bool AreModDependenciesFulfilled(AbstractModMetadata pkg, Dictionary loadedMods) { if (pkg.ModDependencies == null) { @@ -317,12 +308,7 @@ public class ModValidator( // Raise dependency version incompatible if the dependency is not found in the mod list if (!loadedMods.ContainsKey(modDependency)) { - logger.Error( - localisationService.GetText( - "modloader-missing_dependency", - new { mod = modName, modDependency } - ) - ); + logger.Error(localisationService.GetText("modloader-missing_dependency", new { mod = modName, modDependency })); return false; } @@ -347,10 +333,7 @@ public class ModValidator( return true; } - protected bool IsModCompatible( - AbstractModMetadata mod, - Dictionary loadedMods - ) + protected bool IsModCompatible(AbstractModMetadata mod, Dictionary loadedMods) { var incompatbileModsList = mod.Incompatibilities; if (incompatbileModsList == null) @@ -391,11 +374,7 @@ public class ModValidator( var modName = mod.ModMetadata.Name; var modPath = GetModPath(modName); - var modIsCalledBepinEx = string.Equals( - modName, - "bepinex", - StringComparison.OrdinalIgnoreCase - ); + var modIsCalledBepinEx = string.Equals(modName, "bepinex", StringComparison.OrdinalIgnoreCase); var modIsCalledUser = string.Equals(modName, "user", StringComparison.OrdinalIgnoreCase); var modIsCalledSrc = string.Equals(modName, "src", StringComparison.OrdinalIgnoreCase); var modIsCalledDb = string.Equals(modName, "db", StringComparison.OrdinalIgnoreCase); @@ -427,9 +406,7 @@ public class ModValidator( if (!semVer.IsValid(config.Version)) { - logger.Error( - localisationService.GetText("modloader-invalid_version_property", modName) - ); + logger.Error(localisationService.GetText("modloader-invalid_version_property", modName)); issue = true; } diff --git a/SPTarkov.Server/Program.cs b/SPTarkov.Server/Program.cs index 832339d3..ba0ab215 100644 --- a/SPTarkov.Server/Program.cs +++ b/SPTarkov.Server/Program.cs @@ -30,9 +30,7 @@ public static class Program // Some users don't know how to create a shortcut... if (!IsRunFromInstallationFolder()) { - Console.WriteLine( - "You have not created a shortcut properly. Please hold alt when dragging to create a shortcut." - ); + Console.WriteLine("You have not created a shortcut properly. Please hold alt when dragging to create a shortcut."); await Task.Delay(-1); return; } @@ -59,9 +57,7 @@ public static class Program // update the loadedMods list with our validated sorted mods loadedMods = sortedLoadedMods; - diHandler.AddInjectableTypesFromAssemblies( - sortedLoadedMods.SelectMany(a => a.Assemblies) - ); + diHandler.AddInjectableTypesFromAssemblies(sortedLoadedMods.SelectMany(a => a.Assemblies)); } diHandler.InjectAll(); @@ -77,9 +73,7 @@ public static class Program ConfigureWebApp(app); // In case of exceptions we snatch a Server logger - var serverExceptionLogger = app - .Services.GetService()! - .CreateLogger("Server"); + var serverExceptionLogger = app.Services.GetService()!.CreateLogger("Server"); // We need any logger instance to use as a finalizer when the app closes var loggerFinalizer = app.Services.GetService>()!; try @@ -123,9 +117,7 @@ public static class Program { // This method is not expected to be async so we need to wait for the Task instead of using await keyword options.ApplicationServices.GetService()!.OnLoad().Wait(); - var httpConfig = options - .ApplicationServices.GetService() - ?.GetConfig()!; + var httpConfig = options.ApplicationServices.GetService()?.GetConfig()!; // Probe the http ip and port to see if its being used, this method will throw an exception and crash // the server if the IP/Port combination is already in use @@ -224,9 +216,7 @@ public static class Program var dirFiles = Directory.GetFiles(Directory.GetCurrentDirectory()); // This file is guaranteed to exist if ran from the correct location, even if the game does not exist here. - return dirFiles.Any(dirFile => - dirFile.EndsWith("sptLogger.json") || dirFile.EndsWith("sptLogger.Development.json") - ); + return dirFiles.Any(dirFile => dirFile.EndsWith("sptLogger.json") || dirFile.EndsWith("sptLogger.Development.json")); } [DllImport("kernel32.dll", SetLastError = true)] diff --git a/SPTarkov.Server/SPTarkov.Server.csproj b/SPTarkov.Server/SPTarkov.Server.csproj index 4d080028..30083314 100644 --- a/SPTarkov.Server/SPTarkov.Server.csproj +++ b/SPTarkov.Server/SPTarkov.Server.csproj @@ -30,10 +30,7 @@ - + diff --git a/SPTarkov.Server/Services/SptServerBackgroundService.cs b/SPTarkov.Server/Services/SptServerBackgroundService.cs index 68b9a906..66bb97c3 100644 --- a/SPTarkov.Server/Services/SptServerBackgroundService.cs +++ b/SPTarkov.Server/Services/SptServerBackgroundService.cs @@ -5,11 +5,7 @@ using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Services; -public class SptServerBackgroundService( - IReadOnlyList loadedMods, - BundleLoader bundleLoader, - App app -) : BackgroundService +public class SptServerBackgroundService(IReadOnlyList loadedMods, BundleLoader bundleLoader, App app) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { diff --git a/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGenerator.cs b/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGenerator.cs index 47b03994..9a957d84 100644 --- a/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGenerator.cs +++ b/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGenerator.cs @@ -30,12 +30,11 @@ public class HideoutCraftQuestIdGenerator( "67093210d514d26f8408612b", // Old event quest production "TG-Vi-24 true vaccine" ]; - private static readonly Dictionary _forcedQuestToProductionAssociations = - new() - { - // KEY = PRODUCTION, VALUE = QUEST - { new MongoId("63a571802116d261d2336cd1"), new MongoId("625d6ffaf7308432be1d44c5") }, // Network Provider - Part 2) - }; + private static readonly Dictionary _forcedQuestToProductionAssociations = new() + { + // KEY = PRODUCTION, VALUE = QUEST + { new MongoId("63a571802116d261d2336cd1"), new MongoId("625d6ffaf7308432be1d44c5") }, // Network Provider - Part 2) + }; private readonly Dictionary _questProductionMap = new(); private readonly List _questProductionOutputList = []; @@ -50,14 +49,10 @@ public class HideoutCraftQuestIdGenerator( // Figure out our source and target directories var projectDir = Directory.GetParent("./").Parent.Parent.Parent.Parent.Parent; - const string productionPath = - "Libraries\\SPTarkov.Server.Assets\\SPT_Data\\database\\hideout\\production.json"; + const string productionPath = "Libraries\\SPTarkov.Server.Assets\\SPT_Data\\database\\hideout\\production.json"; var productionFilePath = Path.Combine(projectDir.FullName, productionPath); - var updatedProductionJson = _jsonUtil.Serialize( - _databaseServer.GetTables().Hideout.Production, - true - ); + var updatedProductionJson = _jsonUtil.Serialize(_databaseServer.GetTables().Hideout.Production, true); await _fileUtil.WriteFileAsync(productionFilePath, updatedProductionJson); } @@ -66,9 +61,7 @@ public class HideoutCraftQuestIdGenerator( { foreach (var (questId, quest) in _databaseServer.GetTables().Templates.Quests) { - var combinedRewards = CombineRewards(quest.Rewards) - .Where(x => x.Type == RewardType.ProductionScheme) - .ToList(); + var combinedRewards = CombineRewards(quest.Rewards).Where(x => x.Type == RewardType.ProductionScheme).ToList(); foreach (var reward in combinedRewards) { // Assume all productions only output a single item template @@ -85,10 +78,7 @@ public class HideoutCraftQuestIdGenerator( { if (item.Template != output.ItemTemplate) { - _logger.Error( - $"Production scheme has multiple output items. " - + $"{output.ItemTemplate} != {item.Template}" - ); + _logger.Error($"Production scheme has multiple output items. " + $"{output.ItemTemplate} != {item.Template}"); continue; } @@ -114,9 +104,7 @@ public class HideoutCraftQuestIdGenerator( } // Look for a 'quest completion' requirement - var questCompleteRequirements = production - .Requirements.Where(req => req.Type == "QuestComplete") - .ToList(); + var questCompleteRequirements = production.Requirements.Where(req => req.Type == "QuestComplete").ToList(); if (questCompleteRequirements.Count == 0) { // Production has no quest requirement @@ -125,21 +113,14 @@ public class HideoutCraftQuestIdGenerator( if (questCompleteRequirements.Count > 1) { - _logger.Error( - $"Error, prodId: {production.Id} contains multiple QuestComplete requirements" - ); + _logger.Error($"Error, prodId: {production.Id} contains multiple QuestComplete requirements"); // Production has no multiple quest requirements continue; } // Check for forced ids - if ( - _forcedQuestToProductionAssociations.TryGetValue( - production.Id, - out var associatedQuestIdToComplete - ) - ) + if (_forcedQuestToProductionAssociations.TryGetValue(production.Id, out var associatedQuestIdToComplete)) { var enLocale = _databaseServer.GetTables().Locales.Global["en"].Value; var questName = enLocale[$"{associatedQuestIdToComplete} name"]; @@ -154,20 +135,11 @@ public class HideoutCraftQuestIdGenerator( // Try to find the quest that matches this production var questProductionOutputs = _questProductionOutputList - .Where(output => - output.ItemTemplate == production.EndProduct - && output.Quantity == production.Count - ) + .Where(output => output.ItemTemplate == production.EndProduct && output.Quantity == production.Count) .ToList(); // Make sure we found valid data - if ( - !IsValidQuestProduction( - production, - questProductionOutputs, - questCompleteRequirements[0] - ) - ) + if (!IsValidQuestProduction(production, questProductionOutputs, questCompleteRequirements[0])) { continue; } @@ -205,10 +177,7 @@ public class HideoutCraftQuestIdGenerator( return false; } - if ( - questComplete.QuestId is not null - && questComplete.QuestId != questProductionOutputs[0].QuestId - ) + if (questComplete.QuestId is not null && questComplete.QuestId != questProductionOutputs[0].QuestId) { _logger.Error( $"Error: Multiple productions match quest. EndProduct: {production.EndProduct} with quantity {production.Count}, existing quest: {questComplete.QuestId} {questProductionOutputs[0].QuestName}" diff --git a/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGeneratorLauncher.cs b/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGeneratorLauncher.cs index cff0d81c..0d2b6cf2 100644 --- a/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGeneratorLauncher.cs +++ b/Tools/HideoutCraftQuestIdGenerator/HideoutCraftQuestIdGeneratorLauncher.cs @@ -18,9 +18,7 @@ public class HideoutCraftQuestIdGeneratorLauncher serviceCollection.AddSingleton(WebApplication.CreateBuilder()); serviceCollection.AddSingleton>([]); var diHandler = new DependencyInjectionHandler(serviceCollection); - diHandler.AddInjectableTypesFromTypeAssembly( - typeof(HideoutCraftQuestIdGeneratorLauncher) - ); + diHandler.AddInjectableTypesFromTypeAssembly(typeof(HideoutCraftQuestIdGeneratorLauncher)); diHandler.AddInjectableTypesFromTypeAssembly(typeof(App)); diHandler.InjectAll(); var serviceProvider = serviceCollection.BuildServiceProvider(); diff --git a/Tools/HideoutCraftQuestIdGenerator/SptBasicLogger.cs b/Tools/HideoutCraftQuestIdGenerator/SptBasicLogger.cs index 43b2aefc..5453d511 100644 --- a/Tools/HideoutCraftQuestIdGenerator/SptBasicLogger.cs +++ b/Tools/HideoutCraftQuestIdGenerator/SptBasicLogger.cs @@ -15,12 +15,7 @@ public class SptBasicLogger : ISptLogger categoryName = typeof(T).Name; } - public void LogWithColor( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ) + public void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null) { Console.WriteLine($"{categoryName}: {data}"); } diff --git a/Tools/JsonExtensionDataGenerator/JsonExtensionDataGeneratorLauncher.cs b/Tools/JsonExtensionDataGenerator/JsonExtensionDataGeneratorLauncher.cs index ebea9c9b..c3dfe55e 100644 --- a/Tools/JsonExtensionDataGenerator/JsonExtensionDataGeneratorLauncher.cs +++ b/Tools/JsonExtensionDataGenerator/JsonExtensionDataGeneratorLauncher.cs @@ -4,10 +4,7 @@ namespace JsonExtensionDataGenerator; public class JsonExtensionDataGeneratorLauncher { - private static readonly Regex _recordAndClassRegex = new( - "^(public record |public class )", - RegexOptions.Multiline - ); + private static readonly Regex _recordAndClassRegex = new("^(public record |public class )", RegexOptions.Multiline); private static readonly Regex _endRecordClassRegex = new("^}", RegexOptions.Multiline); private static readonly Regex _startRecordClassRegex = new("^{", RegexOptions.Multiline); private const int StartRecordClassOffset = 3; @@ -41,17 +38,13 @@ public class JsonExtensionDataGeneratorLauncher var content = File.ReadAllText(modelFile); if (!content.Contains("public record ") && !content.Contains("public class ")) { - Console.WriteLine( - $"File {fileName} doesn't contain any records or classes, skipping..." - ); + Console.WriteLine($"File {fileName} doesn't contain any records or classes, skipping..."); // Probably an enum or interface return; } var classesAndRecordsToProcessCount = _recordAndClassRegex.Matches(content).Count; - Console.WriteLine( - $"Found {classesAndRecordsToProcessCount} records or classes for {fileName}" - ); + Console.WriteLine($"Found {classesAndRecordsToProcessCount} records or classes for {fileName}"); var firstTimeFlag = false; var currentIndex = 0; try @@ -62,15 +55,9 @@ public class JsonExtensionDataGeneratorLauncher var endIndex = FindEndClassIndex(content, startIndex); currentIndex = endIndex; // Check if this class already has the tag anywhere - if ( - content - .Substring(startIndex, endIndex - startIndex) - .Contains("[JsonExtensionData]") - ) + if (content.Substring(startIndex, endIndex - startIndex).Contains("[JsonExtensionData]")) { - Console.WriteLine( - $"Class index {i} for {fileName} already contains [JsonExtensionData], skipping class..." - ); + Console.WriteLine($"Class index {i} for {fileName} already contains [JsonExtensionData], skipping class..."); continue; } @@ -78,9 +65,7 @@ public class JsonExtensionDataGeneratorLauncher { if (extensions.Any(e => !e.StartsWith("I"))) { - Console.WriteLine( - $"Class index {i} for {fileName} extends a parent class, skipping..." - ); + Console.WriteLine($"Class index {i} for {fileName} extends a parent class, skipping..."); continue; } } @@ -90,9 +75,7 @@ public class JsonExtensionDataGeneratorLauncher { if (!content.Contains("using System.Text.Json.Serialization;")) { - Console.WriteLine( - $"Class index {i} for {fileName} doesn't contain using for Json.Serialization. Adding." - ); + Console.WriteLine($"Class index {i} for {fileName} doesn't contain using for Json.Serialization. Adding."); // insert the using and adjust the indexes content = Using + content; startIndex += Using.Length; @@ -105,8 +88,7 @@ public class JsonExtensionDataGeneratorLauncher // We need to add StartRecordClassOffset to offset the EOL var insertionIndex = - _startRecordClassRegex.Match(content, startIndex, endIndex - startIndex).Index - + StartRecordClassOffset; + _startRecordClassRegex.Match(content, startIndex, endIndex - startIndex).Index + StartRecordClassOffset; content = content.Insert(insertionIndex, Insertion); Console.WriteLine($"Class index {i} for {fileName} processed."); currentIndex += Insertion.Length; @@ -122,21 +104,14 @@ public class JsonExtensionDataGeneratorLauncher } } - private static bool TryGetExtensions( - string content, - int startIndex, - int endIndex, - out IEnumerable extensions - ) + private static bool TryGetExtensions(string content, int startIndex, int endIndex, out IEnumerable extensions) { extensions = null; var match = _extensionFinding.Match(content, startIndex, endIndex - startIndex); if (match.Success) { var extensionsGroup = match.Groups[8]; - extensions = extensionsGroup.Captures.Select(c => - _extensionCleanup.Replace(c.Value, "") - ); + extensions = extensionsGroup.Captures.Select(c => _extensionCleanup.Replace(c.Value, "")); return true; } @@ -157,12 +132,7 @@ public class JsonExtensionDataGeneratorLauncher private static IEnumerable LoadModelFiles() { var projectDir = Directory.GetParent("./").Parent.Parent.Parent.Parent.Parent; - var modelsDir = Path.Combine( - projectDir.FullName, - "Libraries", - "SPTarkov.Server.Core", - "Models" - ); + var modelsDir = Path.Combine(projectDir.FullName, "Libraries", "SPTarkov.Server.Core", "Models"); return Directory.GetFiles(modelsDir, "*.cs", SearchOption.AllDirectories); } } diff --git a/Tools/MongoIdTplGenerator/Application.cs b/Tools/MongoIdTplGenerator/Application.cs index b5aae1f2..9c633c16 100644 --- a/Tools/MongoIdTplGenerator/Application.cs +++ b/Tools/MongoIdTplGenerator/Application.cs @@ -6,11 +6,7 @@ using SPTarkov.Server.Core.Models.Utils; namespace MongoIdTplGenerator; [Injectable(InjectionType.Singleton)] -public class Application( - ISptLogger logger, - IEnumerable onloadComponents, - IEnumerable generators -) +public class Application(ISptLogger logger, IEnumerable onloadComponents, IEnumerable generators) { public async Task Run() { diff --git a/Tools/MongoIdTplGenerator/Generators/BaseClassesIdGenerator.cs b/Tools/MongoIdTplGenerator/Generators/BaseClassesIdGenerator.cs index 615ad29a..29ec352f 100644 --- a/Tools/MongoIdTplGenerator/Generators/BaseClassesIdGenerator.cs +++ b/Tools/MongoIdTplGenerator/Generators/BaseClassesIdGenerator.cs @@ -26,13 +26,7 @@ public class BaseClassesIdGenerator( { // Figure out our source and target directories var projectDir = Directory.GetParent("./").Parent.Parent.Parent.Parent.Parent; - _enumDir = Path.Combine( - projectDir.FullName, - "Libraries", - "SPTarkov.Server.Core", - "Models", - "Enums" - ); + _enumDir = Path.Combine(projectDir.FullName, "Libraries", "SPTarkov.Server.Core", "Models", "Enums"); _items = databaseServer.GetTables().Templates.Items; // Generate an object containing all item name to ID associations @@ -43,10 +37,7 @@ public class BaseClassesIdGenerator( var itemTplOutPath = Path.Combine(_enumDir, "BaseClasses.cs"); WriteEnumsToFile( itemTplOutPath, - new Dictionary> - { - { nameof(BaseClasses), orderedItemsObject }, - } + new Dictionary> { { nameof(BaseClasses), orderedItemsObject } } ); logger.Info("Generating items finished"); @@ -86,11 +77,7 @@ public class BaseClassesIdGenerator( return orderedItemsObject; } - private void LogEnumValueChanges( - Dictionary data, - string enumName, - Type originalEnum - ) + private void LogEnumValueChanges(Dictionary data, string enumName, Type originalEnum) { // First generate a mapping of the original enum values to names var originalEnumValues = new Dictionary(); @@ -104,17 +91,12 @@ public class BaseClassesIdGenerator( { if (originalEnumValues.ContainsKey(kv.Value) && originalEnumValues[kv.Value] != kv.Key) { - logger.Warning( - $"Enum {enumName} key has changed for {kv.Value}, {originalEnumValues[kv.Value]} => {kv.Key}" - ); + logger.Warning($"Enum {enumName} key has changed for {kv.Value}, {originalEnumValues[kv.Value]} => {kv.Key}"); } } } - private void WriteEnumsToFile( - string outputPath, - Dictionary> enumEntries - ) + private void WriteEnumsToFile(string outputPath, Dictionary> enumEntries) { var enumFileData = "using SPTarkov.Server.Core.Models.Common;\n\n" @@ -126,8 +108,7 @@ public class BaseClassesIdGenerator( foreach (var (key, value) in data) { - enumFileData += - $" public static readonly MongoId {key} = new MongoId(\"{value}\");\n"; + enumFileData += $" public static readonly MongoId {key} = new MongoId(\"{value}\");\n"; } enumFileData += "}\n"; diff --git a/Tools/MongoIdTplGenerator/Generators/ItemTplMongoIdGenerator.cs b/Tools/MongoIdTplGenerator/Generators/ItemTplMongoIdGenerator.cs index 816aee1a..c639a561 100644 --- a/Tools/MongoIdTplGenerator/Generators/ItemTplMongoIdGenerator.cs +++ b/Tools/MongoIdTplGenerator/Generators/ItemTplMongoIdGenerator.cs @@ -33,13 +33,7 @@ public class ItemTplMongoIdGenerator( // Figure out our source and target directories var projectDir = Directory.GetParent("./").Parent.Parent.Parent.Parent.Parent; - _enumDir = Path.Combine( - projectDir.FullName, - "Libraries", - "SPTarkov.Server.Core", - "Models", - "Enums" - ); + _enumDir = Path.Combine(projectDir.FullName, "Libraries", "SPTarkov.Server.Core", "Models", "Enums"); _items = databaseServer.GetTables().Templates.Items; // Generate an object containing all item name to ID associations @@ -48,25 +42,13 @@ public class ItemTplMongoIdGenerator( // Log any changes to enum values, so the source can be updated as required LogEnumValueChanges(orderedItemsObject, "ItemTpl", typeof(ItemTpl)); var itemTplOutPath = Path.Combine(_enumDir, "ItemTpl.cs"); - WriteEnumsToFile( - itemTplOutPath, - new Dictionary> - { - { nameof(ItemTpl), orderedItemsObject }, - } - ); + WriteEnumsToFile(itemTplOutPath, new Dictionary> { { nameof(ItemTpl), orderedItemsObject } }); // Handle the weapon type enums var weaponsObject = GenerateWeaponsObject(); LogEnumValueChanges(weaponsObject, "Weapons", typeof(Weapons)); var weaponTypeOutPath = Path.Combine(_enumDir, "Weapons.cs"); - WriteEnumsToFile( - weaponTypeOutPath, - new Dictionary> - { - { nameof(Weapons), weaponsObject }, - } - ); + WriteEnumsToFile(weaponTypeOutPath, new Dictionary> { { nameof(Weapons), weaponsObject } }); logger.Info("Generating items finished"); @@ -108,10 +90,7 @@ public class ItemTplMongoIdGenerator( } // Handle the case where the item ends with the parent category name. Avoids things like 'KEY_DORM_ROOM_103_KEY' - if ( - itemName.Length >= itemParentName.Length - && itemParentName == itemName.Substring(itemName.Length - itemParentName.Length) - ) + if (itemName.Length >= itemParentName.Length && itemParentName == itemName.Substring(itemName.Length - itemParentName.Length)) { itemName = itemName.Substring(0, itemName.Length - itemParentName.Length); @@ -142,9 +121,7 @@ public class ItemTplMongoIdGenerator( var oldItemNameSuffix = GetItemNameSuffix(_items[oldItemId]); if (!string.IsNullOrEmpty(oldItemNameSuffix)) { - var oldItemNewKey = localeUtil.SanitizeEnumKey( - $"{itemKey}_{oldItemNameSuffix}" - ); + var oldItemNewKey = localeUtil.SanitizeEnumKey($"{itemKey}_{oldItemNameSuffix}"); itemsObject.Remove(itemKey); itemsObject[oldItemNewKey] = oldItemId; } @@ -155,17 +132,13 @@ public class ItemTplMongoIdGenerator( // If we still collide, log an error if (itemsObject.TryGetValue(itemKey, out var value)) { - logger.Error( - $"After rename, itemsObject already contains {itemKey} {value} => {item.Id}" - ); + logger.Error($"After rename, itemsObject already contains {itemKey} {value} => {item.Id}"); } } else { var val = itemsObject.GetValueOrDefault(itemKey, itemKey); - logger.Error( - $"New itemOverride entry required: itemsObject already contains {itemKey} {val} => {item.Id}" - ); + logger.Error($"New itemOverride entry required: itemsObject already contains {itemKey} {val} => {item.Id}"); continue; } } @@ -403,20 +376,14 @@ public class ItemTplMongoIdGenerator( private string GetAmmoBoxPrefix(TemplateItem item) { - var ammoTpl = item - .Properties?.StackSlots?.First() - ?.Props?.Filters?.First() - ?.Filter?.FirstOrDefault(); + var ammoTpl = item.Properties?.StackSlots?.First()?.Props?.Filters?.First()?.Filter?.FirstOrDefault(); return GetAmmoPrefix(_items[ammoTpl.Value]); } private string GetMagazinePrefix(TemplateItem item) { - var ammoTpl = item - .Properties?.Cartridges?.First() - ?.Props?.Filters?.First() - ?.Filter?.FirstOrDefault(); + var ammoTpl = item.Properties?.Cartridges?.First()?.Props?.Filters?.First()?.Filter?.FirstOrDefault(); return GetAmmoPrefix(_items[ammoTpl.Value]); } @@ -437,22 +404,12 @@ public class ItemTplMongoIdGenerator( itemName = itemNameOverride.ToUpper(); } // For the listed types, user the item's _name property - else if ( - itemHelper.IsOfBaseclasses( - item.Id, - [BaseClasses.RANDOM_LOOT_CONTAINER, BaseClasses.BUILT_IN_INSERTS, BaseClasses.STASH] - ) - ) + else if (itemHelper.IsOfBaseclasses(item.Id, [BaseClasses.RANDOM_LOOT_CONTAINER, BaseClasses.BUILT_IN_INSERTS, BaseClasses.STASH])) { itemName = item.Name.ToUpper(); } // For the listed types, use the short name - else if ( - itemHelper.IsOfBaseclasses( - item.Id, - [BaseClasses.AMMO, BaseClasses.AMMO_BOX, BaseClasses.MAGAZINE] - ) - ) + else if (itemHelper.IsOfBaseclasses(item.Id, [BaseClasses.AMMO, BaseClasses.AMMO_BOX, BaseClasses.MAGAZINE])) { if (localeDb.TryGetValue($"{item.Id} ShortName", out itemName)) { @@ -540,11 +497,7 @@ public class ItemTplMongoIdGenerator( return ""; } - private void LogEnumValueChanges( - Dictionary data, - string enumName, - Type originalEnum - ) + private void LogEnumValueChanges(Dictionary data, string enumName, Type originalEnum) { // First generate a mapping of the original enum values to names var originalEnumValues = new Dictionary(); @@ -558,17 +511,12 @@ public class ItemTplMongoIdGenerator( { if (originalEnumValues.ContainsKey(kv.Value) && originalEnumValues[kv.Value] != kv.Key) { - logger.Warning( - $"Enum {enumName} key has changed for {kv.Value}, {originalEnumValues[kv.Value]} => {kv.Key}" - ); + logger.Warning($"Enum {enumName} key has changed for {kv.Value}, {originalEnumValues[kv.Value]} => {kv.Key}"); } } } - private void WriteEnumsToFile( - string outputPath, - Dictionary> enumEntries - ) + private void WriteEnumsToFile(string outputPath, Dictionary> enumEntries) { var enumFileData = "using SPTarkov.Server.Core.Models.Common;\n\n" @@ -580,8 +528,7 @@ public class ItemTplMongoIdGenerator( foreach (var (key, value) in data) { - enumFileData += - $" public static readonly MongoId {key} = new MongoId(\"{value}\");\n"; + enumFileData += $" public static readonly MongoId {key} = new MongoId(\"{value}\");\n"; } enumFileData += "}\n"; diff --git a/Tools/MongoIdTplGenerator/Generators/QuestTplMongoIdGenerator.cs b/Tools/MongoIdTplGenerator/Generators/QuestTplMongoIdGenerator.cs index 53628127..37c81115 100644 --- a/Tools/MongoIdTplGenerator/Generators/QuestTplMongoIdGenerator.cs +++ b/Tools/MongoIdTplGenerator/Generators/QuestTplMongoIdGenerator.cs @@ -25,13 +25,7 @@ public class QuestTplMongoIdGenerator( { // Figure out our source and target directories var projectDir = Directory.GetParent("./").Parent.Parent.Parent.Parent.Parent; - _enumDir = Path.Combine( - projectDir.FullName, - "Libraries", - "SPTarkov.Server.Core", - "Models", - "Enums" - ); + _enumDir = Path.Combine(projectDir.FullName, "Libraries", "SPTarkov.Server.Core", "Models", "Enums"); _quests = databaseServer.GetTables().Templates.Quests; var questTplObject = GenerateQuestTplObject(); @@ -54,18 +48,13 @@ public class QuestTplMongoIdGenerator( { if (!result.TryAdd(nameOverride, id)) { - logger.Warning( - $"Duplicate locale name: {nameOverride} with id: {id} in quest list" - ); + logger.Warning($"Duplicate locale name: {nameOverride} with id: {id} in quest list"); } continue; } - var locale = localeService - .GetLocaleDb()[$"{id} name"] - .Replace(" ", "_") - .Replace("-", "_"); + var locale = localeService.GetLocaleDb()[$"{id} name"].Replace(" ", "_").Replace("-", "_"); locale = localeUtil.SanitizeEnumKey(locale); @@ -88,8 +77,7 @@ public class QuestTplMongoIdGenerator( foreach (var (enumName, data) in enumEntries) { - enumFileData += - $" public static readonly MongoId {enumName} = new MongoId(\"{data}\");\n"; + enumFileData += $" public static readonly MongoId {enumName} = new MongoId(\"{data}\");\n"; } enumFileData += "}\n"; diff --git a/Tools/MongoIdTplGenerator/Utils/SptBasicLogger.cs b/Tools/MongoIdTplGenerator/Utils/SptBasicLogger.cs index a2e2b024..9b1e5ca4 100644 --- a/Tools/MongoIdTplGenerator/Utils/SptBasicLogger.cs +++ b/Tools/MongoIdTplGenerator/Utils/SptBasicLogger.cs @@ -15,12 +15,7 @@ public class SptBasicLogger : ISptLogger categoryName = typeof(T).Name; } - public void LogWithColor( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ) + public void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null) { Console.WriteLine($"{categoryName}: {data}"); } diff --git a/UnitTests/Mock/MockLogger.cs b/UnitTests/Mock/MockLogger.cs index 66547480..2446aae1 100644 --- a/UnitTests/Mock/MockLogger.cs +++ b/UnitTests/Mock/MockLogger.cs @@ -9,12 +9,7 @@ namespace UnitTests.Mock; [Injectable(TypeOverride = typeof(SptLogger<>))] public class MockLogger : ISptLogger { - public void LogWithColor( - string data, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null, - Exception? ex = null - ) + public void LogWithColor(string data, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null, Exception? ex = null) { Console.WriteLine(data); } @@ -75,12 +70,7 @@ public class MockLogger : ISptLogger throw new NotImplementedException(); } - public void LogWithColor( - string data, - Exception? ex = null, - LogTextColor? textColor = null, - LogBackgroundColor? backgroundColor = null - ) + public void LogWithColor(string data, Exception? ex = null, LogTextColor? textColor = null, LogBackgroundColor? backgroundColor = null) { Console.WriteLine(data); } diff --git a/UnitTests/Mock/MockRandomUtil.cs b/UnitTests/Mock/MockRandomUtil.cs index c95fb485..fdb7616e 100644 --- a/UnitTests/Mock/MockRandomUtil.cs +++ b/UnitTests/Mock/MockRandomUtil.cs @@ -6,8 +6,7 @@ using SPTarkov.Server.Core.Utils.Cloners; namespace UnitTests.Mock; [Injectable(TypeOverride = typeof(RandomUtil))] -public class MockRandomUtil(ISptLogger _logger, ICloner _cloner) - : RandomUtil(_logger, _cloner) +public class MockRandomUtil(ISptLogger _logger, ICloner _cloner) : RandomUtil(_logger, _cloner) { public override int GetInt(int min, int max = Int32.MaxValue, bool exclusive = false) { @@ -67,11 +66,7 @@ public class MockRandomUtil(ISptLogger _logger, ICloner _cloner) return GetRandomElement(dictionary.Values); } - public override double GetNormallyDistributedRandomNumber( - double mean, - double sigma, - int attempt = 0 - ) + public override double GetNormallyDistributedRandomNumber(double mean, double sigma, int attempt = 0) { // TODO: No idea what to do with this return base.GetNormallyDistributedRandomNumber(mean, sigma, attempt); @@ -87,20 +82,12 @@ public class MockRandomUtil(ISptLogger _logger, ICloner _cloner) return val1; } - public override List DrawRandomFromList( - List originalList, - int count = 1, - bool replacement = true - ) + public override List DrawRandomFromList(List originalList, int count = 1, bool replacement = true) { return originalList.Slice(0, count); } - public override List DrawRandomFromDict( - Dictionary dict, - int count = 1, - bool replacement = true - ) + public override List DrawRandomFromDict(Dictionary dict, int count = 1, bool replacement = true) { // TODO: derandomize return base.DrawRandomFromDict(dict, count, replacement); diff --git a/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs b/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs index bc3ada4a..6527d7d7 100644 --- a/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs +++ b/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs @@ -18,12 +18,7 @@ public partial class ContainerExtensionsTests var itemWidth = 1; var itemHeight = 1; - var result = container.CanItemBePlacedInContainerAtPosition( - itemStartXPos, - itemStartYPos, - itemWidth, - itemHeight - ); + var result = container.CanItemBePlacedInContainerAtPosition(itemStartXPos, itemStartYPos, itemWidth, itemHeight); Assert.IsTrue(result); } @@ -38,12 +33,7 @@ public partial class ContainerExtensionsTests var itemWidth = 1; var itemHeight = 1; - var result = container.CanItemBePlacedInContainerAtPosition( - itemStartXPos, - itemStartYPos, - itemWidth, - itemHeight - ); + var result = container.CanItemBePlacedInContainerAtPosition(itemStartXPos, itemStartYPos, itemWidth, itemHeight); Assert.IsFalse(result); } @@ -57,12 +47,7 @@ public partial class ContainerExtensionsTests var itemWidth = 1; var itemHeight = 2; - var result = container.CanItemBePlacedInContainerAtPosition( - itemStartXPos, - itemStartYPos, - itemWidth, - itemHeight - ); + var result = container.CanItemBePlacedInContainerAtPosition(itemStartXPos, itemStartYPos, itemWidth, itemHeight); Assert.IsTrue(result); } @@ -77,12 +62,7 @@ public partial class ContainerExtensionsTests var itemWidth = 1; var itemHeight = 2; - var result = container.CanItemBePlacedInContainerAtPosition( - itemStartXPos, - itemStartYPos, - itemWidth, - itemHeight - ); + var result = container.CanItemBePlacedInContainerAtPosition(itemStartXPos, itemStartYPos, itemWidth, itemHeight); Assert.IsFalse(result); } @@ -96,12 +76,7 @@ public partial class ContainerExtensionsTests var itemWidth = 2; var itemHeight = 2; - var result = container.CanItemBePlacedInContainerAtPosition( - itemStartXPos, - itemStartYPos, - itemWidth, - itemHeight - ); + var result = container.CanItemBePlacedInContainerAtPosition(itemStartXPos, itemStartYPos, itemWidth, itemHeight); Assert.IsTrue(result); } @@ -115,12 +90,7 @@ public partial class ContainerExtensionsTests var itemWidth = 1; var itemHeight = 2; - var result = container.CanItemBePlacedInContainerAtPosition( - itemStartXPos, - itemStartYPos, - itemWidth, - itemHeight - ); + var result = container.CanItemBePlacedInContainerAtPosition(itemStartXPos, itemStartYPos, itemWidth, itemHeight); Assert.IsTrue(result); } @@ -256,13 +226,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = false; - container.FillContainerMapWithItem( - destinationPosX, - destinationPosY, - itemWidth, - itemHeight, - isRotated - ); + container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); Assert.AreEqual(container[0, 0], 1); } @@ -279,13 +243,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = false; - container.FillContainerMapWithItem( - destinationPosX, - destinationPosY, - itemWidth, - itemHeight, - isRotated - ); + container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); Assert.AreEqual(container[0, 0], 1); Assert.AreEqual(container[1, 0], 1); @@ -303,13 +261,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = false; - container.FillContainerMapWithItem( - destinationPosX, - destinationPosY, - itemWidth, - itemHeight, - isRotated - ); + container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); Assert.AreEqual(container[0, 0], 1); Assert.AreEqual(container[1, 1], 1); @@ -327,13 +279,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = true; - container.FillContainerMapWithItem( - destinationPosX, - destinationPosY, - itemWidth, - itemHeight, - isRotated - ); + container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); Assert.AreEqual(container[0, 0], 1); Assert.AreEqual(container[0, 1], 1); @@ -352,13 +298,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 1; var isRotated = true; - container.FillContainerMapWithItem( - destinationPosX, - destinationPosY, - itemWidth, - itemHeight, - isRotated - ); + container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); Assert.AreEqual(container[1, 0], 1); Assert.AreEqual(container[1, 1], 1); diff --git a/UnitTests/Tests/Extensions/ItemTests.cs b/UnitTests/Tests/Extensions/ItemTests.cs index daa3a63d..960bcd13 100644 --- a/UnitTests/Tests/Extensions/ItemTests.cs +++ b/UnitTests/Tests/Extensions/ItemTests.cs @@ -15,11 +15,7 @@ public class ItemTests public void GetItemWithChildren_one_child_mods_only() { var testData = new List(); - var rootItem = new Item - { - Id = new MongoId(), - Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND, - }; + var rootItem = new Item { Id = new MongoId(), Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND }; var childItem = new Item { Id = new MongoId(), @@ -38,11 +34,7 @@ public class ItemTests public void GetItemWithChildren_mods_only_one_inventory_item() { var testData = new List(); - var rootItem = new Item - { - Id = new MongoId(), - Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND, - }; + var rootItem = new Item { Id = new MongoId(), Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND }; var childItem = new Item { Id = new MongoId(), @@ -70,11 +62,7 @@ public class ItemTests public void GetItemWithChildren_mods_and_inventory_item() { var testData = new List(); - var rootItem = new Item - { - Id = new MongoId(), - Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND, - }; + var rootItem = new Item { Id = new MongoId(), Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND }; var childItem = new Item { Id = new MongoId(), @@ -102,11 +90,7 @@ public class ItemTests public void GetItemWithChildren_mod_with_child() { var testData = new List(); - var rootItem = new Item - { - Id = new MongoId(), - Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND, - }; + var rootItem = new Item { Id = new MongoId(), Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND }; var childItem = new Item { Id = new MongoId(), @@ -133,11 +117,7 @@ public class ItemTests public void GetItemWithChildren_no_matching_children() { var testData = new List(); - var rootItem = new Item - { - Id = new MongoId(), - Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND, - }; + var rootItem = new Item { Id = new MongoId(), Template = ItemTpl.AMMOBOX_127X33_COPPER_20RND }; var childItem = new Item { Id = new MongoId(), diff --git a/UnitTests/Tests/Generators/BotWeaponGeneratorTests.cs b/UnitTests/Tests/Generators/BotWeaponGeneratorTests.cs index 7d6576bb..36a392e7 100644 --- a/UnitTests/Tests/Generators/BotWeaponGeneratorTests.cs +++ b/UnitTests/Tests/Generators/BotWeaponGeneratorTests.cs @@ -60,11 +60,7 @@ public class BotWeaponGeneratorTests 69 ); - var itemSize = _inventoryHelper.GetItemSize( - weaponTpl, - result.Weapon[0].Id, - result.Weapon - ); + var itemSize = _inventoryHelper.GetItemSize(weaponTpl, result.Weapon[0].Id, result.Weapon); Assert.AreEqual(weaponTpl, result.WeaponTemplate.Id); diff --git a/UnitTests/Tests/Helpers/BotGeneratorHelperTests.cs b/UnitTests/Tests/Helpers/BotGeneratorHelperTests.cs index 584877d2..1cf487e6 100644 --- a/UnitTests/Tests/Helpers/BotGeneratorHelperTests.cs +++ b/UnitTests/Tests/Helpers/BotGeneratorHelperTests.cs @@ -68,11 +68,7 @@ public class BotGeneratorHelperTests private static List CreateMp18(MongoId rootWeaponId) { var weaponWithChildren = new List(); - var weaponRoot = new Item - { - Id = rootWeaponId, - Template = ItemTpl.SHOTGUN_MP18_762X54R_SINGLESHOT_RIFLE, - }; + var weaponRoot = new Item { Id = rootWeaponId, Template = ItemTpl.SHOTGUN_MP18_762X54R_SINGLESHOT_RIFLE }; weaponWithChildren.Add(weaponRoot); var weaponStock = new Item { @@ -134,14 +130,7 @@ public class BotGeneratorHelperTests { ItemTpl.BARTER_GOLD_SKULL_RING, 1 }, { ItemTpl.BARTER_PACK_OF_NAILS, 1 }, }; - _botLootGenerator.AddLootFromPool( - tplsToAdd, - [EquipmentSlots.Backpack], - 4, - botInventory, - "assault", - null - ); + _botLootGenerator.AddLootFromPool(tplsToAdd, [EquipmentSlots.Backpack], 4, botInventory, "assault", null); Assert.AreEqual(ItemAddedResult.SUCCESS, result); @@ -152,15 +141,8 @@ public class BotGeneratorHelperTests foreach (var item in botInventory.Items.Where(i => tplsToAdd.ContainsKey(i.Template))) { var location = item.Location as ItemLocation; - Assert.True( - location.X >= 0 && location.X <= 3, - "Error! An item was misplaced on the X axis inside the item grid!" - ); - Assert.AreEqual( - 1, - location.Y, - "Error! An item was misplaced on the Y axis inside the item grid!" - ); + Assert.True(location.X >= 0 && location.X <= 3, "Error! An item was misplaced on the X axis inside the item grid!"); + Assert.AreEqual(1, location.Y, "Error! An item was misplaced on the Y axis inside the item grid!"); } } @@ -445,11 +427,7 @@ public class BotGeneratorHelperTests var rootWeaponId = new MongoId(); var weaponWithChildren = new List(); - var root = new Item - { - Id = rootWeaponId, - Template = ItemTpl.ASSAULTRIFLE_MOLOT_ARMS_VPO136_VEPRKM_762X39_CARBINE, - }; + var root = new Item { Id = rootWeaponId, Template = ItemTpl.ASSAULTRIFLE_MOLOT_ARMS_VPO136_VEPRKM_762X39_CARBINE }; weaponWithChildren.Add(root); var stock = new Item diff --git a/UnitTests/Tests/Helpers/InRaidHelperTests.cs b/UnitTests/Tests/Helpers/InRaidHelperTests.cs index 84e36c01..715d545e 100644 --- a/UnitTests/Tests/Helpers/InRaidHelperTests.cs +++ b/UnitTests/Tests/Helpers/InRaidHelperTests.cs @@ -45,9 +45,7 @@ public class InRaidHelperTests Assert.LessOrEqual(pmcData.Inventory.Items.Count, initialItemCount); // Verify that the method completed without throwing collection modification exception - Assert.Pass( - "DeleteInventory completed successfully without collection modification exception" - ); + Assert.Pass("DeleteInventory completed successfully without collection modification exception"); } private static PmcData CreateTestPmcData() diff --git a/UnitTests/Tests/Helpers/InventoryHelperTests.cs b/UnitTests/Tests/Helpers/InventoryHelperTests.cs index 860a0f8d..0052071a 100644 --- a/UnitTests/Tests/Helpers/InventoryHelperTests.cs +++ b/UnitTests/Tests/Helpers/InventoryHelperTests.cs @@ -21,9 +21,7 @@ public class InventoryHelperTests [Test] public void GetItemSize_vss_val() { - var vssValPreset = _presetHelper.GetDefaultPreset( - ItemTpl.MARKSMANRIFLE_VSS_VINTOREZ_9X39_SPECIAL_SNIPER_RIFLE - ); + var vssValPreset = _presetHelper.GetDefaultPreset(ItemTpl.MARKSMANRIFLE_VSS_VINTOREZ_9X39_SPECIAL_SNIPER_RIFLE); var result = _helper.GetItemSize( ItemTpl.MARKSMANRIFLE_VSS_VINTOREZ_9X39_SPECIAL_SNIPER_RIFLE, @@ -38,15 +36,9 @@ public class InventoryHelperTests [Test] public void GetItemSize_m4a1() { - var vssValPreset = _presetHelper.GetDefaultPreset( - ItemTpl.ASSAULTRIFLE_COLT_M4A1_556X45_ASSAULT_RIFLE - ); + var vssValPreset = _presetHelper.GetDefaultPreset(ItemTpl.ASSAULTRIFLE_COLT_M4A1_556X45_ASSAULT_RIFLE); - var result = _helper.GetItemSize( - ItemTpl.ASSAULTRIFLE_COLT_M4A1_556X45_ASSAULT_RIFLE, - vssValPreset.Parent, - vssValPreset.Items - ); + var result = _helper.GetItemSize(ItemTpl.ASSAULTRIFLE_COLT_M4A1_556X45_ASSAULT_RIFLE, vssValPreset.Parent, vssValPreset.Items); Assert.AreEqual(5, result.Item1); Assert.AreEqual(2, result.Item2); @@ -57,11 +49,7 @@ public class InventoryHelperTests { var vssValPreset = _presetHelper.GetDefaultPreset(ItemTpl.PISTOL_GLOCK_17_9X19); - var result = _helper.GetItemSize( - ItemTpl.PISTOL_GLOCK_17_9X19, - vssValPreset.Parent, - vssValPreset.Items - ); + var result = _helper.GetItemSize(ItemTpl.PISTOL_GLOCK_17_9X19, vssValPreset.Parent, vssValPreset.Items); Assert.AreEqual(2, result.Item1); Assert.AreEqual(1, result.Item2); @@ -73,11 +61,7 @@ public class InventoryHelperTests var rootWeaponId = new MongoId(); var weaponWithChildren = new List(); - var root = new Item - { - Id = rootWeaponId, - Template = ItemTpl.ASSAULTRIFLE_MOLOT_ARMS_VPO136_VEPRKM_762X39_CARBINE, - }; + var root = new Item { Id = rootWeaponId, Template = ItemTpl.ASSAULTRIFLE_MOLOT_ARMS_VPO136_VEPRKM_762X39_CARBINE }; weaponWithChildren.Add(root); var stock = new Item @@ -119,11 +103,7 @@ public class InventoryHelperTests var rootWeaponId = new MongoId(); var weaponWithChildren = new List(); - var root = new Item - { - Id = rootWeaponId, - Template = ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN, - }; + var root = new Item { Id = rootWeaponId, Template = ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN }; weaponWithChildren.Add(root); var stock = new Item @@ -144,11 +124,7 @@ public class InventoryHelperTests }; weaponWithChildren.Add(magazine); - var result = _helper.GetItemSize( - ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN, - rootWeaponId, - weaponWithChildren - ); + var result = _helper.GetItemSize(ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN, rootWeaponId, weaponWithChildren); Assert.AreEqual(3, result.Item1); Assert.AreEqual(2, result.Item2); @@ -160,11 +136,7 @@ public class InventoryHelperTests var rootWeaponId = new MongoId(); var weaponWithChildren = new List(); - var root = new Item - { - Id = rootWeaponId, - Template = ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN, - }; + var root = new Item { Id = rootWeaponId, Template = ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN }; weaponWithChildren.Add(root); var stock = new Item @@ -186,11 +158,7 @@ public class InventoryHelperTests }; weaponWithChildren.Add(magazine); - var result = _helper.GetItemSize( - ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN, - rootWeaponId, - weaponWithChildren - ); + var result = _helper.GetItemSize(ItemTpl.SMG_IWI_UZI_9X19_SUBMACHINE_GUN, rootWeaponId, weaponWithChildren); Assert.AreEqual(2, result.Item1); Assert.AreEqual(2, result.Item2); diff --git a/UnitTests/Tests/MongoIDTests.cs b/UnitTests/Tests/MongoIDTests.cs index 2756486e..2440f5af 100644 --- a/UnitTests/Tests/MongoIDTests.cs +++ b/UnitTests/Tests/MongoIDTests.cs @@ -28,21 +28,9 @@ public class MongoIDTests } } - [TestCase( - "677ddb67406e9918a0264bbz", - false, - "677ddb67406e9918a0264bbz contains invalid char `z`, but result was true" - )] - [TestCase( - "677ddb67406e9918a0264bbcc", - false, - "677ddb67406e9918a0264bbcc is 25 characters, but result was true" - )] - [TestCase( - "677ddb67406e9918a0264bbc", - true, - "IsValidMongoId() `677ddb67406e9918a0264bbc` is a valid mongoId, but result was false" - )] + [TestCase("677ddb67406e9918a0264bbz", false, "677ddb67406e9918a0264bbz contains invalid char `z`, but result was true")] + [TestCase("677ddb67406e9918a0264bbcc", false, "677ddb67406e9918a0264bbcc is 25 characters, but result was true")] + [TestCase("677ddb67406e9918a0264bbc", true, "IsValidMongoId() `677ddb67406e9918a0264bbc` is a valid mongoId, but result was false")] public void IsValidMongoIdTest(string mongoId, bool passes, string failMessage) { var result = new MongoId(mongoId); diff --git a/UnitTests/Tests/Utils/JsonUtilTests.cs b/UnitTests/Tests/Utils/JsonUtilTests.cs index 04d7a36f..7684a248 100644 --- a/UnitTests/Tests/Utils/JsonUtilTests.cs +++ b/UnitTests/Tests/Utils/JsonUtilTests.cs @@ -18,13 +18,8 @@ public class JsonUtilTests [Test] public void SerializeAndDeserialize_WithDictionaryOfETFEnum_ExpectCorrectParsing() { - var value = new Dictionary - { - { QuestStatusEnum.AvailableForStart, 1 }, - }; - var result = _jsonUtil.Deserialize>( - _jsonUtil.Serialize(value) - ); + var value = new Dictionary { { QuestStatusEnum.AvailableForStart, 1 } }; + var result = _jsonUtil.Deserialize>(_jsonUtil.Serialize(value)); Assert.AreEqual(value.Count, result?.Count); Assert.AreEqual(value.First().Key, result?.First().Key); Assert.AreEqual(value.First().Value, result?.First().Value); diff --git a/UnitTests/Tests/Utils/MathUtilTests.cs b/UnitTests/Tests/Utils/MathUtilTests.cs index b7eabb01..b9704a79 100644 --- a/UnitTests/Tests/Utils/MathUtilTests.cs +++ b/UnitTests/Tests/Utils/MathUtilTests.cs @@ -38,9 +38,7 @@ public class MathUtilTests { if (Math.Abs(expected[i] - actual[i]) > 0.00001f) { - Assert.Fail( - $"ListCumSum() Expected: {string.Join(", ", expected)}, Actual: {string.Join(", ", actual)}" - ); + Assert.Fail($"ListCumSum() Expected: {string.Join(", ", expected)}, Actual: {string.Join(", ", actual)}"); } } } @@ -57,9 +55,7 @@ public class MathUtilTests { if (Math.Abs(expected[i] - actual[i]) > 0.00001f) { - Assert.Fail( - $"ListProduct() Expected: {string.Join(", ", expected)}, Actual: {string.Join(", ", actual)}" - ); + Assert.Fail($"ListProduct() Expected: {string.Join(", ", expected)}, Actual: {string.Join(", ", actual)}"); } } } @@ -76,9 +72,7 @@ public class MathUtilTests { if (Math.Abs(expected[i] - actual[i]) > 0.00001f) { - Assert.Fail( - $"ListProduct() Expected: {string.Join(", ", expected)}, Actual: {string.Join(", ", actual)}" - ); + Assert.Fail($"ListProduct() Expected: {string.Join(", ", expected)}, Actual: {string.Join(", ", actual)}"); } } } @@ -93,19 +87,9 @@ public class MathUtilTests Assert.AreEqual(expected, actual, $"MapToRange() Expected: {expected}, Actual: {actual}"); } - [TestCase( - 15d, - new double[] { 1, 10, 20, 30, 40, 50, 60 }, - new double[] { 11000, 20000, 32000, 45000, 58000, 70000, 82000 }, - 26000d - )] + [TestCase(15d, new double[] { 1, 10, 20, 30, 40, 50, 60 }, new double[] { 11000, 20000, 32000, 45000, 58000, 70000, 82000 }, 26000d)] [TestCase(5d, new double[] { 1, 10 }, new double[] { 0, 1000 }, 444.44444444444446d)] - [TestCase( - 12d, - new double[] { 1, 10, 500, 510 }, - new double[] { 0, 10, 20, 30 }, - 10.040816326530612d - )] + [TestCase(12d, new double[] { 1, 10, 500, 510 }, new double[] { 0, 10, 20, 30 }, 10.040816326530612d)] [TestCase(1d, new double[] { 1, 10, 500, 510 }, new double[] { 2, 10, 20, 30 }, 2d)] [TestCase(11d, new double[] { 1, 10 }, new double[] { 2, 10 }, 10d)] public void InterpTest(double input, double[] x, double[] y, double expected) diff --git a/UnitTests/Tests/Utils/MongoIdTests.cs b/UnitTests/Tests/Utils/MongoIdTests.cs index c2cef3d9..4f435bd5 100644 --- a/UnitTests/Tests/Utils/MongoIdTests.cs +++ b/UnitTests/Tests/Utils/MongoIdTests.cs @@ -30,10 +30,6 @@ public class MongoIdTests } } - Assert.AreEqual( - 0, - invalidIds.Count, - $"Invalid MongoIds found: {string.Join(", ", invalidIds)}" - ); + Assert.AreEqual(0, invalidIds.Count, $"Invalid MongoIds found: {string.Join(", ", invalidIds)}"); } } diff --git a/UnitTests/Tests/Utils/RandomUtilTests.cs b/UnitTests/Tests/Utils/RandomUtilTests.cs index 607e35f0..d9573c56 100644 --- a/UnitTests/Tests/Utils/RandomUtilTests.cs +++ b/UnitTests/Tests/Utils/RandomUtilTests.cs @@ -25,9 +25,7 @@ public sealed class RandomUtilTests if (result < 0 || result > 10) { - Assert.Fail( - $"GetInt(0, 10) out of range. Expected range [0, 10] but was {result}." - ); + Assert.Fail($"GetInt(0, 10) out of range. Expected range [0, 10] but was {result}."); } } } @@ -57,9 +55,7 @@ public sealed class RandomUtilTests if (result is < 0d or >= 10d) { - Assert.Fail( - $"GetDouble(0d, 10d) out of range. Expected range [0.0d, 9.999d] but was {result}." - ); + Assert.Fail($"GetDouble(0d, 10d) out of range. Expected range [0.0d, 9.999d] but was {result}."); } } } @@ -70,12 +66,7 @@ public sealed class RandomUtilTests const float expected = 45.5f; var result = _randomUtil.GetPercentOfValue(45.5f, 100f); - Assert.AreEqual( - expected, - result, - 0.0001f, - $"GetPercentOfValue(45.5f, 100f) out of range. Expected: {expected}. Actual: {result}." - ); + Assert.AreEqual(expected, result, 0.0001f, $"GetPercentOfValue(45.5f, 100f) out of range. Expected: {expected}. Actual: {result}."); } [Test] @@ -100,11 +91,7 @@ public sealed class RandomUtilTests const bool expectedTrue = true; var resultTrue = _randomUtil.GetChance100(100f); - Assert.AreEqual( - expectedTrue, - resultTrue, - $"GetChance100(100f) out of range. Expected: {expectedTrue}. Actual: {resultTrue}." - ); + Assert.AreEqual(expectedTrue, resultTrue, $"GetChance100(100f) out of range. Expected: {expectedTrue}. Actual: {resultTrue}."); } for (var i = 0; i < 100; i++) @@ -131,9 +118,7 @@ public sealed class RandomUtilTests if (result < 0 || result > 9) { - Assert.Fail( - $"RandInt(0, 10) out of range. Expected range [0, 9] but was {result}." - ); + Assert.Fail($"RandInt(0, 10) out of range. Expected range [0, 9] but was {result}."); } } @@ -143,9 +128,7 @@ public sealed class RandomUtilTests if (result < 0 || result > 9) { - Assert.Fail( - $"RandInt(10, null) out of range. Expected range [0, 9] but was {result}." - ); + Assert.Fail($"RandInt(10, null) out of range. Expected range [0, 9] but was {result}."); } } } @@ -159,9 +142,7 @@ public sealed class RandomUtilTests if (result < 0 || result >= 10) { - Assert.Fail( - $"RandNum(0, 10) out of range. Expected range [0, 9.999d] but was {result}." - ); + Assert.Fail($"RandNum(0, 10) out of range. Expected range [0, 9.999d] but was {result}."); } if (_randomUtil.GetNumberPrecision(result) > RandomUtil.MaxSignificantDigits) @@ -178,9 +159,7 @@ public sealed class RandomUtilTests if (result < 0 || result >= 10) { - Assert.Fail( - $"RandNum(10) out of range. Expected range [0, 9.999d] but was {result}." - ); + Assert.Fail($"RandNum(10) out of range. Expected range [0, 9.999d] but was {result}."); } if (_randomUtil.GetNumberPrecision(result) > RandomUtil.MaxSignificantDigits)