How Integrations Work#
Sitting needs no money, no items and no job, so nothing in Sit Everywhere depends on a framework. Every third-party resource is reached through a small bridge file, and each one stands down on its own when that resource is missing.
Layer | Supported | Without it |
|---|---|---|
Framework |
| Runs standalone. Only the player name and identifier in the console logs change. |
Third eye |
|
|
Notifications |
| The game's own notification feed. |
Floating text |
| The game's own 3D text, with the bound key drawn as a glyph. |
HUD |
| The HUD stays on screen while the settings panel is open. |
Database |
| Settings are kept in memory until the next restart. |
Library |
| Required. The only one. |
Every optional integration degrades silently. A missing resource makes its feature stand down, not throw. The console lines at boot are the place that tells you an integration is absent before a player does.
Frameworks#
The framework is detected in config/config.lua, the moment the resource starts, from what is already running:
-- config/config.lua
local frameworks = {
['es_extended'] = 'esx',
['qb-core'] = 'qb',
['qbx_core'] = 'qb',
}
Config.Framework = DependencyCheck(frameworks) or 'standalone'Renamed your core? Add its folder name on the left with the bridge it uses on the right — ['my-core'] = 'qb' — and restart. Qbox runs on the QBCore bridge, which also copes with recent qbx_core builds that no longer hand out a core object.
The framework is only ever asked who a player is, for the console logs and the panel's audit line:
Framework | Identifier | Name |
|---|---|---|
ESX |
| The character name |
QBCore / Qbox |
| First and last name from |
Standalone |
| The FiveM name |
If a bridge fails to load, the console names the file and sitting keeps working; only the identity falls back to the FiveM one. The bridges live in custom/esx/, custom/qb/ and custom/standalone/.
The Third Eye#
General → Target system decides where the options go. Detect automatically uses whichever of ox_target, qb-target or qtarget is running; naming one forces it; None (commands only) registers nothing and leaves /sit, /lay and the floating prompts. Run only one target resource at a time.
Option | Label | Range |
|---|---|---|
On a seat or bed model | Sit / Lie down | Interaction → Interaction distance (2.5 m) |
On a prop with a preset seat | Sit down / Lie down, plus Choose pose | Preset seats → Preset reach (2.0 m) |
Around a seat of an enabled location | Sit down / Lie down | Preset seats → Preset reach |
The icons are Interaction → Sit icon and Lie down icon, any Font Awesome class. With ox_target, Preset seats → Zone markers draws a small marker in the middle of each location zone. On qb-target and qtarget, the zones are named qss:<place>:<zone> and removed again when the resource stops.
The target resource, the preset options and the location zones are read once, a few seconds after start. Changing any of them, or starting a target resource later, needs a restart of Sit Everywhere.
Notifications#
Every message — "That seat is already taken.", "You are too far away." — goes through one function, Notification(msg, type) in custom/client.lua. Out of the box it uses qs-interface when it runs, ox_lib otherwise, and the game's own feed as a last resort, with General → Notification title as the sender.
To route them through your own notification resource, replace the body of that function. type is always one of info, success, warning or error:
-- custom/client.lua
function Notification(msg, type)
if msg == nil or msg == '' then return end
-- your notification resource's own export, for example:
exports['okokNotify']:Alert('Sit', msg, 5000, type)
endFloating Text#
The prompts over preset seats are drawn by DrawText3D in the same file. With qs-textui running, it draws them with its own key cap; without it, the game's 3D text is used with the player's bound key shown as a glyph. qs-textui is picked up even if it starts after Sit Everywhere, and dropped again if it stops.
Hiding the HUD#
While /sitconfig is open, the player's HUD is hidden and given back when it closes. qs-interface is supported out of the box; any other HUD is one line in client/custom/hud.lua:
-- client/custom/hud.lua
QSS.HudResources = {
['qs-interface'] = function(visible)
exports['qs-interface']:ToggleHud(visible)
end,
-- your HUD, with its own show/hide export
['my-hud'] = function(visible)
exports['my-hud']:SetVisible(visible)
end,
}Only resources that are running are called, so listing a HUD you do not have is harmless.
Languages#
Sit Everywhere ships 41 languages. Pick one in General → Language: it applies to every player straight away, the menus included, with no restart.
Region | Languages |
|---|---|
Europe |
|
Asia, Middle East and Africa |
|
Every text lives in locales/<code>.json. To change any wording — a notification, a third-eye label, a key binding's name — edit it in your language's file and restart the resource. A key missing from a translation falls back to English, and a missing English one shows the key itself, so a gap is never blank.
{
"siteverywhere": {
"target": {
"sit": "Sit",
"lay": "Lie down",
"preset_sit": "Sit down",
"preset_lay": "Lie down",
"pose": "Choose pose"
},
"notify": {
"seat_occupied": "That seat is already taken.",
"too_far": "You are too far away."
}
}
}Each section of the file opens with a _note that says where its texts appear and how long they may be. The command words themselves are not translated here: they are set in /sitconfig → Commands.
Animation Pictures#
Every pose has a picture in web/images/animations/, named after the pose's id. Drop in your own file with the same name to replace one — a .png wins over the others, then .svg, .webp and .jpg, so you never have to delete the original. Restart the resource afterwards.
Id | Pose |
|---|---|
| Normal sit · Stupor sit |
| Relaxed sit · Couch slouch |
| Casual sit · Upright sit |
| Lounge sit |
| Picnic (male) · Picnic (female) |
| Nightclub sit · Cross-legged sit · Jetski lean |
| Lie on left side · Lie on right side · Sunbathe · Nap |
The card crops the picture to fit, so square or landscape images both work. A pose with no picture at all shows its category icon instead.



