diff --git a/Libraries/SPTarkov.Server.Core/Constants/BodyPartContants.cs b/Libraries/SPTarkov.Server.Core/Constants/BodyPartContants.cs new file mode 100644 index 00000000..3a3988b2 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Constants/BodyPartContants.cs @@ -0,0 +1,16 @@ +namespace SPTarkov.Server.Core.Constants; + +public static class BodyParts +{ + public const string Head = "Head"; + public const string LeftArm = "LeftArm"; + public const string RightArm = "RightArm"; + public const string Chest = "Chest"; + public const string Stomach = "Stomach"; + public const string LeftLeg = "LeftLeg"; + public const string RightLeg = "RightLeg"; + + // quest data + public const string Legs = "Legs"; + public const string Arms = "Arms"; +} diff --git a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGenerator.cs index dbdfd08d..22d46a40 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/RepeatableQuestGenerator.cs @@ -12,6 +12,7 @@ using SPTarkov.Server.Core.Utils; using SPTarkov.Server.Core.Utils.Cloners; using SPTarkov.Server.Core.Utils.Collections; using SPTarkov.Server.Core.Utils.Json; +using BodyParts = SPTarkov.Server.Core.Constants.BodyParts; namespace SPTarkov.Server.Core.Generators; @@ -30,6 +31,36 @@ public class RepeatableQuestGenerator( ICloner _cloner ) { + /// + /// Body parts to present to the client as opposed to the body part information in quest data. + /// + private static readonly Dictionary> _bodyPartsToClient = new() + { + { + BodyParts.Arms, [ + BodyParts.LeftArm, + BodyParts.RightArm + ] + }, + { + BodyParts.Legs, [ + BodyParts.LeftLeg, + BodyParts.RightLeg + ] + }, + { + BodyParts.Head, [ + BodyParts.Head + ] + }, + { + BodyParts.Chest, [ + BodyParts.Chest, + BodyParts.Stomach + ] + }, + }; + protected int _maxRandomNumberAttempts = 6; protected QuestConfig _questConfig = _configServer.GetConfig(); @@ -218,7 +249,15 @@ public class RepeatableQuestGenerator( { // more than one part lead to an "OR" condition hence more parts reduce the difficulty probability += bodyPartsConfig.Probability(bodyPart).Value; - bodyPartsToClient.Add(bodyPart); + + if (_bodyPartsToClient.TryGetValue(bodyPart, out var bodyPartListToClient)) + { + bodyPartsToClient.AddRange(bodyPartListToClient); + } + else + { + bodyPartsToClient.Add(bodyPart); + } } bodyPartDifficulty = 1 / probability;