public interface IInstanceGrainOne saved instance: its roster, its lockout and what is dead in it. Doc 27 § Shard kinds.
Remarks
The second of the three doc 27 left undeclared at L1, on the same rule: the feature belonged to doc 28 and doc 28 had not built it. G6 did.
⚠ A lockout is fleet-wide, which is the whole reason it is a grain and not a realm's table. Doc 28 says so directly — "a lockout one shard knew about is a lockout a player evades by zoning". There is exactly one place that decides whether somebody is saved to this instance, and it is here.
⚠ Progress belongs to the instance and not to each player. Somebody bound late inherits the bosses that are already down, because the alternative is a raid re-killing its first boss for every latecomer — which is both the exploit and the tedium the mechanic exists to prevent.
⚠ Binding cannot be undone, and there is deliberately no method for it. That is what a lockout is: a save you cannot leave. What ends one is the reset, which is an absolute boundary the caller's LockoutPolicy computes and hands over as Expires — never a timer from when somebody entered, or every player's reset drifts to wherever their first run fell.
Methods (5)
Task<InstanceRecord> Read()What it looks like.
Task<InstanceOutcome> Open(string instance, string difficulty, ImmutableArray<PlayerKey> roster, int capacity, DateTimeOffset now, DateTimeOffset expires)Opens it.
Task<InstanceOutcome> Bind(PlayerKey player, DateTimeOffset now)Saves somebody to it.
Task<InstanceOutcome> Defeat(string encounter, DateTimeOffset now)Records that something is dead.
Task<InstanceOutcome> Close()Ends it early — a disband, a reset, an operator.
Used by (1)
- InstanceGrainVixen.Live.Orchestrator