From 04ffbce106f37661dac3b2bbfc9bf7235cab07f3 Mon Sep 17 00:00:00 2001 From: Chomp Date: Mon, 14 Jul 2025 14:57:01 +0100 Subject: [PATCH] Improved `InsuranceController.Cost` handling of duplicate Ids + made use of MongoIDs --- .../Controllers/InsuranceController.cs | 33 +++++++++++-------- .../Insurance/GetInsuranceCostRequestData.cs | 5 +-- .../Insurance/GetInsuranceCostResponseData.cs | 4 ++- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs index 50cec711..a21ecbf7 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InsuranceController.cs @@ -886,7 +886,7 @@ public class InsuranceController( /// /// request object /// Session/Player id - /// GetInsuranceCostResponseData object to send to client + /// Dictionary keyed by trader with every item price from each trader public GetInsuranceCostResponseData Cost(GetInsuranceCostRequestData request, MongoId sessionId) { var response = new GetInsuranceCostResponseData(); @@ -897,13 +897,13 @@ public class InsuranceController( var inventoryItemsHash = pmcData.Inventory.Items.ToDictionary(item => item.Id); // Loop over each trader in request - foreach (var trader in request.Traders ?? []) + foreach (var traderId in request.Traders ?? []) { - var items = new Dictionary(); + var traderItems = new Dictionary(); foreach (var itemId in request.Items ?? []) { - // Ensure hash has item in it - if (!inventoryItemsHash.ContainsKey(itemId)) + // Ensure inventory has item in it + if (!inventoryItemsHash.TryGetValue(itemId, out var inventoryItem)) { if (logger.IsLogEnabled(LogLevel.Debug)) { @@ -915,17 +915,24 @@ public class InsuranceController( continue; } - items.TryAdd( - inventoryItemsHash[itemId].Template, - insuranceService.GetRoublePriceToInsureItemWithTrader( - pmcData, - inventoryItemsHash[itemId], - trader + if ( + !traderItems.TryAdd( + inventoryItem.Template, + insuranceService.GetRoublePriceToInsureItemWithTrader( + pmcData, + inventoryItem, + traderId + ) ) - ); + ) + { + logger.Warning( + $"Unable to add item id: {itemId.ToString()} to client/insurance/items/list/cost response, already exists" + ); + } } - response.Add(trader, items); + response.Add(traderId, traderItems); } return response; diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostRequestData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostRequestData.cs index e26cbd24..68fcde49 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostRequestData.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostRequestData.cs @@ -1,4 +1,5 @@ using System.Text.Json.Serialization; +using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Utils; namespace SPTarkov.Server.Core.Models.Eft.Insurance; @@ -9,8 +10,8 @@ public record GetInsuranceCostRequestData : IRequestData public Dictionary? ExtensionData { get; set; } [JsonPropertyName("traders")] - public List? Traders { get; set; } + public List? Traders { get; set; } [JsonPropertyName("items")] - public List? Items { get; set; } + public List? Items { get; set; } } diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostResponseData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostResponseData.cs index 863202c1..a95d6017 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostResponseData.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Insurance/GetInsuranceCostResponseData.cs @@ -1,3 +1,5 @@ +using SPTarkov.Server.Core.Models.Common; + namespace SPTarkov.Server.Core.Models.Eft.Insurance; -public class GetInsuranceCostResponseData : Dictionary> { } +public class GetInsuranceCostResponseData : Dictionary> { }