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