diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs index 18f1975cc..d7abf6a5b 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/InventoryCallbacks.cs @@ -379,6 +379,7 @@ public ItemEventRouterResponse SaveDialogueState( ItemEventRouterResponse output ) { - throw new NotImplementedException(); + inventoryController.SetDialogueProgress(pmcData, request, sessionId, output); + return output; } } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs index 028256cef..930995e2e 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/InventoryController.cs @@ -136,6 +136,19 @@ public void PinOrLock(PmcData pmcData, PinOrLockItemRequest request, MongoId ses itemToAdjust.Upd.PinLockState = request.State; } + /// + /// Handle /client/game/profile/items/moving SaveDialogueState + /// + /// Player's PMC profile + /// + /// Session/Player id + /// + public void SetDialogueProgress(PmcData pmcData, SaveDialogueStateRequest request, MongoId sessionId, ItemEventRouterResponse output) + { + var fullProfile = profileHelper.GetFullProfile(sessionId); + fullProfile.DialogueProgress = request.DialogueProgress; + } + /// /// Handle /client/game/profile/items/moving SetFavoriteItems /// diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Inventory/SaveDialogueStateRequest.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Inventory/SaveDialogueStateRequest.cs index f1fe70348..007279d02 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Inventory/SaveDialogueStateRequest.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Inventory/SaveDialogueStateRequest.cs @@ -5,17 +5,17 @@ namespace SPTarkov.Server.Core.Models.Eft.Inventory; public record SaveDialogueStateRequest : InventoryBaseActionRequestData { [JsonPropertyName("nodePathTraveled")] - public List NodePathTraveled { get; set; } + public List? DialogueProgress { get; set; } } public class NodePathTraveled { [JsonPropertyName("traderId")] - public string TraderId { get; set; } + public string? TraderId { get; set; } [JsonPropertyName("dialogueId")] - public string DialogueId { get; set; } + public string? DialogueId { get; set; } [JsonPropertyName("nodeId")] - public string NodeId { get; set; } + public string? NodeId { get; set; } } diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs index dca285099..fd0d3064c 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Profile/SptProfile.cs @@ -2,6 +2,7 @@ using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Common.Tables; +using SPTarkov.Server.Core.Models.Eft.Inventory; using SPTarkov.Server.Core.Models.Eft.Prestige; using SPTarkov.Server.Core.Models.Enums; using SPTarkov.Server.Core.Models.Spt.Dialog; @@ -58,6 +59,12 @@ public record SptProfile /// [JsonPropertyName("customisationUnlocks")] public List? CustomisationUnlocks { get; set; } + + /// + /// Stores the most recently sent dialog progress result from the client + /// + [JsonPropertyName("dialogueProgress")] + public List? DialogueProgress { get; set; } } public record TraderPurchaseData diff --git a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs index 2d3a3d397..1b3fa7046 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/ItemEvents/InventoryItemEventRouter.cs @@ -42,6 +42,7 @@ protected override List GetHandledRoutes() new(ItemEventActions.SET_FAVORITE_ITEMS, false), new(ItemEventActions.QUEST_FAIL, false), new(ItemEventActions.PIN_LOCK, false), + new(ItemEventActions.SAVE_DIALOGUE_STATE, false), }; }