mri_Qmenu 📋

Sistema de menus para Qbox Framework com menu de jogador (F9) e menu admin (F10). Atua como hub central para gerenciar diversos resources da suite MRI Qbox.

Principais recursos

  • 👤 Menu do Jogador (F9) — Informações do jogador, job/gang, reputação, skills, waypoints.
  • 🔧 Menu Admin (F10) — Painel admin, tempo, clima, gerenciamento de resources.
  • 📑 Menu items dinâmicos — Adicione/remova items via exports em runtime.
  • 🗂️ Categorias de submenu — Organização por categoria no menu admin.
  • 🎨 Ícones animados — Suporte a FA icon animations (spin, pulse, fade, bounce).
  • 🌐 Internacionalização — Suporte a en.json e pt-br.json.
  • 🔌 Integração condicional — Itens aparecem apenas se o resource correspondente está rodando.

Instalação rápida

  1. Copie a pasta mri_Qmenu para a pasta de resources do servidor.
  2. Adicione ensure mri_Qmenu no server.cfg (após qbx_core, ox_lib).

Configuração (shared/config.lua) ⚙️

OpçãoPadrãoDescrição
MenuNameConstant"mri_Qmenu_"Prefixo para IDs de menu context.
ServerName"MRI QBOX"Nome do servidor no player menu.
DebugtrueHabilitar debug prints.
ImgUrlURL da logoImagem do logo nos headers.
IconAnimation"fade"Animação dos ícones FA.
AllowedAces{"admin", "mod"}Permissões ACE para menu admin.
PlayerMenuKeybind"F9"Tecla do menu do jogador.
AdminMenuKeybind"F10"Tecla do menu admin.

Menu do Jogador (F9)

Informações exibidas

  • Server ID
  • Citizen ID
  • Nome do jogador
  • Coins

Itens do menu

ItemCondiçãoAção
Manage JobBoss/recruiter (mri_Qjobsystem)Abre tablet de gerenciamento.
Manage GangBoss/recruiter (mri_Qjobsystem)Abre tablet de gerenciamento.
Reputationcw-rep rodandoMostra reputação.
Skillscw-rep rodandoMostra skills.
Waypointspickle_waypoints rodandoSubmenu de waypoints.

Menu Admin (F10)

Itens principais

ItemComandoDescrição
Admin Panel/admAbre painel admin externo.
Vehicle Custom/customsAbre vehicle customs (apenas no veículo).
TimeSubmenuGerenciamento de tempo.
Weather/weatherControle do clima.

Submenu Time

ItemComandoDescrição
Set Time/time <hh> <mm>Definir hora.
Timescale/timescale <ms>Velocidade do tempo.
Freeze/Unfreeze/freezetime <0/1>Congelar tempo.

Management Category (condicional)

ItemResource RequeridoComando
Doorsox_doorlock/doorlock
Blipsmri_Qblips/blip
Stashesmri_Qstashes/bau
NPCsmri_Qnpc/npc
Propsmri_Qobjects/objectspawner
Elevatorsmri_Qelevators/elevador
Postersmri_QdrawSubmenu (create/remove/dev)
Garagesrhd_garage/garagelist
Craftingmri_QcraftingSubmenu (create/edit)
Jobs/Groupsmri_QjobsystemSubmenu (create/list)
Spotlightsmri_QspotlightsSubmenu (add/remove)
Vinewoodmri_Qvinewood/vinewood

Exports (Client)

Gerenciamento de menus

ExportDescrição
AddManageMenu(item)Adicionar item ao menu admin.
RemoveManageMenu(item)Remover item do menu admin.
AddPlayerMenu(item)Adicionar item ao menu do jogador.
RemovePlayerMenu(item)Remover item do menu do jogador.
AddItemToMenu(menuName, item)Adicionar item a qualquer menu.
RemoveItemFromMenu(menuName, itemName)Remover item de qualquer menu.
AddCategory(category)Adicionar subcategoria.
RemoveCategory(name)Remover subcategoria.

