Vixen
caa30e12
csharp
public interface IInstanceGrain

One saved instance: its roster, its lockout and what is dead in it. Doc 27 § Shard kinds.

Read the guide page for this →

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