namespace NeonSprawl.Server.Game.Skills; /// Persisted totals of skill XP per player (NEO-38); level is derived, not stored. public interface IPlayerSkillProgressionStore { /// Keyed by catalog SkillDef.id; omitted skills imply XP 0. IReadOnlyDictionary GetXpTotals(string playerId); /// /// Adds to for . /// Returns false when the player cannot be written (e.g. in-memory store has no bucket; Postgres player missing from player_position). /// bool TryApplyXpDelta(string playerId, string skillId, int amount, out int previousXp, out int newXp); /// Sets absolute XP for one skill (NEO-48 dev fixture API). must be >= 0. bool TrySetSkillXpTotal(string playerId, string skillId, int xp); /// Sets absolute XP for multiple skills atomically (NEO-48 dev fixture API). bool TrySetSkillXpTotals(string playerId, IReadOnlyDictionary skillXpTotals); }