namespace NeonSprawl.Server.Game.Quests; /// Immutable per-player quest progress snapshot (NEO-116; module contract QuestStepState). public sealed class QuestStepState( string playerId, string questId, QuestProgressStatus status, int currentStepIndex, IReadOnlyDictionary objectiveCounters, DateTimeOffset? completedAt) { public string PlayerId { get; } = playerId; public string QuestId { get; } = questId; public QuestProgressStatus Status { get; } = status; public int CurrentStepIndex { get; } = currentStepIndex; /// Objective id → accumulated count for the step only. public IReadOnlyDictionary ObjectiveCounters { get; } = objectiveCounters; public DateTimeOffset? CompletedAt { get; } = completedAt; }