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),
};
}