> For the complete documentation index, see [llms.txt](https://qsk-development.gitbook.io/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qsk-development.gitbook.io/untitled/qsk-fps-boost.md).

# QSK FPS BOOST

## qsk\_fpsmenu

A configurable FiveM client performance menu. It is designed to run on Qbox, QBCore, ESX, and standalone servers without requiring any framework resource. The menu changes graphics, ambient population, and other local client settings; it does not grant jobs, items, money, or permissions.

### Requirements

* A current FiveM server artifact.
* No framework, database, inventory, or progress-bar dependency.

Framework detection is informational. Set `Config.Framework` to `auto`, `qbox`, `qbcore`, `esx`, or `standalone`. In `auto` mode the server checks which core resource is started and falls back to standalone.

### Install

1. Copy the complete `qsk_fpsmenu` folder into a resource directory, for example `resources/[qsk]/qsk_fpsmenu`.
2. Review `config/config.lua` and select the server language and permitted options.
3. Add this after the resource folder is available in `server.cfg`:

   ```cfg
   ensure qsk_fpsmenu
   ```
4. Restart the server or run `refresh` and `ensure qsk_fpsmenu` in the server console.
5. Players open the menu with **F11** by default or run `/fpsMenu`.

The resource stores each player's preferences in that player's local FiveM KVP storage. Preferences survive reconnects and resource/server restarts on that same client. They are not stored in SQL and do not follow the player to a different computer.

### Folder layout

```
qsk_fpsmenu/
├── client/
│   └── client.lua       Client UI callbacks and native settings
├── config/
│   └── config.lua      
├── locales/
│   ├── en.lua
│   ├── pl.lua
│   ├── de.lua
│   └── es.lua           
├── server/
│   └── server.lua       Policy validation and request rate limit
├── web/
│   └── index.html       NUI menu
├── docs.md
└── fxmanifest.lua
```

### Configuration

Edit `config/config.lua`, then restart the resource for changes to take effect.

#### General

* `Config.Enabled`: master server switch for the menu and its features.
* `Config.Framework`: `auto`, `qbox`, `qbcore`, `esx`, or `standalone`.
* `Config.Locale`: `en`, `pl`, `de`, or `es`.
* `Config.Command`: chat command name, without `/`.
* `Config.OpenKey`: default key mapping (F11 by default; players may rebind it in FiveM key bindings).

#### Allow or hide features

Set a feature to `false` in `Config.Features` to hide its control and prevent the client callback from accepting changes for it. Setting `turnOpt = false` disables and hides the optimization controls. Setting `presets = false` removes the presets tab. `Config.Enabled = false` turns the whole menu off.

Feature keys are:

```
presets, turnOpt, optPeds, optVehicles, optScenarios, pedDensity,
trafficDensity, parkedDensity, optObjects, optShadows, noWeather,
farVehLights, lodDistance, shadowDistance, vehicleDistance, waveStrength,
noParticles, clearEvents, noBrokenGlass, clearPedDirt, reduceDecals,
reduceTracks, reduceAmbientSpawns, disableDispatch, suppressEvents,
stopFires, particleClean
```

`Config.Presets` controls individual preset buttons: `ultra`, `high`, `tierBalanced` (shown as Balanced), `medium`, `low`, `potato`, `minimal`, `quality`, `modeBalanced` (Balanced mode), and `performance`.

#### Slider bounds

`Config.SliderLimits` sets the minimum and maximum values published by the server and enforced by the resource's UI/client callback. For example, to keep the menu's traffic setting at or above 40% and lock the cleanup interval to 15 seconds:

```lua
SliderLimits = {
    trafficDensity = { min = 40, max = 100 },
    particleClean = { min = 15000, max = 15000 },
}
```

Keep the other defaults from the distributed config when editing the table. `min == max` locks a slider at that value. Values outside the supported native range are clamped, and reversed bounds are corrected by the server. Slider values are percentages except `particleClean`, which is milliseconds (100–60000 ms). These are client graphics controls, so a modified client can bypass local restrictions; they do not impose server-authoritative gameplay limits.

#### Security settings

* `MaxPolicyRequestsPerMinute` limits each player's requests for the public settings policy.
* `LogRateLimitedRequests` writes at most one rate-limit message per player per minute.

The server accepts no client-supplied jobs, money, items, or gameplay rewards. The only network request asks for the server's public menu policy; its input is ignored, checked against the connected player, and rate limited. This keeps the resource's server event surface small. Since the graphics and population natives run on the player's own client, this menu cannot prevent a modified client from changing its own visuals or bypassing local settings. Use a separate server-side anti-cheat for gameplay enforcement.

### Settings and behavior

* Population: ambient peds, traffic, parked vehicles, ambient scenarios, and density sliders.
* Visual detail: object LOD, shadow controls, distant vehicle visibility/lights, weather and wind, and ocean wave scale.
* Cleanup and ambient effects: particles, decals, broken glass, ped dirt, fire cleanup, ambient spawns, dispatch, shocking events, and tire/foot tracks.
* Preset profiles: Ultra, High, Balanced, Medium, Low, Potato, and Minimal. Performance modes include Quality, Balanced, and Performance.
* The FPS figure is measured while the menu is open; it is not a server-wide or persistent benchmark.

Some settings use FiveM/GTA natives that affect local ambient presentation and can vary by game build. Disabling dispatch here affects base-game dispatch only; it does not disable server police resources or change server jobs.

### Localization

Locale files return UI text through `QskFpsLocales`. Select one with `Config.Locale`. To add a language, create `locales/<code>.lua`, copy the structure from `locales/en.lua`, translate all labels, group names, setting descriptions, and preset descriptions, then add the locale code to the allowlists in `client/client.lua` and `server/server.lua`.

### Troubleshooting

* **Menu does not open:** confirm `ensure qsk_fpsmenu`, check the resource name, and try `/fpsMenu`; check that `Config.Enabled = true`.
* **A control or preset is missing:** check its `Config.Features` or `Config.Presets` entry and restart the resource.
* **A slider cannot move:** it may be intentionally locked by setting its configured minimum equal to its maximum.
* **Locale displays English:** check the locale code spelling and confirm the matching file is included by `locales/*.lua`.
* **Core detection says standalone:** this is informational and does not prevent the menu from working. Set `Config.Framework` explicitly if desired.
