using System.Text.Json.Serialization; using Core.Models.Eft.Health; using Core.Models.Enums; using Core.Models.Enums.Hideout; namespace Core.Models.Eft.Hideout; public class QteData { [JsonPropertyName("id")] public string? Id { get; set; } [JsonPropertyName("type")] public QteActivityType? Type { get; set; } [JsonPropertyName("area")] public HideoutAreas? Area { get; set; } [JsonPropertyName("areaLevel")] public int? AreaLevel { get; set; } [JsonPropertyName("quickTimeEvents")] public List? QuickTimeEvents { get; set; } [JsonPropertyName("requirements")] public List? Requirements { get; set; } /* TODO: Could be an array of any of these: | IAreaRequirement | IItemRequirement | ITraderUnlockRequirement | ITraderLoyaltyRequirement | ISkillRequirement | IResourceRequirement | IToolRequirement | IQuestRequirement | IHealthRequirement | IBodyPartBuffRequirement */ [JsonPropertyName("results")] public Dictionary? Results { get; set; } } public class QuickTimeEvent { [JsonPropertyName("type")] [JsonConverter(typeof(JsonStringEnumConverter))] public QteType? EventType { get; set; } [JsonPropertyName("position")] public Position? Coordinates { get; set; } [JsonPropertyName("startDelay")] public double? StartDelay { get; set; } [JsonPropertyName("endDelay")] public double? EndDelay { get; set; } [JsonPropertyName("speed")] public float? MovementSpeed { get; set; } [JsonPropertyName("successRange")] public Position? SuccessCoordinates { get; set; } [JsonPropertyName("key")] public string? UniqueKey { get; set; } } public class QteRequirement { [JsonPropertyName("type")] public RequirementType? RequirementType { get; set; } } public class QteResult { [JsonPropertyName("energy")] public int? Energy { get; set; } [JsonPropertyName("hydration")] public int? Hydration { get; set; } [JsonPropertyName("rewardsRange")] public List? RewardEffects { get; set; } } public class QteEffect { [JsonPropertyName("type")] [JsonConverter(typeof(JsonStringEnumConverter))] public QteRewardType? EffectType { get; set; } [JsonPropertyName("skillId")] [JsonConverter(typeof(JsonStringEnumConverter))] public SkillTypes? SkillIdentifier { get; set; } [JsonPropertyName("levelMultipliers")] public List? LevelMultipliers { get; set; } [JsonPropertyName("time")] public int? DurationInMilliseconds { get; set; } [JsonPropertyName("weight")] public float? EffectWeight { get; set; } [JsonPropertyName("result")] [JsonConverter(typeof(JsonStringEnumConverter))] public QteResultType? ResultType { get; set; } } public class SkillLevelMultiplier { [JsonPropertyName("level")] public int? Level { get; set; } [JsonPropertyName("multiplier")] public float? MultiplierValue { get; set; } } public class Position { [JsonPropertyName("x")] public float? X { get; set; } [JsonPropertyName("y")] public float? Y { get; set; } } public class AreaRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.Area; [JsonPropertyName("areaType")] public HideoutAreas? AreaType { get; set; } [JsonPropertyName("requiredLevel")] public int? RequiredLevel { get; set; } } public class TraderUnlockRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.TraderUnlock; [JsonPropertyName("traderId")] public string? TraderId { get; set; } } public class TraderLoyaltyRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.TraderLoyalty; [JsonPropertyName("traderId")] public string? TraderId { get; set; } [JsonPropertyName("loyaltyLevel")] public int? LoyaltyLevel { get; set; } } public class SkillRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.Skill; [JsonPropertyName("skillName")] public SkillTypes? SkillName { get; set; } [JsonPropertyName("skillLevel")] public int? SkillLevel { get; set; } } public class ResourceRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.Resource; [JsonPropertyName("templateId")] public string? TemplateId { get; set; } [JsonPropertyName("resource")] public int? Resource { get; set; } } public class ItemRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.Item; [JsonPropertyName("templateId")] public string? TemplateId { get; set; } [JsonPropertyName("count")] public int? Count { get; set; } [JsonPropertyName("isFunctional")] public bool? IsFunctional { get; set; } [JsonPropertyName("isEncoded")] public bool? IsEncoded { get; set; } } public class ToolRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.Tool; [JsonPropertyName("templateId")] public string? TemplateId { get; set; } [JsonPropertyName("count")] public int? Count { get; set; } [JsonPropertyName("isFunctional")] public bool? IsFunctional { get; set; } [JsonPropertyName("isEncoded")] public bool? IsEncoded { get; set; } } public class QuestRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.QuestComplete; [JsonPropertyName("questId")] public string? QuestId { get; set; } } public class HealthRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.Health; [JsonPropertyName("energy")] public int? Energy { get; set; } [JsonPropertyName("hydration")] public int? Hydration { get; set; } } public class BodyPartBuffRequirement : QteRequirement { [JsonPropertyName("type")] public RequirementType? Type { get; set; } = Models.Enums.Hideout.RequirementType.BodyPartBuff; [JsonPropertyName("effectName")] public Effect? EffectName { get; set; } [JsonPropertyName("bodyPart")] public BodyPart? BodyPart { get; set; } [JsonPropertyName("excluded")] public bool? Excluded { get; set; } }