Formato de item

{
    title = "Nome do Item",
    description = "Descrição",
    icon = "icon-name",           -- opcional
    iconAnimation = "fade",       -- opcional
    onSelectFunction = function(arg) -- callback
    onSelectArg = any,            -- opcional, passado ao callback
    category = "categoria"        -- opcional
}

Formato de categoria

{
    displayName = "Nome da Categoria",
    description = "Descrição",
    icon = "icon-name",
    iconAnimation = "fade",
    parentMenu = "admin"          -- "admin" ou "player"
}

Exemplo de uso

-- Adicionar item ao menu admin
exports['mri_Qmenu']:AddManageMenu({
    title = "Meu Resource",
    description = "Abrir meu resource",
    icon = "star",
    onSelectFunction = function()
        TriggerEvent('my_resource:open')
    end,
    category = "management"
})

Callbacks

CallbackDireçãoDescrição
mri_Qmenu:server:HasPermissionC→SVerificar permissão ACE.
AbrirMenuAdminAny→CAbre o menu admin via callback (client-side).

Utilitários

FunçãoDescrição
isBoss(playerData, org)Verificar se é boss (requer mri_Qjobsystem).
isRecruiter(playerData, org)Verificar se é recruiter (requer mri_Qjobsystem).
getPlayerOrgs(playerData)Extrair job/gang e grade do player data.
createMenuItem(item)Converter item config para formato ox_lib.
loadRuntimeMenuItems(finalMenu, runtimeMenu, categories)Merge de items dinâmicos com fixos.

Estrutura de arquivos 📁

mri_Qmenu/
├── fxmanifest.lua
├── shared/
│   └── config.lua               # Configurações
├── client/
│   ├── menu.lua                 # Sistema de menu (ox_lib context)
│   ├── keybinds.lua             # Registro de keybinds F9/F10
│   ├── exports.lua              # Exports de gerenciamento de menu
│   ├── utils.lua                # Utilitários
│   └── modules/
│       ├── player.lua           # Menu do jogador
│       ├── admin.lua            # Menu admin
│       ├── crafting.lua         # Submenu crafting
│       ├── jobs.lua             # Submenu jobs
│       ├── posters.lua          # Submenu posters
│       ├── spotlight.lua        # Submenu spotlights
│       ├── time.lua             # Submenu time
│       └── waypoint.lua         # Submenu waypoints
├── server/
│   └── admin.lua                # Callback de permissão
├── locales/
│   ├── en.json                  # Inglês
│   └── pt-br.json               # Português
└── README.md

Dependências

Obrigatórias

  • qbx_core — Framework principal, player data.

Opcionais (condicional)

ResourceFuncionalidade
ox_libMenus context, keybinds, notificações, dialogs.
ox_doorlockGerenciamento de portas.
mri_QblipsGerenciamento de blips.
mri_QstashesGerenciamento de stashes.
mri_QnpcGerenciamento de NPCs.
mri_QobjectsGerenciamento de props.
mri_QelevatorsGerenciamento de elevadores.
mri_QdrawGerenciamento de posters.
rhd_garageGerenciamento de garages.
mri_QcraftingGerenciamento de crafting tables.
mri_QjobsystemJob/gang management + boss checks.
mri_QspotlightsGerenciamento de spotlights.
mri_QvinewoodEdição de placa vinewood.
cw-repReputação e skills.
pickle_waypointsWaypoints/points of interest.

Observações importantes ⚠️

  • O resource não registra comandos próprios — atua como launcher para comandos de outros resources.
  • Items de menu aparecem condicionalmente baseado em GetResourceState().
  • Os exports permitem extensão em runtime por outros resources sem modificar o código do menu.
  • Ao adicionar items dinâmicos, items existentes com o mesmo título são removidos primeiro (evita duplicatas).
  • Categorias são geradas automaticamente quando items são adicionados com category definido.

Contribuições e melhorias são bem-vindas — abra PRs ou issues. 🙌