Skip to content
These docs reflect Contracts v0.6.0, the latest release. Older servers may differ.

Core concepts

Everything players interact with in Contracts is built from a handful of concepts. This page defines each one and shows how they nest. The pages that follow document every type in detail.

You author all of this with the web editor. The shapes below are what it reads and writes.

A single quest. A contract carries one or more objectives to complete and one or more rewards paid out when it is done and claimed. Unclaimed rewards are automatically granted at the next category rotation.

One goal inside a contract: kill an animal, craft an item, hack a crate. Each objective tracks progress, and what “one unit” means depends on its type (one kill, versus the amount of an item gathered). See Objectives.

An optional rule attached to an objective that restricts when progress counts, for example “only at night”, or “only with a specific weapon”. Conditions are a powerful way to add variety and nuance to objectives, and they can be layered in different combinations to create interesting scenarios of different difficulty. The same objective with no condition can be a lot harder when you add conditions.

What a contract pays out on completion.

A group of contracts that rotates on its own timer that you define in seconds (e.g: hourly, daily, weekly, or for the whole wipe, when disabled). You define which contracts belong to which categories and the category rotation keeps track of which contracts are currently active for a rotation.

A named, reusable list of Rust item or entity shortnames (or any string really). Many objective and condition fields accept a preset reference written as @presetName in place of a literal list. Define a list once (say, all the scientist types into one @scientists preset) and reference it from every contract that needs it. At runtime, the plugin swaps preset references for the actual lists of strings, so the contract authoring experience is easier and more efficient. You can even reference presets inside other presets! (Preset-ception!)

Category (rotates a pool of contracts on a timer)
└─ Contract
├─ Objective
| └─ Condition (optional)
└─ Reward
Preset (referenced as @name from objective/condition item & entity lists)

A category draws from a set of contracts. Each contract holds its objectives and rewards. Objectives may carry conditions. Presets sit to the side: they are shared lists that contracts point at rather than things a contract contains.