LastResort
Member
LASTRESORT CHAT
iMessage-style immersive chat — a true drop-in replacement for the stock
chat resourceESX · QB-Core · QBox · ox_core · ND_Core · vRP · Standalone
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Launch price, through 31 August 2026 — then it goes back to €50.
Both figures are ex-VAT. One purchase, unlimited servers on your own account, lifetime updates.
Hidden link for visitors, to see
Log in or register now.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Showcase
What it is
Stock
chat is a log console with a text box on it. Every roleplay server ends up replacing it — usually with something that still needs the stock resource running underneath.This one is the resource. It declares
provide 'chat' and reimplements the stock chat ABI on both the client and the server, so every script on your server that already talks to chat keeps working with zero changes — while your players get proximity-routed speech, /me and /do floating above heads, live mugshot avatars, and 911 calls that arrive as cards with a Respond button that actually does something.No
ox_lib. No oxmysql. No framework. No database. Built for cities up to 128 slots.Features
- Eleven channels, and your own on top. IC, Local OOC, Global OOC, Radio, Adverts, Chirp, Darknet, 911 Dispatch, Staff, Announcements, System — plus department channels generated from your job list, per-recipient PM threads, and runtime channel registration. A custom channel is a table in
config/channels.lua. No code. - Speech that obeys distance. Say 8 m · whisper 2.5 m · low 4 m · shout 30 m, checked server-side against player positions rather than trusted from the client. Passengers in the same vehicle always hear each other, routing buckets are respected, and with
pma-voicethe typed IC range follows the player current voice range. - A real 3D layer.
/meand/dorender above heads as HTML bubbles with avatars and real emoji, with raycast occlusion (walls hide text), distance scaling and per-player stacking caps. Native GTA draw-text fallback included. - Live mugshot avatars and an identity layer. Real ped headshots with an LRU cache and a base64 mirror for players out of scope. Put a mask on and your chat identity becomes
Masked #742— decided by the server, written to a state bag, and logged against the real character, so a modified client cannot forge or drop an anonymous identity. - Emoji that fire real animations. Send an emoji on its own in IC and your character plays a matching emote through
rpemotes/scully/dpemotes, or a native fallback. Paired animations need an Accept from the nearest player through a consent card. - 911 calls are incidents, not lines of text.
/911and/311create a numbered card that walks NEW to RESPONDING to CLOSED and re-renders in place for every responder, with street, caller, unit list, and Respond / Acknowledge / Set Waypoint / Mark on map buttons — real GPS route, real labelled blip. - Cards for everything else. Adverts with Call / Save, native location shares,
/photoviascreenshot-basic,/try/roll/coin, live staff polls, announcements with a countdown. Your own resources can post custom cards with up to three buttons through theSendCardexport. - A moderation engine, not a swear filter. Mute, slowmode, cooldown, token-bucket rate limit, sanitize (control chars, zero-width, RTL override, zalgo), leetspeak-aware word filter, caps normalisation, emoji-flood clamp, link policy, cost — all server-side. Mutes follow the character, not the server id — reconnecting does not clear them.
/reportthat ends somewhere. A claimable card in the Staff channel; claiming opens a privateReport #nthread between the reporter and the staff member who took it.- The panel. Ctrl+F search across history, pinned messages, Edit and Unsend on your own recent lines — except IC and 911, which are permanent by design. A
/command palette that auto-discovers the commands actually registered on your server, permission-gated per player.@mentionautocomplete, emoji picker, speech-mode chip, and a closed-state ghost stream with a Dynamic-Island-style pill. - Per-player settings. Three themes, UI and text scale, density, timestamps, reduced motion, colourblind-safe accents, dyslexia-friendly font, streamer mode, read receipts, per-channel mutes, personal block list, sound volume. Lock any of them server-wide with
Config.lockedSettings. - Six languages ship. English, German, Spanish, French, Hungarian, Brazilian Portuguese.
Performance
The resource owns no permanent per-frame thread, and the server does no polling at all.
| State | Client (resmon) | What is running |
|---|---|---|
| Idle — panel closed | 0.00–0.02 ms | Five slow polls. No render thread exists. |
| Active — panel open + bubbles on screen | 0.04–0.12 ms | Projection thread at 30 Hz over 24 emitters or fewer, one occlusion ray per emitter per 500 ms. |
| Server | not a per-frame cost | Nothing ticks. Cost is per message. |
Reproduce it yourself:
resmon 1 in F8, read the idle figure with the chat closed, then press T, send a /me, and read the active figure while the bubble is on screen.It is a drop-in replacement — here is exactly what that means
provide 'chat' satisfies dependencies but does not alias runtime exports, so the shim answers the chat export lookups itself.Client:
chat:addMessage (table payload and the legacy author/text form), chat:addTemplate, chat:addSuggestion(s), chat:removeSuggestion, chat:addMode / removeMode, chat:clear, colour codes, console mirror.Server:
exports.chat:addMessage on the cfx signature, addTemplate, addSuggestion(s), removeSuggestion, clear, the chat:init replay, registerMessageHook with working cancel and updateMessage, registerMode / unregisterMode, the cancelable chatMessage event, the legacy _chat:messageEntered ingress, and chat_showJoins.The one thing people get wrong: stop or remove the stock
chat resource. Two providers of chat fight over the exports and render everything twice.Server-authoritative, on purpose
- ACE-gated channels gate delivery, not just visibility. Messages are never sent to a client that should not have them.
- Card actions carry single-use, per-recipient, expiring nonces minted at fan-out. Forged or replayed clicks are dropped server-side.
- Routing coordinates never ride along outside a proximity channel.
- Every net event that does real work has a per-source token budget.
- Webhook URLs belong in server-only convars —
set, neversetr.
Requirements and compatibility
Required: FXServer build 6116+ and OneSync. Both declared as hard dependencies in
fxmanifest.lua.Not required: a framework, a database,
ox_lib, oxmysql. screenshot-basic only if you want /photo.Frameworks — one purchase, all of them. Qbox, QB-Core, ESX, ox_core, ND_Core, vRP and standalone, auto-detected at boot. Every bridge call is
pcall-guarded. There is no separate ESX version to buy.Detected and optional:
pma-voice / saltychat, ps-dispatch / cd_dispatch, rpemotes-reborn / rpemotes / scully_emotemenu / dpemotes, loaf_headshot_base64 / MugShotBase64, illenium-appearance / fivem-appearance / esx_skin / qb-clothing, oxmysql.
Code:
-- two decisions worth making on day one
Config.profile = 'voice' -- 'text' widens every radius
Config.messageStyle = 'bubbles' -- 'plain' is the classic Name: message RP look
Try it on your own server
/lrcshowcase — a directed six-chapter story cut, about two and a half minutes, that starts with IC and nothing else and earns one more channel per chapter. /lrcshowcase trailer is the same cut tightened for video./lrcdemo — the stress test: ten characters in three conversation groups at 6, 12 and 18 m, all talking at once. You only hear the group you are standing in. The fastest way to prove the proximity gate to yourself.Specs
| Price | |
| Code is accessible | Partly — sold with FiveM asset escrow. Open and editable: all four config/*.lua files, all six locales/*.json packs, sql/*.sql, the theme stylesheet web/css/app.css, and the three documentation files. Encrypted: the Lua under client/, server/, shared/, bridge/ and the NUI JavaScript. |
| Subscription-based | No |
| Lines (approx.) | ~16,700 (10,682 Lua, 5,019 JavaScript, 890 CSS, 130 HTML) plus ~2,200 lines of JSON locale data |
| Requirements | FXServer 6116+, OneSync. No framework, no database, no ox_lib, no oxmysql. The stock chat resource must be stopped or removed. |
| Support | Yes — [email protected] |
FAQ
Yes. That is the point of the shim —
exports.chat:addMessage, chat:addSuggestion, registerMessageHook, the cancelable chatMessage event and the legacy ingress all work unchanged, on both sides. You do not edit a single other resource.No. Everything runs on in-memory history and JSONL file logs. The optional
oxmysql tier adds a message archive, a Chirp feed that survives a restart, offline PM delivery, stored report numbers and persistent mutes. The schema is applied at boot.Neither. Standalone is a fully supported, documented target. A framework adds character names and ids, jobs and on-duty state, staff groups, money for paid adverts, item checks for the darknet gate, and character age for the NEW badge.
Not in IC or 911 — those are permanent from the first second. Everywhere else there is an edit/unsend window, 120 seconds by default and yours to change, with an edited marker and a tombstone.
Yes.
web/css/app.css stays open under escrow_ignore and the whole UI runs on CSS variables. Three themes ship: vice, midnight, daylight.No. One package, one price, every bridge included.
Templates registered through
chat:addTemplate are reduced to a safe subset. Every message runs a server-side sanitise stage: control characters, zero-width characters and RTL overrides stripped, zalgo clamped, 500-character cap enforced server-side.━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
€50 → €12
One-time purchase, no subscription. Unlimited servers on your own Keymaster account, lifetime updates.
Discord:
Website:
Support: [email protected]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Hidden link for visitors, to see
Log in or register now.
One-time purchase, no subscription. Unlimited servers on your own Keymaster account, lifetime updates.
Discord:
Hidden link for visitors, to see
Log in or register now.
Website:
Hidden link for visitors, to see
Log in or register now.
Support: [email protected]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━