Skip to Content
Mizu InterfaceConfigurations

Configurations

⚙️
config.lua is the source of truth
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 = true

StackNotification 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' } }
successerrorwarninginfosystempoliceannounce

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.

Last updated on