Skip to main content

PlayerFaultInfo

Why an invocation failed, in the only vocabulary a player may be shown: a stable code, whose problem it is, and whether repeating the identical call could succeed. It carries no message, no engine name and no internal detail by design — blame attribution is the platform's job and presentation is the game's.

IT CARRIES NO TIMING, AND NOTHING THAT NEEDS TIMING ARRIVES HERE. A refusal that can tell you how long to wait — RATE_LIMITED above all — is THROWN, with extensions.retryAfterMs, and never returned in band on a result. So retryable: true here means "try again", not "try again after N milliseconds", and a client with nothing but this object is right to use its own backoff. expression-fault.classifier.spec.ts holds that split rather than leaving it to how the code happens to be arranged.

type PlayerFaultInfo {
code: PlayerFaultCode!
blame: UserCodeFaultBlame!
retryable: Boolean!
}

Fields

PlayerFaultInfo.code ● PlayerFaultCode! non-null enum

A stable, enumerated reason. Branch on this rather than on any text.

PlayerFaultInfo.blame ● UserCodeFaultBlame! non-null enum

Whose problem this is. The one question a game cannot answer for itself.

PlayerFaultInfo.retryable ● Boolean! non-null scalar

True when repeating the identical call could succeed with nothing else changing. About the caller's options, not about how long a fix takes: an open breaker is retryable because it closes itself, while a spent plan allowance is not.

Member Of

GmInvokeResult object