From 58db41dd1ebb7f6bbe32fbe50ee994bf446feccf Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 29 Jan 2025 22:22:00 +0000 Subject: [PATCH] Added more type changes --- .../Core/Generators/PlayerScavGenerator.cs | 8 +- Libraries/Core/Helpers/QuestHelper.cs | 4 +- Libraries/Core/Helpers/RepairHelper.cs | 13 ++- Libraries/Core/Models/Eft/Common/Globals.cs | 79 ++++++++++++------- .../Core/Models/Eft/Common/LocationBase.cs | 13 +-- .../Core/Models/Eft/Common/Tables/Item.cs | 2 + .../Models/Eft/Common/Tables/TemplateItem.cs | 3 +- .../Core/Models/Eft/Common/Tables/Trader.cs | 20 +++-- Libraries/Core/Models/Enums/ArmorMaterial.cs | 14 ++++ .../Core/Models/Enums/ExfiltrationType.cs | 9 +++ .../Core/Models/Enums/RequirementState.cs | 20 +++++ Libraries/Core/Services/FenceService.cs | 10 +-- .../Services/RaidTimeAdjustmentService.cs | 5 +- Libraries/Core/Services/RepairService.cs | 4 +- Libraries/Core/Utils/JsonUtil.cs | 3 + 15 files changed, 146 insertions(+), 61 deletions(-) create mode 100644 Libraries/Core/Models/Enums/ArmorMaterial.cs create mode 100644 Libraries/Core/Models/Enums/ExfiltrationType.cs create mode 100644 Libraries/Core/Models/Enums/RequirementState.cs diff --git a/Libraries/Core/Generators/PlayerScavGenerator.cs b/Libraries/Core/Generators/PlayerScavGenerator.cs index ce180cef..2a1dddd1 100644 --- a/Libraries/Core/Generators/PlayerScavGenerator.cs +++ b/Libraries/Core/Generators/PlayerScavGenerator.cs @@ -334,7 +334,7 @@ public class PlayerScavGenerator( // Set cooldown time. // Make sure to apply ScavCooldownTimer bonus from Hideout if the player has it. var scavLockDuration = _databaseService.GetGlobals().Configuration.SavagePlayCooldown; - var modifier = 1D; + var modifier = 1; foreach (var bonus in pmcData.Bonuses) { @@ -342,12 +342,12 @@ public class PlayerScavGenerator( { // Value is negative, so add. // Also note that for scav cooldown, multiple bonuses stack additively. - modifier += (bonus?.Value ?? 1) / 100; + modifier += (int)(bonus?.Value ?? 1) / 100; } } var fenceInfo = _fenceService.GetFenceInfo(pmcData); - modifier *= fenceInfo.SavageCooldownModifier ?? 1; + modifier *= (int)(fenceInfo.SavageCooldownModifier ?? 1); scavLockDuration *= modifier; var fullProfile = _profileHelper.GetFullProfile(pmcData?.SessionId); @@ -355,7 +355,7 @@ public class PlayerScavGenerator( scavLockDuration = 10; if (scavData?.Info != null) - scavData.Info.SavageLockTime = Math.Round(_timeUtil.GetTimeStamp() / 1000 + scavLockDuration ?? 0); + scavData.Info.SavageLockTime = Math.Round((double)(_timeUtil.GetTimeStamp() / 1000 + scavLockDuration ?? 0)); return scavData; } diff --git a/Libraries/Core/Helpers/QuestHelper.cs b/Libraries/Core/Helpers/QuestHelper.cs index c6d4ebaf..d6a32363 100644 --- a/Libraries/Core/Helpers/QuestHelper.cs +++ b/Libraries/Core/Helpers/QuestHelper.cs @@ -183,7 +183,7 @@ public class QuestHelper( /// true if loyalty is high enough to fulfill quest requirement public bool TraderLoyaltyLevelRequirementCheck(QuestCondition questProperties, PmcData profile) { - var requiredLoyaltyLevel = questProperties.Value as float?; + var requiredLoyaltyLevel = questProperties.Value as double?; if (!profile.TradersInfo.TryGetValue( questProperties.Target.IsItem ? questProperties.Target.Item @@ -227,7 +227,7 @@ public class QuestHelper( return CompareAvailableForValues(trader.Standing ?? 1, requiredLoyaltyLevel, questProperties.CompareMethod); } - protected bool CompareAvailableForValues(double current, float required, string compareMethod) + protected bool CompareAvailableForValues(double current, double required, string compareMethod) { switch (compareMethod) { diff --git a/Libraries/Core/Helpers/RepairHelper.cs b/Libraries/Core/Helpers/RepairHelper.cs index 04c2af26..5c1eb931 100644 --- a/Libraries/Core/Helpers/RepairHelper.cs +++ b/Libraries/Core/Helpers/RepairHelper.cs @@ -1,3 +1,4 @@ +using Core.Models.Eft.Common; using SptCommon.Annotations; using Core.Models.Eft.Common.Tables; using Core.Models.Spt.Config; @@ -7,6 +8,7 @@ using Core.Services; using Core.Utils; using Core.Utils.Cloners; using LogLevel = Core.Models.Spt.Logging.LogLevel; +using Core.Models.Enums; namespace Core.Helpers; @@ -71,7 +73,7 @@ public class RepairHelper( if (applyMaxDurabilityDegradation) { var randomisedWearAmount = isArmor ? GetRandomisedArmorRepairDegradationValue( - itemToRepairDetails.Properties.ArmorMaterial, + itemToRepairDetails.Properties.ArmorMaterial.Value, useRepairKit, itemCurrentMaxDurability ?? 0, traderQualityMultipler @@ -101,20 +103,23 @@ public class RepairHelper( /// /// Repairing armor reduces the total durability value slightly, get a randomised (to 2dp) amount based on armor material /// - /// What material is the armor being repaired made of + /// What material is the armor being repaired made of /// Was a repair kit used /// Max amount of durability item can have /// Different traders produce different loss values /// Amount to reduce max durability by protected double GetRandomisedArmorRepairDegradationValue( - string armorMaterial, + ArmorMaterial material, bool isRepairKit, double armorMax, double traderQualityMultipler ) { // Degradation value is based on the armor material - var armorMaterialSettings = _databaseService.GetGlobals().Configuration.ArmorMaterials[armorMaterial]; + if (!_databaseService.GetGlobals().Configuration.ArmorMaterials.TryGetValue(material, out var armorMaterialSettings)) + { + _logger.Error($"Unable to find armor with a type of: {material}"); + } var minMultiplier = isRepairKit ? armorMaterialSettings.MinRepairKitDegradation diff --git a/Libraries/Core/Models/Eft/Common/Globals.cs b/Libraries/Core/Models/Eft/Common/Globals.cs index 9311281b..949a9413 100644 --- a/Libraries/Core/Models/Eft/Common/Globals.cs +++ b/Libraries/Core/Models/Eft/Common/Globals.cs @@ -258,38 +258,43 @@ public record ProjectileExplosionParams [JsonPropertyName("ArmorDistanceDistanceDamage")] public XYZ? ArmorDistanceDistanceDamage { get; set; } + // Checked in client [JsonPropertyName("MinExplosionDistance")] - public float? MinExplosionDistance { get; set; } + public double? MinExplosionDistance { get; set; } [JsonPropertyName("MaxExplosionDistance")] public float? MaxExplosionDistance { get; set; } + // Checked in client [JsonPropertyName("FragmentsCount")] - public double? FragmentsCount { get; set; } + public int? FragmentsCount { get; set; } [JsonPropertyName("Strength")] - public float? Strength { get; set; } + public double? Strength { get; set; } + // Checked in client [JsonPropertyName("ArmorDamage")] - public float? ArmorDamage { get; set; } + public double? ArmorDamage { get; set; } + // Checked in client [JsonPropertyName("StaminaBurnRate")] - public float? StaminaBurnRate { get; set; } + public double? StaminaBurnRate { get; set; } + // Checked in client [JsonPropertyName("PenetrationPower")] - public float? PenetrationPower { get; set; } + public double? PenetrationPower { get; set; } [JsonPropertyName("DirectionalDamageAngle")] - public float? DirectionalDamageAngle { get; set; } + public double? DirectionalDamageAngle { get; set; } [JsonPropertyName("DirectionalDamageMultiplier")] - public float? DirectionalDamageMultiplier { get; set; } + public double? DirectionalDamageMultiplier { get; set; } [JsonPropertyName("FragmentType")] public string? FragmentType { get; set; } [JsonPropertyName("DeadlyDistance")] - public float? DeadlyDistance { get; set; } + public double? DeadlyDistance { get; set; } } public record Config @@ -333,8 +338,9 @@ public record Config [JsonPropertyName("RunddansSettings")] public RunddansSettings? RunddansSettings { get; set; } + // Checked in client [JsonPropertyName("SavagePlayCooldown")] - public double? SavagePlayCooldown { get; set; } + public int? SavagePlayCooldown { get; set; } [JsonPropertyName("SavagePlayCooldownNdaFree")] public double? SavagePlayCooldownNdaFree { get; set; } @@ -433,7 +439,7 @@ public record Config public AirdropGlobalSettings? Airdrop { get; set; } [JsonPropertyName("ArmorMaterials")] - public Dictionary? ArmorMaterials { get; set; } + public Dictionary? ArmorMaterials { get; set; } [JsonPropertyName("ArenaEftTransferSettings")] public ArenaEftTransferSettings @@ -1121,14 +1127,17 @@ public record Exp [JsonPropertyName("loot_attempts")] public List? LootAttempts { get; set; } + // Confirmed in client [JsonPropertyName("expForLevelOneDogtag")] public double? ExpForLevelOneDogtag { get; set; } + // Confirmed in client [JsonPropertyName("expForLockedDoorOpen")] - public double? ExpForLockedDoorOpen { get; set; } + public int? ExpForLockedDoorOpen { get; set; } + // Confirmed in client [JsonPropertyName("expForLockedDoorBreach")] - public double? ExpForLockedDoorBreach { get; set; } + public int? ExpForLockedDoorBreach { get; set; } [JsonPropertyName("triggerMult")] public double? TriggerMult { get; set; } @@ -1151,20 +1160,24 @@ public record MatchEnd [JsonPropertyName("README")] public string? ReadMe { get; set; } + // Confirmed in client [JsonPropertyName("survived_exp_requirement")] - public double? SurvivedExperienceRequirement { get; set; } + public int? SurvivedExperienceRequirement { get; set; } + // Confirmed in client [JsonPropertyName("survived_seconds_requirement")] - public double? SurvivedSecondsRequirement { get; set; } + public int? SurvivedSecondsRequirement { get; set; } + // Confirmed in client [JsonPropertyName("survived_exp_reward")] - public double? SurvivedExperienceReward { get; set; } + public int? SurvivedExperienceReward { get; set; } + // Confirmed in client [JsonPropertyName("mia_exp_reward")] - public double? MiaExperienceReward { get; set; } + public int? MiaExperienceReward { get; set; } [JsonPropertyName("runner_exp_reward")] - public double? RunnerExperienceReward { get; set; } + public int? RunnerExperienceReward { get; set; } [JsonPropertyName("leftMult")] public double? LeftMultiplier { get; set; } @@ -1271,8 +1284,9 @@ public record Armor public record Class { + // Checked in client [JsonPropertyName("resistance")] - public double? Resistance { get; set; } + public int? Resistance { get; set; } } public record Mastering @@ -1283,11 +1297,13 @@ public record Mastering [JsonPropertyName("Templates")] public List? Templates { get; set; } + // Checked in client [JsonPropertyName("Level2")] - public double? Level2 { get; set; } + public int? Level2 { get; set; } + // Checked in client [JsonPropertyName("Level3")] - public double? Level3 { get; set; } + public int? Level3 { get; set; } } public record Customization @@ -2273,8 +2289,9 @@ public record RagFair [JsonPropertyName("priceStabilizerStartIntervalInHours")] public double? PriceStabilizerStartIntervalInHours { get; set; } + // Checked in client [JsonPropertyName("minUserLevel")] - public double? MinUserLevel { get; set; } + public int? MinUserLevel { get; set; } [JsonPropertyName("communityTax")] public float? CommunityTax { get; set; } @@ -2282,8 +2299,9 @@ public record RagFair [JsonPropertyName("communityItemTax")] public float? CommunityItemTax { get; set; } + // Checked in client [JsonPropertyName("communityRequirementTax")] - public float? CommunityRequirementTax { get; set; } + public double? CommunityRequirementTax { get; set; } [JsonPropertyName("offerPriorityCost")] public float? OfferPriorityCost { get; set; } @@ -2316,7 +2334,7 @@ public record RagFair public float? BalancerAveragePriceCoefficient { get; set; } [JsonPropertyName("delaySinceOfferAdd")] - public float? DelaySinceOfferAdd { get; set; } + public int? DelaySinceOfferAdd { get; set; } [JsonPropertyName("uniqueBuyerTimeoutInDays")] public double? UniqueBuyerTimeoutInDays { get; set; } @@ -2328,28 +2346,28 @@ public record RagFair public long? RagfairTurnOnTimestamp { get; set; } [JsonPropertyName("ratingSumForIncrease")] - public float? RatingSumForIncrease { get; set; } + public double? RatingSumForIncrease { get; set; } [JsonPropertyName("ratingIncreaseCount")] public double? RatingIncreaseCount { get; set; } [JsonPropertyName("ratingSumForDecrease")] - public float? RatingSumForDecrease { get; set; } + public double? RatingSumForDecrease { get; set; } [JsonPropertyName("ratingDecreaseCount")] public double? RatingDecreaseCount { get; set; } [JsonPropertyName("maxSumForIncreaseRatingPerOneSale")] - public float? MaxSumForIncreaseRatingPerOneSale { get; set; } + public double? MaxSumForIncreaseRatingPerOneSale { get; set; } [JsonPropertyName("maxSumForDecreaseRatingPerOneSale")] - public float? MaxSumForDecreaseRatingPerOneSale { get; set; } + public double? MaxSumForDecreaseRatingPerOneSale { get; set; } [JsonPropertyName("maxSumForRarity")] public MaxSumForRarity? MaxSumForRarity { get; set; } [JsonPropertyName("ChangePriceCoef")] - public float? ChangePriceCoef { get; set; } + public double? ChangePriceCoef { get; set; } [JsonPropertyName("ItemRestrictions")] public List? ItemRestrictions { get; set; } @@ -3930,11 +3948,12 @@ public record Overheat public record FenceSettings { + // MongoId [JsonPropertyName("FenceId")] public string? FenceIdentifier { get; set; } [JsonPropertyName("Levels")] - public Dictionary? Levels { get; set; } + public Dictionary? Levels { get; set; } [JsonPropertyName("paidExitStandingNumerator")] public double? PaidExitStandingNumerator { get; set; } diff --git a/Libraries/Core/Models/Eft/Common/LocationBase.cs b/Libraries/Core/Models/Eft/Common/LocationBase.cs index 5d5aaf86..b4b1ff91 100644 --- a/Libraries/Core/Models/Eft/Common/LocationBase.cs +++ b/Libraries/Core/Models/Eft/Common/LocationBase.cs @@ -1,5 +1,6 @@ using System.Text.Json.Serialization; using Core.Models.Common; +using Core.Models.Enums; using Core.Utils.Json; using Core.Utils.Json.Converters; @@ -273,8 +274,9 @@ public record LocationBase [JsonPropertyName("Events")] public LocationEvents? Events { get; set; } + // Checked in client [JsonPropertyName("exit_access_time")] - public double? ExitAccessTime { get; set; } + public int? ExitAccessTime { get; set; } [JsonPropertyName("ForceOnlineRaidInPVE")] public bool? ForceOnlineRaidInPVE { get; set; } @@ -613,7 +615,7 @@ public record ChancedEnemy public int? EnemyChance { get; set; } [JsonPropertyName("Role")] - public string? Role { get; set; } + public WildSpawnType? Role { get; set; } } public record MinMaxBot : MinMax @@ -745,10 +747,10 @@ public record Exit public double? ExfiltrationTimePVE { get; set; } [JsonPropertyName("ExfiltrationType")] - public string? ExfiltrationType { get; set; } + public ExfiltrationType? ExfiltrationType { get; set; } [JsonPropertyName("RequiredSlot")] - public string? RequiredSlot { get; set; } + public EquipmentSlots? RequiredSlot { get; set; } [JsonPropertyName("Id")] public string? Id { get; set; } @@ -759,6 +761,7 @@ public record Exit [JsonPropertyName("MaxTimePVE")] public double? MaxTimePVE { get; set; } + // Checked in client [JsonPropertyName("MinTime")] public double? MinTime { get; set; } @@ -775,7 +778,7 @@ public record Exit public string? _NameLower { get; set; } [JsonPropertyName("PassageRequirement")] - public string? PassageRequirement { get; set; } + public RequirementState? PassageRequirement { get; set; } [JsonPropertyName("PlayersCount")] public int? PlayersCount { get; set; } diff --git a/Libraries/Core/Models/Eft/Common/Tables/Item.cs b/Libraries/Core/Models/Eft/Common/Tables/Item.cs index b7b934e4..fc6e344a 100644 --- a/Libraries/Core/Models/Eft/Common/Tables/Item.cs +++ b/Libraries/Core/Models/Eft/Common/Tables/Item.cs @@ -5,9 +5,11 @@ namespace Core.Models.Eft.Common.Tables; public record Item { + // MongoId [JsonPropertyName("_id")] public string? Id { get; set; } + // MongoId [JsonPropertyName("_tpl")] public string? Template { get; set; } diff --git a/Libraries/Core/Models/Eft/Common/Tables/TemplateItem.cs b/Libraries/Core/Models/Eft/Common/Tables/TemplateItem.cs index 606fbd4b..7cfd72f7 100644 --- a/Libraries/Core/Models/Eft/Common/Tables/TemplateItem.cs +++ b/Libraries/Core/Models/Eft/Common/Tables/TemplateItem.cs @@ -581,8 +581,9 @@ public record Props [JsonPropertyName("BluntThroughput")] public double? BluntThroughput { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] [JsonPropertyName("ArmorMaterial")] - public string? ArmorMaterial { get; set; } + public ArmorMaterial? ArmorMaterial { get; set; } [JsonPropertyName("ArmorType")] public string? ArmorType { get; set; } diff --git a/Libraries/Core/Models/Eft/Common/Tables/Trader.cs b/Libraries/Core/Models/Eft/Common/Tables/Trader.cs index be0870aa..8223cdd6 100644 --- a/Libraries/Core/Models/Eft/Common/Tables/Trader.cs +++ b/Libraries/Core/Models/Eft/Common/Tables/Trader.cs @@ -68,7 +68,7 @@ public record TraderBase public double? GridHeight { get; set; } [JsonPropertyName("sell_modifier_for_prohibited_items")] - public decimal? SellModifierForProhibitedItems { get; set; } + public int? ProhibitedItemsSellModifier { get; set; } [JsonPropertyName("insurance")] public TraderInsurance? Insurance { get; set; } @@ -122,9 +122,11 @@ public record TraderBase public record ItemBuyData { + // MongoId [JsonPropertyName("category")] public List? Category { get; set; } + // MongoId [JsonPropertyName("id_list")] public List? IdList { get; set; } } @@ -134,20 +136,24 @@ public record TraderInsurance [JsonPropertyName("availability")] public bool? Availability { get; set; } + // MongoId [JsonPropertyName("excluded_category")] public List? ExcludedCategory { get; set; } + // Confirmed in client [JsonPropertyName("max_return_hour")] - public double? MaxReturnHour { get; set; } + public int? MaxReturnHour { get; set; } [JsonPropertyName("max_storage_time")] public double? MaxStorageTime { get; set; } + // Confirmed in client [JsonPropertyName("min_payment")] - public double? MinPayment { get; set; } + public int? MinPayment { get; set; } + // Confirmed in client [JsonPropertyName("min_return_hour")] - public double? MinReturnHour { get; set; } + public int? MinReturnHour { get; set; } } public record TraderLoyaltyLevel @@ -165,11 +171,12 @@ public record TraderLoyaltyLevel [JsonConverter(typeof(StringToNumberFactoryConverter))] public double? InsurancePriceCoefficient { get; set; } + // Chceked on client [JsonPropertyName("minLevel")] - public double? MinLevel { get; set; } + public int? MinLevel { get; set; } [JsonPropertyName("minSalesSum")] - public double? MinSalesSum { get; set; } + public long? MinSalesSum { get; set; } [JsonPropertyName("minStanding")] public double? MinStanding { get; set; } @@ -279,6 +286,7 @@ public record SuitRequirements [JsonPropertyName("profileLevel")] public double? ProfileLevel { get; set; } + // Checked in client [JsonPropertyName("standing")] public double? Standing { get; set; } diff --git a/Libraries/Core/Models/Enums/ArmorMaterial.cs b/Libraries/Core/Models/Enums/ArmorMaterial.cs new file mode 100644 index 00000000..e33a785f --- /dev/null +++ b/Libraries/Core/Models/Enums/ArmorMaterial.cs @@ -0,0 +1,14 @@ +namespace Core.Models.Enums +{ + public enum ArmorMaterial + { + UHMWPE, + Aramid, + Combined, + Titan, + Aluminium, + ArmoredSteel, + Ceramic, + Glass + } +} diff --git a/Libraries/Core/Models/Enums/ExfiltrationType.cs b/Libraries/Core/Models/Enums/ExfiltrationType.cs new file mode 100644 index 00000000..03d1fe55 --- /dev/null +++ b/Libraries/Core/Models/Enums/ExfiltrationType.cs @@ -0,0 +1,9 @@ +namespace Core.Models.Enums +{ + public enum ExfiltrationType + { + Individual, + SharedTimer, + Manual + } +} diff --git a/Libraries/Core/Models/Enums/RequirementState.cs b/Libraries/Core/Models/Enums/RequirementState.cs new file mode 100644 index 00000000..7b88c97a --- /dev/null +++ b/Libraries/Core/Models/Enums/RequirementState.cs @@ -0,0 +1,20 @@ +namespace Core.Models.Enums +{ + public enum RequirementState + { + None, + Empty, + TransferItem, + WorldEvent, + NotEmpty, + HasItem, + WearsItem, + EmptyOrSize, + SkillLevel, + Reference, + ScavCooperation, + Train, + Timer, + SecretTransferItem + } +} diff --git a/Libraries/Core/Services/FenceService.cs b/Libraries/Core/Services/FenceService.cs index 31f016b2..7d8c2daa 100644 --- a/Libraries/Core/Services/FenceService.cs +++ b/Libraries/Core/Services/FenceService.cs @@ -1542,25 +1542,25 @@ public class FenceService( if (pmcFenceInfo == null) { - return fenceSettings.Levels["0"]; + return fenceSettings.Levels[0]; } - var fenceLevels = fenceSettings.Levels.Keys.Select(int.Parse); + var fenceLevels = fenceSettings.Levels.Keys; var minLevel = fenceLevels.Min(); var maxLevel = fenceLevels.Max(); var pmcFenceLevel = Math.Floor((double)pmcFenceInfo.Standing); if (pmcFenceLevel < minLevel) { - return fenceSettings.Levels[minLevel.ToString()]; + return fenceSettings.Levels[minLevel]; } if (pmcFenceLevel > maxLevel) { - return fenceSettings.Levels[maxLevel.ToString()]; + return fenceSettings.Levels[maxLevel]; } - return fenceSettings.Levels[pmcFenceLevel.ToString()]; + return fenceSettings.Levels[pmcFenceLevel]; } /** diff --git a/Libraries/Core/Services/RaidTimeAdjustmentService.cs b/Libraries/Core/Services/RaidTimeAdjustmentService.cs index f533a8cf..de0df755 100644 --- a/Libraries/Core/Services/RaidTimeAdjustmentService.cs +++ b/Libraries/Core/Services/RaidTimeAdjustmentService.cs @@ -3,6 +3,7 @@ using Core.Helpers; using SptCommon.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.Game; +using Core.Models.Enums; using Core.Models.Spt.Config; using Core.Models.Spt.Location; using Core.Models.Utils; @@ -199,12 +200,12 @@ public class RaidTimeAdjustmentService( List result = []; // Adjust train exits only foreach (var exit in mapBase.Exits) { - if (exit.PassageRequirement != "Train") { + if (exit.PassageRequirement != RequirementState.Train) { continue; } // Prepare train adjustment object - ExtractChange exitChange = new ExtractChange { + var exitChange = new ExtractChange { Name = exit.Name, MinTime = null, MaxTime = null, diff --git a/Libraries/Core/Services/RepairService.cs b/Libraries/Core/Services/RepairService.cs index 7a848c72..603bb8b9 100644 --- a/Libraries/Core/Services/RepairService.cs +++ b/Libraries/Core/Services/RepairService.cs @@ -383,8 +383,8 @@ public class RepairService( var durabilityPointCostArmor = globalRepairSettings.DurabilityPointCostArmor; var repairArmorBonus = GetBonusMultiplierValue(BonusType.RepairArmorBonus, pmcData); var armorBonus = 1.0 - (repairArmorBonus - 1.0) - intellectPointReduction; - var materialType = itemToRepairDetails.Properties.ArmorMaterial ?? ""; - var armorMaterial = globalConfig.ArmorMaterials[materialType]; + var materialType = itemToRepairDetails.Properties.ArmorMaterial.Value; + globalConfig.ArmorMaterials.TryGetValue(materialType, out var armorMaterial); var destructability = 1 + armorMaterial.Destructibility; var armorClass = itemToRepairDetails.Properties.ArmorClass.Value; var armorClassDivisor = globals.Configuration.RepairSettings.ArmorClassDivisor; diff --git a/Libraries/Core/Utils/JsonUtil.cs b/Libraries/Core/Utils/JsonUtil.cs index bef9cb49..8b31657c 100644 --- a/Libraries/Core/Utils/JsonUtil.cs +++ b/Libraries/Core/Utils/JsonUtil.cs @@ -47,6 +47,9 @@ public class JsonUtil new EftEnumConverter(), new EftEnumConverter(), new EftEnumConverter(), + new EftEnumConverter(), + new EftEnumConverter(), + new EftEnumConverter(), new BaseInteractionRequestDataConverter() } };