Configuration (config.lua)
All MBT Emote Menu settings live in config.lua. There are no in-game admin panels — every option is set here and applied on resource start.
Quick Overview
| Section | Purpose |
|---|---|
MBT.Language / MBT.Debug | Locale selection and debug logging |
MBT.RpemotesResource | rpemotes resource name (auto-detected by default) |
MBT.Menu | Keybind, command, layout, position, auto-close, remember state, watermark, native menu override |
MBT.Features | Toggle favorites, recent emotes, quick bind, emote wheel, shared popup, preview ped, placement, social features |
MBT.EmoteWheel | Wheel key, slot count, remove key |
MBT.Trending | Server-wide trending emote spotlight |
MBT.OpenJoin | Anonymous group emote join settings |
MBT.AntiSpam | Cooldown between emote plays |
MBT.BannedEmotes | Server-side emote blocklist |
MBT.Categories | Category visibility and display order |
MBT.Theme | Six hex color tokens sent to the NUI |
MBT.Ecosystem | Integration with other MBT scripts |
MBT.JobPermissions | Per-emote job restrictions with framework auto-detection |
MBT.Notification | Notification function wrapper (ox_lib, ESX, QB, etc.) |
Global Settings
MBT.Language
Type: string — Default: 'en'
Locale used for all UI text. Supported values: 'en', 'it', 'es', 'fr', 'de', 'pt'. Additional locales can be added by creating a file in the locales/ folder.
MBT.Debug
Type: boolean — Default: false
Enables verbose console logging for development. Set to false on production servers.
MBT.RpemotesResource
Type: string | nil — Default: nil
The resource name of the rpemotes engine to integrate with. When nil, auto-detection tries rpemotes-reborn, then rpemotes, then rp-emotes. Force a specific name only if auto-detection fails.
Menu Settings (MBT.Menu)
| Key | Type | Default | Description |
|---|---|---|---|
Keybind | string | 'F4' | Key that opens/closes the MBT emote menu |
Command | string | 'mbt_emotes' | Chat command alternative to the keybind |
Layout | string | 'cinematic' | UI layout: 'cinematic' or 'default' |
Position | string | 'right' | Panel side: 'left' or 'right' |
CloseOnPlay | boolean | true | Close the menu automatically when an emote starts playing |
RememberState | boolean | true | Remember scroll position, active tab, and filters after an emote plays. Resets on ESC/X |
Watermark | boolean | true | Show the MBT watermark in the top corner of the UI |
OverrideNativeMenu | boolean | true | Suppress rpemotes' NativeUI menu and redirect its key to MBT's menu |
Features (MBT.Features)
| Key | Type | Default | Description |
|---|---|---|---|
Favorites | boolean | true | Enable the favourites tab and star button per emote |
RecentEmotes | boolean | true | Track and display recently played emotes in the Recent tab |
MaxRecent | number | 12 | Maximum number of recent emotes to keep |
QuickBind | boolean | true | Allow drag-to-bind from the menu onto numpad slots (NUM1–NUM6) |
SharedPopup | boolean | true | Show an inline popup when a shared emote invitation is received |
PreviewPed | boolean | true | Render an animated ped preview when clicking the eye icon on an emote card |
EmoteWheel | boolean | true | Enable the hold-to-peek emote wheel |
EmotePlacement | boolean | true | Enable the "Place in world" 📍 button on emote cards |
OpenJoin | boolean | true | Enable anonymous proximity group emotes (Open Join) |
WhatsThat | boolean | false | Show a bubble above nearby emoting players with the emote name and a copy hotkey |
AdultEmotes | boolean | false | Include emotes flagged as AdultAnimation in rpemotes-reborn |
AbusableEmotes | boolean | false | Include walk styles flagged as abusable (movement exploits) |
Emote Wheel (MBT.EmoteWheel)
| Key | Type | Default | Description |
|---|---|---|---|
Key | string | 'K' | Hold this key to open the emote wheel |
Slots | number | 8 | Number of slots on the wheel (maximum 8) |
RemoveKey | string | 'X' | Press while the wheel is open to remove the emote from the current slot |
Trending (MBT.Trending)
Controls the server-wide "Trending this week" hero card shown at the top of the browse view.
| Key | Type | Default | Description |
|---|---|---|---|
Enabled | boolean | true | Show the trending emote spotlight |
WindowDays | number | 7 | Rolling window length in days |
MinPlays | number | 10 | Minimum play count within the window for an emote to qualify |
SaveIntervalMinutes | number | 10 | How often play counts are flushed to KVP |
Trending counts are aggregate — the server records how many times each emote was played across all players. No per-player tracking is stored.
Open Join (MBT.OpenJoin)
Controls the anonymous group emote join mechanic. When you start an eligible emote, nearby players receive a pill invitation to join.
| Key | Type | Default | Description |
|---|---|---|---|
Enabled | boolean | true | Master toggle for Open Join |
Radius | number | 8.0 | Distance in meters for eligible recipients |
MaxRecipients | number | 30 | Maximum players to notify — prevents storm in crowded areas |
AnnounceCooldownMs | number | 3000 | Minimum milliseconds between announcements from the same player |
PillKey | string | 'Y' | Key shown in the pill for joining |
Categories | table | { 'Dances', 'Shared', ... } | Emote categories that trigger Open Join broadcasts |
Players can opt out at any time with /mbt_openjoin off and opt back in with /mbt_openjoin on. The preference persists across sessions.
Anti-Spam (MBT.AntiSpam)
| Key | Type | Default | Description |
|---|---|---|---|
CooldownMs | number | 250 | Minimum milliseconds between consecutive emote plays on the same client |
Banned Emotes (MBT.BannedEmotes)
A list of emote names to filter out server-side. Matching is case-insensitive.
MBT.BannedEmotes = {
'twerk',
'abusableWalk',
}Banned emotes are removed from the catalog before it is sent to clients, and are also blocked from Open Join broadcasts. This does not affect rpemotes' own /e <name> chat command — enforcing that requires restricting the rpemotes ACE permission upstream.
Categories (MBT.Categories)
An ordered array of category definitions. Each entry has:
| Field | Type | Description |
|---|---|---|
type | string | Internal rpemotes category key — do not change |
label | string | Display name shown in the tab bar |
icon | string | Lucide icon name rendered next to the label |
visible | boolean | Set to false to hide the category from the menu |
Default order: Emotes → Props → Dances → Shared → Expressions → Walk Styles → Animals → Emojis.
Reorder entries to change the tab order. Hidden categories are still accessible via search.
Theme (MBT.Theme)
Six hex color tokens (without #) customizing the entire NUI. All values are sent to the React UI at resource start and applied globally — the menu, emote wheel, and on-screen pills all share the same accent.
| Key | Default | Purpose |
|---|---|---|
Accent | '00e676' | Primary accent color (buttons, highlights, active states, pill glow) |
Background | '0C0E14' | Full-screen background |
Card | '141720' | Panel and card surface color |
Text | 'E8E8EE' | Primary text |
SubText | '6B7280' | Secondary/muted text |
Border | '1A1D26' | Subtle border and divider color |
MBT Ecosystem Integration (MBT.Ecosystem)
| Key | Type | Default | Description |
|---|---|---|---|
MetaClothes | boolean | false | Set to true if mbt_meta_clothes v2 is installed |
WearableProps | boolean | false | Set to true if mbt_wearable_props is installed |
When enabled, the UI can surface relevant clothing/prop context while browsing emotes.
Job Permissions (MBT.JobPermissions)
| Key | Type | Default | Description |
|---|---|---|---|
Enabled | boolean | true | Master toggle — disable to allow all players access to all emotes |
Framework | string | 'auto' | Framework for job lookups: 'auto', 'esx', 'qbox', 'qbcore', or 'standalone' |
Emotes | table | {} | Map of emote name → allowed job list |
'auto' detection order: ESX → QBox → QBCore → standalone.
Example:
MBT.JobPermissions = {
Enabled = true,
Framework = 'auto',
Emotes = {
['handcuff'] = { 'police', 'sheriff' },
['mechanic'] = { 'mechanic', 'bennys' },
},
}Players without a matching job will see the emote greyed out with a lock icon.
Notification (MBT.Notification)
A callback function called whenever MBT Emote Menu needs to send a player notification. data contains title, description, type, and duration. Uncomment or write your own integration:
MBT.Notification = function(data)
-- ox_lib
exports.ox_lib:notify({ title = data.title, description = data.description, type = data.type })
-- ESX
-- ESX.ShowNotification(data.description)
-- QBCore
-- QBCore.Functions.Notify(data.description, 'primary')
end