namespace NeonSprawl.Server.Game.Skills; /// /// NEO-42: E3.M2 craft/refine success should call so XP uses the same path as /// POST …/skill-progression. Outcome is ignored on success paths (mirror gather interact); use /// directly when callers need deny envelopes. /// public static class RefineActivitySkillXpGrant { /// Applies one refine + activity grant if the catalog allowlist permits it. /// Pass a normalized (e.g. route-trimmed), matching InteractionApi gather hook callers. public static void GrantOnSuccessfulCraftOrRefine( string playerId, ISkillDefinitionRegistry registry, IPlayerSkillProgressionStore xpStore, ISkillLevelCurve levelCurve) { _ = SkillProgressionGrantOperations.TryApplyGrant( playerId, RefineSkillXpConstants.RefineSkillId, RefineSkillXpConstants.ActivityXpPerCraftRefineCompletion, RefineSkillXpConstants.ActivitySourceKind, registry, xpStore, levelCurve); } }