Table of Contents

Enum ItemOperationFailureReason

Namespace
FishMMO.Shared
Assembly
FishMMO.Shared.dll

Why the server refused an item operation. Deliberately coarse.

public enum ItemOperationFailureReason : byte

Fields

Rejected = 1

The server declined the operation. Covers every validation failure: bad slot, locked slot, dead character, out-of-range banker, destination full, item not where the client thought it was.

ServerBusy = 3

The server's async worker queue was saturated when the operation was persisted.

TREAT THIS AS "OUTCOME UNKNOWN", NOT AS "DID NOT HAPPEN". EnqueuePersistence never discards work — a false return means it ran on the thread-pool fallback instead of the worker — so the server-side mutation has in fact been committed and written. What is missing is only the acknowledgement. A client that reverts its optimistic change on this reason will disagree with the server until the next login; it should request a full container refresh instead. Paired with ServerBusyBroadcast.

Throttled = 2

The request arrived faster than the per-connection ingress debounce allows, or an identical request is still in flight. The client should release its pending lock and may retry.

Unknown = 0

No reason given.

Remarks

These are UI hints, not diagnostics. A reason must never let a client distinguish states it is not otherwise entitled to know about, so there is no "that slot is empty on the server" or "no such character" value here — everything the server declines for a validation reason collapses into Rejected.