# Rules

Defines race rule enforcement and penalties for track limit violations.

This system can:

* Detect various track limit events (cuts, out-of-circuit, position gain, stopping)
* Apply penalties such as time penalties, money fines, return position requirements, or disqualification

***

### Global Settings

| Key       | Default | Description                                         |
| --------- | ------- | --------------------------------------------------- |
| `Enabled` | `true`  | Enables or disables the entire rule/penalty system. |

***

### Rules Data

All rules are configured inside `Config.Rules.Data` and keyed by a `TrackLimits.*` type.

```lua
Config.Rules.Data[TrackLimits.SOME_RULE] = { ... }
```

Each rule entry supports:

* `Enabled` *(bool)* → turn rule on/off
* Rule-specific configuration values *(timers, thresholds, etc.)*
* `Penalties` → list of penalties to apply when rule triggers

***

### Penalties

Penalties are processed in order and can include multiple types at once.

#### Penalty Types Used Here

| Type                      | Description                                                                             |
| ------------------------- | --------------------------------------------------------------------------------------- |
| `Penalty.TIME`            | Adds a time penalty (milliseconds).                                                     |
| `Penalty.MONEY`           | Removes money from the player (currency amount).                                        |
| `Penalty.RETURN_POSITION` | Forces player to give back a gained position within a time limit, otherwise disqualify. |

> ⚠️ Values are typically expressed in **milliseconds** for time-based penalties.

***

## Track Limits Rules

### 1) TrackLimits.CHECKPOINT\_CUT

Prevents players from leaving the circuit **too close to the next checkpoint**.

| Key                | Default | Description                                                                                |
| ------------------ | ------- | ------------------------------------------------------------------------------------------ |
| `Enabled`          | `true`  | Enables checkpoint-cut detection.                                                          |
| `LastOutOfCircuit` | `3000`  | How many ms before the next checkpoint the player is not allowed to go out of the circuit. |

#### Penalties (Default)

| Penalty Type   | Value  | Meaning                        |
| -------------- | ------ | ------------------------------ |
| `Penalty.TIME` | `2500` | Adds a **+2.5s** time penalty. |

✅ Optional example (commented in config): money penalty can be added instead or alongside time.

***

### 2) TrackLimits.POSITION\_CUT

Triggers when a player goes out of the circuit **and gains a position in the same sector** (between checkpoints).

| Key       | Default | Description                       |
| --------- | ------- | --------------------------------- |
| `Enabled` | `false` | Enables position-cut enforcement. |

#### Penalties (Default)

| Penalty Type              | Value   | Meaning                                                                 |
| ------------------------- | ------- | ----------------------------------------------------------------------- |
| `Penalty.TIME`            | `1000`  | Adds a **+1.0s** time penalty.                                          |
| `Penalty.RETURN_POSITION` | `30000` | Player must return the position within **30s**, otherwise disqualified. |

***

### 3) TrackLimits.OUT\_OF\_CIRCUIT

Triggers if player stays out of the circuit for too long.

| Key       | Default | Description                               |
| --------- | ------- | ----------------------------------------- |
| `Enabled` | `true`  | Enables out-of-circuit enforcement.       |
| `Time`    | `10000` | Max allowed out-of-circuit duration (ms). |

#### Penalties (Default)

| Penalty Type    | Value  | Meaning                        |
| --------------- | ------ | ------------------------------ |
| `Penalty.TIME`  | `5000` | Adds a **+5.0s** time penalty. |
| `Penalty.MONEY` | `1500` | Charges the player **$1500**.  |

***

### 4) TrackLimits.STOPPING\_VEHICLE

Triggers if player stops the vehicle on track (or in prohibited area) for too long.

| Key              | Default | Description                         |
| ---------------- | ------- | ----------------------------------- |
| `Enabled`        | `false` | Enables vehicle stopping rule.      |
| `WarningTime`    | `7500`  | Time (ms) before showing a warning. |
| `DisqualifyTime` | `10000` | Time (ms) before disqualification.  |

***

### Notes

* You can enable/disable each rule independently via its `Enabled` flag.
* Penalties can be combined (e.g., time + money).
* Use `Penalty.RETURN_POSITION` if you want competitive enforcement against gaining advantage.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.rcore.cz/paid-resources/rcore_formula/configuration/rules.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
