Files
SPT-Server-Build/Libraries/SPTarkov.Server.Core/Extensions/FullProfileExtensions.cs
T
2025-06-28 09:27:41 +01:00

232 lines
8.8 KiB
C#

using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Enums;
namespace SPTarkov.Server.Core.Extensions
{
public static class FullProfileExtensions
{
public static void StoreHydrationEnergyTempInProfile(
this SptProfile fullProfile,
double hydration,
double energy,
double temperature
)
{
fullProfile.VitalityData.Hydration = hydration;
fullProfile.VitalityData.Energy = energy;
fullProfile.VitalityData.Temperature = temperature;
}
/// <summary>
/// Add a list of suit ids to a profiles suit list, no duplicates
/// </summary>
/// <param name="fullProfile">Profile to add clothing to</param>
/// <param name="clothingIds">Clothing Ids to add to profile</param>
public static void AddSuitsToProfile(this SptProfile fullProfile, List<string> clothingIds)
{
fullProfile.CustomisationUnlocks ??= [];
foreach (var suitId in clothingIds)
{
if (
!fullProfile.CustomisationUnlocks.Exists(customisation =>
customisation.Id == suitId
)
)
{
// Clothing item doesn't exist in profile, add it
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = suitId,
Source = CustomisationSource.UNLOCKED_IN_GAME,
Type = CustomisationType.SUITE,
}
);
}
}
}
/// <summary>
/// Add customisations to game profiles based on game edition
/// </summary>
/// <param name="fullProfile">Profile to add customisations to</param>
public static void AddCustomisationUnlocksToProfile(this SptProfile fullProfile)
{
// Some game versions have additional customisation unlocks
var gameEdition = fullProfile.GetGameEdition();
switch (gameEdition)
{
case GameEditions.EDGE_OF_DARKNESS:
// Gets EoD tags
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "6746fd09bafff85008048838",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "67471938bafff850080488b7",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
break;
case GameEditions.UNHEARD:
// Gets EoD+Unheard tags
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "6746fd09bafff85008048838",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "67471938bafff850080488b7",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "67471928d17d6431550563b5",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "6747193f170146228c0d2226",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
// Unheard Clothing (Cultist Hood)
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "666841a02537107dc508b704",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.SUITE,
}
);
// Unheard background
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "675850ba33627edb710b0592",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.ENVIRONMENT,
}
);
break;
}
var pretigeLevel = fullProfile?.CharacterData?.PmcData?.Info?.PrestigeLevel;
if (pretigeLevel is not null)
{
if (pretigeLevel >= 1)
{
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "674dbf593bee1152d407f005",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
}
if (pretigeLevel >= 2)
{
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "675dcfea7ae1a8792107ca99",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.DOG_TAG,
}
);
}
}
// Dev profile additions
if (fullProfile.ProfileInfo.Edition.ToLower().Contains("developer"))
// CyberTark background
{
fullProfile.CustomisationUnlocks.Add(
new CustomisationStorage
{
Id = "67585108def253bd97084552",
Source = CustomisationSource.DEFAULT,
Type = CustomisationType.ENVIRONMENT,
}
);
}
}
/// <summary>
/// Get the game edition of a profile chosen on creation in Launcher
/// </summary>
public static string GetGameEdition(this SptProfile fullProfile)
{
var edition = fullProfile.CharacterData?.PmcData?.Info?.GameVersion;
if (edition is not null)
{
return edition;
}
// Edge case - profile not created yet, fall back to what launcher has set
var launcherEdition = fullProfile.ProfileInfo.Edition;
switch (launcherEdition.ToLower())
{
case "edge of darkness":
return GameEditions.EDGE_OF_DARKNESS;
case "unheard":
return GameEditions.UNHEARD;
default:
return GameEditions.STANDARD;
}
}
/// <summary>
/// Add the given number of extra repeatable quests for the given type of repeatable to the users profile
/// </summary>
/// <param name="fullProfile">Profile to add the extra repeatable to</param>
/// <param name="repeatableId">The ID of the type of repeatable to increase</param>
/// <param name="rewardValue">The number of extra repeatables to add</param>
public static void AddExtraRepeatableQuest(
this SptProfile fullProfile,
string repeatableId,
double rewardValue
)
{
fullProfile.SptData.ExtraRepeatableQuests ??= new Dictionary<string, double>();
if (!fullProfile.SptData.ExtraRepeatableQuests.TryAdd(repeatableId, 0))
{
fullProfile.SptData.ExtraRepeatableQuests[repeatableId] += rewardValue;
}
}
}
}