> For the complete documentation index, see [llms.txt](https://mole-resource.gitbook.io/mole-resource-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mole-resource.gitbook.io/mole-resource-docs/scripts/tic-tac-toe/faq.md).

# FAQ

### Can I play against the computer?

Yes. Use **Play vs AI** (target) or press **H** at a board. Difficulty is configurable — see [Singleplayer (AI)](broken://pages/afc4f9c104601f6d45d7acbb8a6e7277c747fbda#singleplayer-ai).

### Is the AI beatable?

On `hard` it plays perfect minimax, so the best you can do is a draw. Set `Config.AI.Difficulty` to `easy` or `medium` for a winnable bot, or let players choose it themselves in-game (see next question).

### How do players change the AI difficulty themselves?

While `Config.AI.AllowDifficultyChoice = true` (default) and the board is still empty, the in-game bar (same one showing "Lock camera") has a **1: AI difficulty** entry — pressing **1** cycles Easy → Medium → Hard. It disappears the moment the first mark is placed, so difficulty can't be changed mid-match. See [Configuration](broken://pages/afc4f9c104601f6d45d7acbb8a6e7277c747fbda#letting-players-pick-the-difficulty).

### Which frameworks are supported?

`ox_inventory`, `qb-core` and `es_extended`. Set `Config.Framework` accordingly.

### Which notification / target systems?

Notifications: ESX, ox\_lib, mythic\_notify, QB-Core. Interaction: ox\_target, sleepless\_interact, or built-in proximity prompts (`Config.Target = "none"`).

### Do boards save after a restart?

Yes — placed boards persist in MySQL. Finished games are cleared, so boards always come back empty and playable. Static `Config.Boards` are memory-only and reset each restart.

### Can two boards exist at once?

Yes, unlimited. Each placed board is independent and stored separately.

### How many players per board?

Two (X and O) plus any number of spectators who see moves live (when `Config.Live = true`). A third player who tries to join a full board is refused.

### Can I make permanent public boards that can't be picked up?

Yes. Add them to `Config.Boards`. They can't be picked up and reset on every restart.

### Does it work inside apartments / instanced housing?

Yes. Boards are instance-aware. Integrate via the `SetPlayerInstance` export — see [Housing / Instances](broken://pages/59b37e5f89438c9567961bd7c94492a6072d664a).

### The item does nothing when I use it (ox)

Under ox, the item must trigger placement via its `client.event`. Add `client = { event = 'mr_tictactoe:PlaceBoard' }` to the item in `ox_inventory/data/items.lua`. See [Installation](broken://pages/f6c370fb99da79a08f9f7b0058cd60587b184743).

### How do I fix marks floating above / sinking into the board?

Tune `Config.MarkZOffset`, or use `/tictacbones x` to calibrate `Config.MarkOffset` live. See [Configuration](broken://pages/afc4f9c104601f6d45d7acbb8a6e7277c747fbda#gameplay--placement).

### The board is standing upright / sideways

Set `Config.BoardRotationFix` in `client.lua`. See [Configuration](broken://pages/afc4f9c104601f6d45d7acbb8a6e7277c747fbda#model-names--orientation-clientlua).

### Does the turn timer count down while I'm just looking around?

No. `Config.TurnTimeout` only counts while your camera is **locked** (Space) — i.e. while you can actually click a cell. Orbiting with the camera unlocked doesn't burn your move time. See [Configuration](broken://pages/afc4f9c104601f6d45d7acbb8a6e7277c747fbda#timeouts).

### Does the score / win count persist after a restart?

No — `X n - n O` is tracked in memory for the current session only. It resets when the board becomes fully empty (both players leave) and doesn't survive a server restart.

### How does the rematch work?

After a game ends, **hold R**. That only marks your side ready — the other player (or the AI automatically) also needs to hold R before the board resets and a new round starts. If the game is still in progress, holding R instead force-resets immediately (no confirmation needed).

### Nothing plays when a mark is placed

`html/place.ogg` is missing — the resource doesn't ship a default sound file. See [Installation](broken://pages/f6c370fb99da79a08f9f7b0058cd60587b184743#7-add-the-mark-placement-sound).
