namespace SVSim.EmulatedEntrypoint.Services; /// /// Single primitive for "something happened that mission/achievement progress should react to." /// Emitters at battle/story finish call this with the FULL list of event keys their event matches /// at all granularity levels (broad → narrow). Service does dumb exact-match against catalog. /// public interface IMissionProgressService { /// Viewer the event applies to. /// Broad-to-narrow keys. Example: a swordcraft ranked win /// passes ["ranked_win", "ranked_win:swordcraft"]. The order doesn't matter for counter /// increments (each key gets its own counter) but the order is the conventional one used /// by emitters for readability. /// Count delta per key (default 1). Task RecordEventAsync(long viewerId, IReadOnlyList eventKeys, int delta = 1, CancellationToken ct = default); }