> For the complete documentation index, see [llms.txt](https://doc.var-fivem.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.var-fivem.com/chess/configuration/exports.md).

# Exports

{% hint style="info" %}
The server exports are callable server-side only, the client exports client-side only.
{% endhint %}

### Server

#### GetMatch

`exports['var_chess']:GetMatch(tableId)`

Returns a safe snapshot of the match at `tableId`, or `nil` if the id is invalid.

```lua
-- { id, status, seats = { white, black }, turn, bet = { white, black }, winner, reason }
-- seats: a server id (number) | 'AI' | false.  turn: 'w' | 'b' | nil.  status: idle | waiting | playing | over.
local match = exports['var_chess']:GetMatch(1)
```

#### GetPlayerMatch

`exports['var_chess']:GetPlayerMatch(serverId)`

Returns the table a player is seated at, or `nil`.

```lua
-- { tableId, color = 'white' | 'black', status }
local seat = exports['var_chess']:GetPlayerMatch(source)
```

#### IsPlayerInGame

`exports['var_chess']:IsPlayerInGame(serverId)`

Returns `true` only if the player is seated in a match that is currently `playing`.

```lua
if exports['var_chess']:IsPlayerInGame(source) then
    -- block teleport / job actions while a wagered game is live
end
```

#### GetActiveMatches

`exports['var_chess']:GetActiveMatches()`

Returns a list of matches in progress.

```lua
-- { { tableId = 1, status = 'playing' }, ... }
local active = exports['var_chess']:GetActiveMatches()
```

#### StartAIGame

`exports['var_chess']:StartAIGame(serverId, tableId, side, level, bet)`

Seats the player against the AI and starts the game. `side` is `'white'`, `'black'` or `nil` (defaults to white), `level` is a `Config.AI.levels` id, `bet` is sanitized server-side. Returns `true` on success, `false` if the table is busy, the AI is disabled or the player cannot afford the wager.

```lua
local ok = exports['var_chess']:StartAIGame(source, 1, 'white', 'hard', 500)
```

#### ForceEndMatch

`exports['var_chess']:ForceEndMatch(tableId, winnerColor)`

Ends an in-progress match. `winnerColor` is `'white'`, `'black'` or `nil` for a draw. Settlement (payout / refund) runs as usual. Returns `true` if a playing match was ended.

```lua
exports['var_chess']:ForceEndMatch(1, 'white')
```

### Client

#### IsSeated

`exports['var_chess']:IsSeated()` returns `true` if the local player is seated at a board.

```lua
local seated = exports['var_chess']:IsSeated()
```

#### IsInGame

`exports['var_chess']:IsInGame()` returns `true` if the local player is seated in a match that is `playing`.

```lua
if exports['var_chess']:IsInGame() then return end
```

#### GetCurrentTable

`exports['var_chess']:GetCurrentTable()` returns the local player's current table id, or `nil`.

```lua
local tableId = exports['var_chess']:GetCurrentTable()
```

#### GetColor

`exports['var_chess']:GetColor()` returns `'white'`, `'black'` or `nil`.

```lua
local color = exports['var_chess']:GetColor()
```

#### OpenLobby

`exports['var_chess']:OpenLobby(tableId)` opens the chess menu for a nearby (spawned) table. Returns `false` if the table is not in range.

```lua
exports['var_chess']:OpenLobby(1)
```
