Configurations
mizu_interface ships UI modules, announcements, radial compatibility, and the custom chat system from one config file.Locale
Config.Locale = 'en' -- 'en', 'de', 'es', 'fr', 'pl', 'pt', 'tr'Module Toggles
Every major subsystem can be disabled individually. If a module is turned off, its exports stay callable but return early without rendering UI.
Config.Modules = {
Notifications = true,
ProgressBar = true,
TextUI = true,
SkillCheck = true,
ContextMenu = true,
RadialMenu = true,
InputDialog = true,
NPCDialog = true,
ActionPanel = true,
Announce = true,
Chat = true
}Notifications
Config.Position = 'left-center' -- top-right, right-center, bottom-right, top-left, left-center, bottom-left
Config.DefaultDuration = 5000
Config.DefaultAnimation = 'slide-right' -- slide-right, fade-in, scale-up, bounce-in, flip-in
Config.DefaultSound = true
Config.NotificationSoundVolume = 1.0
Config.DefaultShowProgress = true
Config.StackNotification = trueStackNotification merges identical bursts into one card with a counter badge, which is especially useful for warning spam or repeated system events.
Progress Bar
Config.ProgressBar = {
DefaultDuration = 5000,
DefaultType = 'info',
DefaultIcon = 'spinner fa-spin',
CancelKeys = {
73,
200,
177,
167
}
}The export still supports both naming styles for control locks, for example movement and disableMovement.
Announcements
Config.Announce = {
Command = 'announce',
Duration = 10000,
Type = 'announce',
ShowProgress = true,
AllowedGroups = {
'admin',
'god',
'superadmin'
},
EnableTxAdminOverride = true,
Logging = {
Type = 'Both',
DiscordWebhook = '',
FiveManageToken = ''
}
}When EnableTxAdminOverride is enabled, txAdmin announcements, restart warnings, player warnings, kicks, and direct messages are restyled through mizu_interface automatically.
Theme Types
Reusable type keys drive color and icon inheritance across notifications, progress bars, TextUI entries, and radial/context items.
Config.Types = {
['success'] = { color = '#2ecc71', icon = 'fas fa-check-circle' },
['error'] = { color = '#e74c3c', icon = 'fas fa-exclamation-circle' },
['warning'] = { color = '#f1c40f', icon = 'fas fa-exclamation-triangle' },
['info'] = { color = '#3498db', icon = 'fas fa-info-circle' },
['system'] = { color = '#9b59b6', icon = 'fas fa-cogs' },
['police'] = { color = '#0984e3', icon = 'fas fa-shield-alt' },
['announce'] = { color = '#e30909', icon = 'fas fa-bullhorn' }
}Text UI
Config.TextUI = {
DefaultTheme = 'split',
Position = 'middle-left',
Timeout = 250,
DefaultColor = '#ffffff',
DefaultStyle = 'Key Separated'
}The dead-man switch behavior is unchanged: the prompt hides automatically if it is not refreshed within Timeout milliseconds.
Context Menu
Config.ContextMenu = {
DefaultTheme = 'classic',
DefaultPosition = 'right',
DefaultColor = '#3498db'
}Radial Menu
Config.RadialMenu = {
Enabled = true,
Hold = true,
Command = 'radialmenu',
Keybind = 'X',
Center = {
icon = 'user-gear',
title = 'ACTIONS'
},
Items = {
{
icon = 'car',
title = 'VEHICLE',
type = 'info',
items = {
{
icon = 'key',
title = 'KEY',
type = 'success',
color = '#00ffff',
action = 'mizu_interface:client:ToggleVehicleLock',
actionType = 'client'
}
}
},
{
icon = 'box',
title = 'INVENTORY',
type = 'success',
action = 'qb-inventory:client:openInventory',
actionType = 'client'
}
}
}Each slice supports icon, title, type, color, action, actionType, and nested items. The resource also provides compatibility stubs for qb-radialmenu, qbx_radialmenu, and esx_radialmenu style calls.
Input Dialog
Config.InputDialog = {
DefaultColor = '#3498db',
DefaultIcon = 'keyboard',
DefaultHeader = 'Input'
}NPC Dialog
Config.NPCDialog = {
DefaultIcon = 'user',
DefaultName = 'Unknown',
DefaultColor = '#3498db',
InteractionMethod = 'both' -- 'keyboard', 'mouse', or 'both'
}The current config no longer exposes a separate DefaultJob field. Job text falls back from the dialog payload or localization values.
Action Panel
Config.ActionPanel = {
DefaultTitle = 'Confirmation',
DefaultIcon = 'triangle-exclamation',
DefaultColor = '#3498db',
DefaultPosition = 'top-center',
DefaultDuration = 5000
}Default body text and button labels come from localization and per-call payload data, not dedicated config keys.
Chat
The integrated chat replacement is configured entirely under Config.Chat.
Config.Chat = {
Position = 'top-left',
FontSize = 13,
HideAfter = 15000,
InputHideAfter = 5000,
MaxMessages = 150,
InputMaxLength = 200,
Sound = true,
Timestamps = true,
TypingIndicator = true,
SupportGroups = { 'admin', 'god', 'superadmin' },
AdminGroups = { 'admin', 'god', 'superadmin' },
NameStyle = 'character',
MaskServerVerify = true
}Rate Limit
Config.Chat.RateLimit = {
Enabled = true,
Channels = {
['local'] = { max = 4, perMs = 1500 },
['ooc'] = { max = 4, perMs = 1500 },
['me'] = { max = 3, perMs = 2000 },
['do'] = { max = 3, perMs = 2000 },
['pm'] = { max = 5, perMs = 1500 },
['team'] = { max = 5, perMs = 1500 },
['global']= { max = 3, perMs = 2000 }
},
NotifyOnDrop = true
}Logging
Config.Chat.Logging = {
Type = 'Both',
DiscordWebhook = '',
FiveManageToken = '',
DiscordWebhookConvar = 'mizu_chat_discord_webhook',
FiveManageTokenConvar = 'mizu_chat_fivemanage_token',
Batching = {
Enabled = true,
BatchInterval = 7000,
BatchSize = 10,
BatchSizeFm = 25
},
PerChannel = {
['global'] = true,
['local'] = true,
['ooc'] = true,
['me'] = true,
['do'] = true,
['team'] = true,
['admin'] = true,
['dispatch'] = true,
['pm'] = true,
['server'] = true,
['automessage'] = true,
['ADMIN'] = true
}
}ConVars take priority over the legacy token fields when both are set.
Auto Messages
Config.Chat.AutoMessages = {
Enabled = true,
Interval = 600,
Channel = 'server',
Sender = 'SERVER',
Color = '#3498db',
SkipIfEmpty = true,
Messages = {
'Welcome to the server! Use /help for a list of commands.',
'Discord: discord.gg/example',
'Rules: visit our website for the full ruleset.'
}
}Channels
Config.Chat.Channels = {
['global'] = { enabled = false, label = 'GLOBAL', color = '#3498db', icon = 'globe', command = 'global' },
['local'] = { enabled = true, label = 'LOCAL', color = '#2ecc71', icon = 'location-dot', command = 'local', radius = 15.0, respectMask = true, overhead = false },
['ooc'] = { enabled = false, label = 'OOC', color = '#95a5a6', icon = 'comment-slash', command = 'ooc', radius = 20.0, respectMask = false, overhead = false },
['me'] = { enabled = true, label = 'ME', color = '#f39c12', icon = 'theater-masks', command = 'me', radius = 15.0, respectMask = true, overhead = true },
['do'] = { enabled = true, label = 'DO', color = '#e67e22', icon = 'eye', command = 'do', radius = 15.0, respectMask = true, overhead = true },
['team'] = { enabled = true, label = 'SUPPORT', color = '#1abc9c', icon = 'users', command = 'team' },
['admin'] = { enabled = true, label = 'ADMIN', color = '#9b59b6', icon = 'shield-halved', command = 'ad' },
['pm'] = { enabled = true, label = 'PM', color = '#e74c3c', icon = 'envelope', command = 'pm', aliases = { 'dm' }, respectMask = true },
['server'] = { enabled = true, label = 'SERVER', color = '#e30909', icon = 'fas fa-bullhorn', command = 'server', banner = true },
['dispatch'] = { enabled = true, label = 'DISPATCH', color = '#e67e22', icon = 'triangle-exclamation', command = 'dp', aliases = { 'dispatch' }, banner = true },
['job'] = { enabled = true, label = 'JOB', color = '#1abc9c', icon = 'briefcase', command = 'job', respectMask = false }
}Mask Anonymity and Dispatch
Config.Chat.MaskAnonymity = {
Enabled = true,
UnknownName = 'Unknown',
UnknownColor = '#7F8C8D',
Drawables = {},
Variants = {}
}
Config.Chat.DispatchAllowedJobs = {
['police'] = { minGrade = 2, color = '#0984e3', badge = 'shield-halved', title = 'POLICE DISPATCH' },
['ambulance'] = { minGrade = 0, color = '#e74c3c', badge = 'truck-medical', title = 'EMS DISPATCH' }
}An empty Drawables list means any equipped mask drawable counts as anonymous.
Job Colors, Proximity, and Persistence
Config.Chat.JobChannelDefaultColor = '#1abc9c'
Config.Chat.JobChannelColors = {
['police'] = '#0984e3',
['ambulance'] = '#e74c3c',
['mechanic'] = '#f39c12',
['taxi'] = '#f1c40f'
}
Config.Chat.JobChannelBlacklist = {
['unemployed'] = true
}
Config.Chat.OverheadMessages = {
Enabled = true,
MaxDistance = 5.0,
RequireLOS = true,
Duration = 8000,
FadeOut = 350,
MaxConcurrent = 12
}
Config.Chat.Proximity = {
Local = 75.0,
OOC = 20.0,
ME = 15.0,
DO = 15.0,
Typing = 30.0,
TypingMax = 30.0
}
Config.Chat.AnnounceBannerPosition = 'top-center'
Config.Chat.DB = {
Enabled = true,
Table = 'mizu_chat_settings',
SaveDebounce = 1500
}
Config.Chat.DefaultUserSettings = {
fontSize = 13,
position = 'top-left',
visibilityMode = 'input',
accent = '#3498db',
overhead = true,
typingDots = true,
muteAllSounds = false,
typingSound = true,
streamerMode = false
}If you do not want chat persistence, set Config.Chat.DB.Enabled = false and the UI will stop saving per-player preferences.