232 lines
8.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|