using System.Text.Json.Serialization;
using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Hideout;
namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HideoutConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind { get; set; } = "spt-hideout";
///
/// How many seconds should pass before hideout crafts / fuel usage is checked and processed
///
[JsonPropertyName("runIntervalSeconds")]
public int RunIntervalSeconds { get; set; }
///
/// Default values used to hydrate `RunIntervalSeconds` with
///
[JsonPropertyName("runIntervalValues")]
public required RunIntervalValues RunIntervalValues { get; set; }
[JsonPropertyName("hoursForSkillCrafting")]
public int HoursForSkillCrafting { get; set; }
[JsonPropertyName("expCraftAmount")]
public int ExpCraftAmount { get; set; }
[JsonPropertyName("overrideCraftTimeSeconds")]
public int OverrideCraftTimeSeconds { get; set; }
[JsonPropertyName("overrideBuildTimeSeconds")]
public int OverrideBuildTimeSeconds { get; set; }
///
/// Only process a profile's hideout crafts when it has been active in the last x minutes
///
[JsonPropertyName("updateProfileHideoutWhenActiveWithinMinutes")]
public int UpdateProfileHideoutWhenActiveWithinMinutes { get; set; }
[JsonPropertyName("cultistCircle")]
public required CultistCircleSettings CultistCircle { get; set; }
[JsonPropertyName("hideoutCraftsToAdd")]
public required List HideoutCraftsToAdd { get; set; }
[JsonPropertyName("hideoutLootCrateCraftIdsToUnlockInHideout")]
public IEnumerable HideoutLootCrateCraftIdsToUnlockInHideout { get; set; }
}
public record HideoutCraftToAdd
{
///
/// The new mongoId for the craft to use
///
[JsonPropertyName("newId")]
public required MongoId NewId { get; set; }
[JsonPropertyName("requirements")]
public required List Requirements { get; set; }
[JsonPropertyName("craftIdToCopy")]
public required MongoId CraftIdToCopy { get; set; }
[JsonPropertyName("craftOutputTpl")]
public required MongoId CraftOutputTpl { get; set; }
}
public record CultistCircleSettings
{
[JsonPropertyName("maxRewardItemCount")]
public int MaxRewardItemCount { get; set; }
[JsonPropertyName("maxAttemptsToPickRewardsWithinBudget")]
public int MaxAttemptsToPickRewardsWithinBudget { get; set; }
[JsonPropertyName("rewardPriceMultiplierMinMax")]
public required MinMax RewardPriceMultiplierMinMax { get; set; }
[JsonPropertyName("bonusChanceMultiplier")]
public double BonusChanceMultiplier { get; set; }
///
/// What is considered a "high-value" item
///
[JsonPropertyName("highValueThresholdRub")]
public int HighValueThresholdRub { get; set; }
///
/// Hideout/task reward crafts have a unique craft time
///
[JsonPropertyName("hideoutTaskRewardTimeSeconds")]
public int HideoutTaskRewardTimeSeconds { get; set; }
///
/// Rouble amount player needs to sacrifice to get chance of hideout/task rewards
///
[JsonPropertyName("hideoutCraftSacrificeThresholdRub")]
public int HideoutCraftSacrificeThresholdRub { get; set; }
[JsonPropertyName("craftTimeThresholds")]
public required List CraftTimeThresholds { get; set; }
///
/// -1 means no override, value in seconds
///
[JsonPropertyName("craftTimeOverride")]
public int CraftTimeOverride { get; set; }
///
/// Specific reward pool when player sacrifices specific item(s)
///
[JsonPropertyName("directRewards")]
public required List DirectRewards { get; set; }
///
/// Overrides for reward stack sizes, keyed by item tpl
///
[JsonPropertyName("directRewardStackSize")]
public required Dictionary> DirectRewardStackSize { get; set; }
///
/// Item tpls to exclude from the reward pool
///
[JsonPropertyName("rewardItemBlacklist")]
public required List RewardItemBlacklist { get; set; }
///
/// Item tpls to include in the reward pool
///
[JsonPropertyName("additionalRewardItemPool")]
public required List AdditionalRewardItemPool { get; set; }
[JsonPropertyName("currencyRewards")]
public required Dictionary> CurrencyRewards { get; set; }
}
public record CraftTimeThreshold : MinMax
{
[JsonPropertyName("craftTimeSeconds")]
public int CraftTimeSeconds { get; set; }
}
public record DirectRewardSettings
{
[JsonPropertyName("reward")]
public required List Reward { get; set; }
[JsonPropertyName("requiredItems")]
public required List RequiredItems { get; set; }
[JsonPropertyName("craftTimeSeconds")]
public required int CraftTimeSeconds { get; set; }
///
/// Is the reward a one time reward or can it be given multiple times
///
[JsonPropertyName("repeatable")]
public required bool Repeatable { get; set; }
}