Release
Everything players do at your dealerships can now be posted to your Discord as an embed — every sale, test drive, hire, staff change, till movement, restock run, admin edit and refusal, 47 kinds in all, each routed to the channel you choose, with the player, the car and its picture, the plate and the amount, in your server's language. An owned shop can have a Discord channel of its own, set by its owner. The player's own HUD is hidden while they are in a showroom, a window or a test drive, and every notification the script shows over the game can go through the notification system your server already uses — qs-interface, okokNotify, Brutal, Wasabi, Lation UI, your framework's own and more. Also: a rebuilt framing panel for the catalogue photo tool, no more white flashes while photographing, and a counter salesperson that no longer stands sunk into the floor.
config/server/webhooks.lua is new from top to bottom. Copy your webhook URLs out of your old one, replace the file, and paste them back into Config.Webhooks — the channel names are the same as before (default, sales, activity, missions, admin, security). The webhook's name and avatar moved to Config.LogOptions. Then run qs-dealership:testlogs in the server console: every channel with a URL gets a test message, and the console says which ones Discord accepted.
config/shared/config.lua has four new blocks — Config.Notify, Config.Hud, Config.WeatherSync and Config.HideHud, right after Config.Screenshot. If you have edited that file, copy the four blocks across from the new one rather than replacing it. All three integrations are detected automatically; the boot summary prints what was picked.
After replacing the files, run refresh before ensure qs-dealership (or restart the server). The resource's file list changed, and a plain restart keeps the old one.
Nothing to do. No migration.
Config.Logs lists every kind of log with its channel: change the channel, put a webhook URL in its place to give it a channel of its own, or set enabled = false.
An owned shop's own channel is set from the shop's Overview → Discord logs in the player's window (any rank with the settings right), or by an admin on the creator's Trading tab. Only Discord webhook addresses are accepted, and the address is never shown back to the player.
qb-hud, ps-hud and qbx_hud have no way for another script to hide them, so they are hidden by marking the player logged out on their own screen only for the moment — the server still sees them logged in. If something on your server must keep running through a test drive, set testDrive = false in Config.HideHud.
Weather sync (Renewed-Weathersync, qb-weathersync, cd_easytime, vSync) is paused only for the admin using the photo tool, and only while it is open.
More than sixty files. Replace every file in the resource, then put back what you had edited: your webhook URLs in config/server/webhooks.lua, your config/shared/config.lua plus the four new blocks, and anything else under config/, client/custom/ or server/custom/. client/custom/hud/, client/custom/notify/ and client/custom/weather/ are new folders, nothing to merge.
47 kinds of log — sales, buybacks, finance, hires, test drives, sales-desk deals, the till, staff, furniture, forecourt cars, restock runs, admin edits and security refusals — each with the player and their identifiers, the car and its picture, the plate, the amount and the dealership, in your server's language.
Config.Logs sends any kind to any channel, to a webhook URL of its own, or switches it off. Five channels ship ready: sales, activity, missions, admin and security, all falling back to default.
An owner pastes a webhook in their shop's Overview (or an admin on the Trading tab) and that shop's sales, staff, till, test drives and runs are posted there as well. Only Discord webhook addresses are accepted, and the address is never shown back to the player.
qs-dealership:testlogs sends a test message to each channel with a URL and says which ones Discord accepted. Owners have a Send a test button for their shop's channel.
Logs are queued per webhook and sent ten to a message about once a second, waiting when Discord asks to slow down instead of being lost. Nothing waits on Discord: a sale goes through the same whether the webhook works or not.
The player's own HUD is hidden in a showroom (including the arrival and the hand-over), either window, a test drive, the creator, the furnishing tools and the photo tool, and comes back the moment none is in use. Config.HideHud switches each moment.
Detected automatically. qb-hud, ps-hud and qbx_hud expose no way to hide them, so they are hidden by marking the player logged out on their own screen only for the moment; read the update notes before relying on it.
ox_lib, qs-interface, okokNotify, Brutal Notify, Wasabi Notify, Lation UI, mythic_notify, t-notify, QBCore's, Qbox's or ESX's own, or the script's own toasts. Falls back to ox_lib if the chosen one fails.
Dragging the scene orbits the car and the wheel moves closer or further. One-click angles (front ¾ either side, front, side, rear ¾, high ¾), − / + buttons for fine steps, thirds guides on G (never in the photographs), H hides the panel. Sliders no longer jump back under your hand, the camera stops where you let go, and ESC or a click no longer reaches the game.
The studio's own hour and weather fought the server's weather sync for the clock several times a second. Renewed-Weathersync, qb-weathersync, cd_easytime and vSync are now paused for the session and handed back when it ends (Config.WeatherSync, detected automatically).
A salesperson placed with Click on map, Current location or My character is raised to stand on the ground instead of being buried to the waist.
Logs used to be English sentences sorted into six categories; every log is now its own kind with the same fields every time. Old channel names keep working.
Notifications the server raises over the game used to go through ox_lib whatever the server ran.
client/custom/hud/custom.lua and client/custom/notify/custom.lua are ready to fill in with one function each.
A dealership copied out as JSON leaves its Discord webhook behind, so pasting it on another server cannot post as the shop.
docs/13-discord-logs.md covers channels, routing, what each embed shows, a shop's own channel and what to check when nothing arrives. The compatibility page covers notifications, the HUD and weather sync.