> For the complete documentation index, see [llms.txt](https://docs.cuxial.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cuxial.com/scripts/leisure/cuxial-domino/troubleshooting.md).

# Troubleshooting

Common Cuxial Domino problems, with their cause and fix.

The most frequent problems after installing Cuxial Domino, with the cause and the fix for each one.

<details>

<summary>The resource does not start</summary>

**Cause.** A dependency is missing or starts later. Cuxial Domino needs `ox_lib`, `oxmysql`, `cuxial_bridge` and `sleepless_interact`.

**Fix.** Start the dependencies first:

{% code title="server.cfg" %}

```cfg
ensure ox_lib
ensure oxmysql
ensure cuxial_bridge
ensure sleepless_interact
ensure cuxial_domino
```

{% endcode %}

</details>

<details>

<summary>/domino_admin does nothing or says access is denied</summary>

**Cause.** The player does not have the ACE `command.domino_admin`. The permission is granted to the principal in `admin.ace`, `group.admin` by default, and the player is not in it.

**Fix.** Add the player to that group, set `admin.ace` in `shared/config.lua` to the group your staff uses, or add the permission yourself:

{% code title="server.cfg" %}

```cfg
add_ace group.admin command.domino_admin allow
```

{% endcode %}

If you renamed the command in `admin.command`, use the new name after `command.`.

</details>

<details>

<summary>The tablet answers "Too close to another table"</summary>

**Cause.** There is another table within `table.minDistanceBetween` metres, 8 by default.

**Fix.** Move away, or lower `table.minDistanceBetween`.

</details>

<details>

<summary>The tablet will not delete a table</summary>

**Cause.** You are further than `table.deleteDistance` metres from it, 6 by default.

**Fix.** Use the teleport button of the table in the **Tables** tab, then delete it.

</details>

<details>

<summary>A table is created but nothing appears</summary>

**Cause.** The table model did not load. The `stream` folder is missing or incomplete, usually after a partial upload, or `table.models` names a model the server does not stream.

**Fix.** Copy the resource again from the original package and restart the server. If you changed `table.models`, check every model name.

</details>

<details>

<summary>There is no "Sit down" interaction on the chairs</summary>

**Cause.** One of these:

* `sleepless_interact` is not running.
* You are already seated at a table.
* You are further than `table.joinDistance` metres from the chair.
* The table model is a replacement without the bones `Chair_Base_01` to `Chair_Base_04`.
* On tables for fewer than four players, only some chairs are used: one on 1 player tables, the two opposite ones on 2 player tables.

**Fix.** Start `sleepless_interact` before `cuxial_domino` and walk up to a chair that is in use.

</details>

<details>

<summary>I sit down and no menu shows</summary>

**Cause.** The menu opens after the sit animation, `table.sitUiDelayMs` milliseconds later. If it never shows, the interface is not loading: the folder `web/dist` is missing or incomplete.

**Fix.** Make sure `web/dist/index.html` and the folder `web/dist/assets` exist inside the resource. If they do not, copy the resource again from the original package and restart the server.

</details>

<details>

<summary>The game will not start: "This table needs N player(s) to start"</summary>

**Cause.** Every seat of the table must be taken. A 4 player table does not start with three.

**Fix.** Fill the table, or create a table for fewer players. Only 1 player tables add an AI.

</details>

<details>

<summary>The bet is rejected</summary>

**Cause.** One of these:

* The amount is outside the limits. A table uses its own limits, kept inside `betting.min` and `betting.max`.
* The player does not have enough money in the account set in `betting.account`.

**Fix.** Check the limits shown in the table menu and the account in `shared/config.lua`. `'cash'` uses cash; any other value uses the bank.

</details>

<details>

<summary>A player is removed from the table when a bet is proposed</summary>

**Cause.** They did not accept within `betting.acceptSeconds`, 15 by default.

**Fix.** None needed. Raise `betting.acceptSeconds` to give more time.

</details>

<details>

<summary>A player is removed in the middle of a game</summary>

**Cause.** Their turn ran out `turn.afkStrikes` times in a row, 3 by default.

**Fix.** Raise `turn.seconds` or `turn.afkStrikes`. Playing or drawing resets the count.

</details>

<details>

<summary>The round was cancelled and the bets were returned</summary>

**Cause.** A player left or disconnected during the round and two or more remained. The round cannot go on without that seat.

**Fix.** None needed. It is intended. The remaining players can start again once the seat is taken.

</details>

<details>

<summary>The server restarted during a match and the bet was lost</summary>

**Cause.** It is not lost. Pots are saved in the database and returned to every player the next time the resource starts, even if they are offline.

**Fix.** Check the balance after the restart. If nothing came back, look for `oxmysql` errors in the server console and make sure the table `cuxial_domino_pots` exists.

</details>

<details>

<summary>Tables disappear after a restart</summary>

**Cause.** The table `cuxial_domino_tables` could not be created or written.

**Fix.** Check the server console for `oxmysql` errors when the resource starts. The database user needs permission to create tables.

</details>

<details>

<summary>1 player tables have no bet</summary>

**Cause.** Bets only exist on tables for two or more players.

**Fix.** None needed. It is intended.

</details>

<details>

<summary>Tiles float above the table or sink into it</summary>

**Cause.** The height of the playing surface does not match the table model. This happens with replacement models.

**Fix.** Set `table.surfaceOffset` to the height of the surface in metres, and adjust `layout.zOffset` and the `hand` block. `/domino_tune` lets you adjust the hand and the camera live and prints the values.

</details>

<details>

<summary>Tiles on the board show their pips the wrong way round</summary>

**Cause.** The tile models are oriented the other way.

**Fix.** Set `layout.propInverted = true`.

</details>

<details>

<summary>Texts appear in the wrong language</summary>

**Cause.** The script follows the `ox:locale` convar.

**Fix.** Set it in `server.cfg` and restart. `en` and `es` are included:

{% code title="server.cfg" %}

```cfg
setr ox:locale "en"
```

{% endcode %}

</details>

<details>

<summary>The tile sound is not heard</summary>

**Cause.** `sfx.enabled` is `false`, the player is further than `sfx.maxDistance` metres from the table, or `sfx.sounds` names a sound that is not in the resource.

**Fix.** Review the `sfx` block. Keep the default names unless you add your own sounds.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.cuxial.com/scripts/leisure/cuxial-domino/troubleshooting.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
