Coleção de módulos da suíte MRI: menus F9/F10, VIP, comandos de admin e módulos de
combate, veículos, interação, inventário e mundo. Cada módulo liga, desliga e se configura
pelo painel /mriqbox (ou pela aba no mri_Qadmin), e a mudança vale na hora, sem reiniciar.
- Dependências
- Instalação
- Permissões (ACE)
- Painel de configuração
- Módulos
- Comandos
- Teclas
- Menus F9 e F10
- Staff
- VIP
- Veículos: cadastro e estoque
- Editor do inventário
- Integrações
- Entrypoints para outros recursos
- Estrutura de arquivos
| Recurso | Obrigatório | Observação |
|---|---|---|
ox_lib |
Sim | Menus, comandos, callbacks, keybinds, principals e o /uiconfig do tema |
qbx_core |
Sim | QBX.PlayerData, jobs, gangs e metadata (VIP); o fork MRI, com a API de veículos em runtime |
oxmysql |
Sim | Lista de personagens do painel de VIP e a tabela vehicles_data |
ox_inventory |
Sim | Peso, drop de itens, craft arrastando, carregar nos braços, pegar do chão |
ox_target |
Sim | Lixeiras, entrar pela porta, bebedouros, pegar do chão |
mri_Qbossmenu |
Para os painéis | Jogadores próximos no painel de VIP, o /menu <job> e "Gerenciar Emprego" e "Gerenciar Gangue" no F9. Atende pelos nomes antigos qbx_management e mri_Qjobsystem, que também servem. Sem ele, as opções de gerenciar só não aparecem |
mri_Qadmin |
Não | Abas "MRI Qbox" (painel) e "Veículos" |
mri_Qvinewood |
Não | Entrada "Vinewood" no menu de gerenciamento |
Os menus F9/F10 disparam comandos de outros recursos (doorlock, blip, bau, npc,
objectspawner, elevador, garagelist, craft:create, open_jobs, spotlight,
weather, adm...). Cada entrada só funciona se o recurso daquele comando estiver instalado.
- Coloque a pasta
mri_Qboxemresources/(na base MRI, emresources/[mri]). - No
server.cfg, inicie depois deox_lib,qbx_core,oxmysql,ox_inventoryeox_target:ensure mri_Qbox - Libere a ACE de admin (ver Permissões).
- Abra o
/mriqboxe ligue os módulos que quiser. Os valores ficam emdata/config.json. - Não há SQL para importar: o VIP fica na metadata do personagem
(
players.metadata), que oqbx_corejá cria, e a tabelavehicles_dataé criada sozinha. - Vindo do mri_Qvehicles: tire ele do servidor (ver Vindo do mri_Qvehicles).
| Permissão | Libera |
|---|---|
mri_Qbox.admin ou command |
O painel /mriqbox e a aba no mri_Qadmin |
mri_Qvehicles.admin, mri_Qbox.admin ou command |
A tela de veículos (aba "Veículos" no mri_Qadmin) |
group.admin |
Comandos de admin (/item, /vipadm...) e os eventos do painel de VIP |
add_ace group.admin command allow
add_principal identifier.fivem:1 group.admin
O recurso também concede principals sozinho: ao logar, quem tem metadata.vip recebe o
principal com o nome do tier. Não é preciso mexer no server.cfg pra cada admin.
/mriqbox abre o painel (ou a aba "MRI Qbox" no mri_Qadmin). ESC fecha.
- Lateral: categorias (Menus, Admin, Combate, Veículos, Interação, Inventário, Mundo, Som) e busca por nome ou descrição.
- Lista: cada módulo com descrição e o liga/desliga na própria linha. Módulo que faz parte da base mostra o selo "Base" no lugar do liga/desliga: fica sempre ligado.
- Detalhe: as opções do módulo (número com unidade, texto, seleção, listas, tabela chave e valor, JSON), "Restaurar padrão", "Descartar" e "Salvar". O módulo Veículos abre a tela de cadastro inteira, com "Módulos" pra voltar.
Tudo vale na hora pra todos os jogadores:
- módulo de loop (recuo, drift, roda solta...) passa a obedecer na volta seguinte;
- módulo que registra coisa em outro recurso (olhinho, gancho do inventário, item de menu, textura) registra ao ligar e remove ao desligar;
- comando e tecla continuam registrados (o FiveM não remove), mas desligados avisam "Comando desligado no painel do mri_Qbox" ou não fazem nada.
O servidor valida cada valor pelo tipo da opção antes de gravar em data/config.json.
O tema do painel segue a suíte: cor de destaque e fundo pelas convars mri:color e
mri:backgroundColor, e o resto (dark/glass, opacidade, raio, fonte) pelo /uiconfig.
Ligado ou desligado de fábrica entre parênteses.
| Módulo | O que faz |
|---|---|
| Menus F9 e F10 (ligado) | Menu do jogador e de administração. Os exports pra outros recursos continuam valendo com ele desligado |
| VIP (desligado) | Tiers com ACE, peso do inventário e salário periódico. Opções: intervalo do salário, conta, símbolo da moeda e os tiers (JSON) |
| Comandos de admin (ligado) | /item, /tuning, /menu_admin, /customs, /raycast, /menu |
| Atalhos de comando (ligado) | Outro nome pra um comando que já existe, editado no painel (atalho -> comando). Já vem com /tpto -> /tp, /tpway -> /tpm e /god -> /revive, pra quem vem do creative ou vRP. Vale a permissão do comando original; atalho com nome de comando que já existe ou que aponta pra outro atalho é ignorado, com aviso no console |
| Passaporte (desligado) | Número fixo de cada personagem, como o passaporte do creative e do vRP: é o id da tabela players, que não muda quando o jogador reconecta e não é reaproveitado. Fica no statebag passport do jogador (a HUD e outros scripts leem dali). Opção Primeiro passaporte (1): personagens novos começam nele e os números abaixo ficam reservados pra dar ou vender. O botão Gerenciar (e a aba Passaportes do mri_Qadmin, com o módulo ligado) abre a lista de personagens com o passaporte de cada um, busca e troca de passaporte (só número reservado ou livre abaixo do próximo; ACE mri_Qbox.admin ou command). Opção: Comandos usam o passaporte (desligada), que faz todo comando com jogador feito no lib.addCommand (/tp, /revive, /kick, /ban...) pedir o passaporte no lugar do id do servidor; me continua valendo |
| Identificadores no console (ligado) | Mostra os identificadores de quem conecta |
| Expulsar AFK (desligado) | Igual ao qbx_afk: confere a cada segundo e expulsa quem fica no mesmo ponto exato por tempo demais (padrão 1000 s), com avisos a 15, 10, 5, 2,5 e 1 minuto e a 30, 20 e 10 segundos. Os grupos da lista (padrão mod e admin, permissões do qbx_core) não são expulsos |
| Gravação (ligado) | Item Gravação no F9: tela pra gravar, gravar em replay (guarda os últimos segundos), salvar, descartar e abrir o Rockstar Editor (pede confirmação, porque tira do servidor). Gravando com a tela fechada, fica um aviso REC no canto. Substitui os comandos do qbx_editor |
| Anticheat (ligado) | Veículos e peds proibidos: o servidor cancela na hora quem tentar criar, inclusive script de garagem (proteção contra menu de cheat). Substitui o qbx_entitiesblacklist; saiu do módulo Mapa |
| Módulo | O que faz |
|---|---|
| Cair com tiro na perna (desligado) | Ragdoll ao levar tiro na perna ou na pélvis |
| Sem tiro cego (desligado) | Não atira da cobertura sem mirar |
| Sem rolamento (desligado) | Tira o rolamento de combate mirando |
| Sem soco sem mirar (desligado) | Só bate ou atira segurando a mira |
| Recuo realista (ligado) | A câmera sobe a cada tiro com a força de cada arma (os valores do qbx_recoils, editáveis no painel), em passos como no qbx_recoils e sem recuo no drive-by (multiplicador VEHICLE 0). Opções: multiplicador por tipo, mira bêbada, sem headshot de um tiro, sem soco mirando e armas sem recuo. Substitui o qbx_recoils |
| Só duas câmeras a pé (desligado) | Primeira e terceira pessoa (V alterna) |
| Primeira pessoa armado no carro (desligado) | Motorista armado vai pra primeira pessoa (sempre ou só segurando a mira) |
| Esconder HUD nativa (ligado) | Esconde estrelas de procurado, dinheiro, área e rua, nome e classe do veículo, roda e ícone da arma; opcional, a mira. Bloqueia a tecla da roda de armas (TAB). Responde os exports do qbx_hudcomponents pelo nome antigo (exports.qbx_smallresources:AddDisableHudComponents e os outros). Substitui o qbx_hudcomponents |
| Armas do GTA (ligado) | NPC morto não solta arma, ninguém pega do chão a arma que o GTA solta, sem coronhada e extintor e galão de gasolina sem acabar. Substitui o qbx_itempickup e parte do qbx_ignore |
| Tempo no chão do taser (ligado) | Quem leva taser fica no chão um tempo sorteado entre o mínimo e o máximo (padrão 4 a 7 s). Substitui o qbx_stun |
| Derrubar correndo (ligado) | Igual ao qbx_tackle: correndo, a tecla tackle (padrão E) derruba quem está logo à frente (7 s no chão, ajustável); quem derruba cai por um instante. O servidor confere a distância (2 m). Substitui o qbx_tackle |
| Módulo | O que faz |
|---|---|
| Veículos (sempre ligado) | Cadastro, edição e estoque dos veículos sem reiniciar. Ver Veículos: cadastro e estoque |
| Drift no Shift (ligado) | Perde aderência segurando Shift até a velocidade máxima (padrão 80 km/h) |
| Pontos de drift (desligado) | Contador de pontos de drift na tela |
| Roda solta em batida (desligado) | Roda solta por força do impacto ou por velocidade da colisão |
| Roda virada ao desligar (desligado) | A roda fica no ângulo em que o carro foi desligado |
| Sem controle no ar (desligado) | Carro no ar não gira pelo controle |
| Explosão em queda (desligado) | Explode ao cair de uma altura (padrão 40 m) |
| Entrar pela porta (ligado) | Olhinho em cada porta; carro de concessionária não deixa |
| Rádio do carro (ligado) | Rádio bloqueado por padrão: desligado em todo veículo, sem como ligar. Sem o bloqueio, /mri_carradio liga e desliga o rádio e a escolha vale em todo veículo. Sem tecla padrão (dá pra definir no painel) |
| Placas Mercosul (desligado) | Textura de placa Mercosul. Obsoleto: prefira o mri_Qcarplates |
| Sem pular de banco (ligado) | Igual ao qbx_noshuff: quem entra no banco do passageiro não pula sozinho pro do motorista. A tecla shuffleSeat (padrão O) troca de banco de propósito, menos algemado ou de cinto. Substitui o qbx_noshuff |
| Piloto automático (ligado) | Igual ao qbx_cruise: o motorista mantém a velocidade atual com a tecla toggle_cruise_control (padrão Y). Apertar de novo ou perder velocidade sem frear nem virar desliga. Não vale pra bicicleta, barco, helicóptero, avião e trem. Substitui o qbx_cruise |
| Desvirar veículo (ligado) | Desvira veículo capotado com barra de progresso (padrão 15 s, até 2 m): pelo olhinho ou pelo export do qbx_flipvehicle (exports.qbx_smallresources:FlipVehicle). Substitui o qbx_flipvehicle |
| Empurrar veículo (ligado) | Igual ao qbx_vehiclepush: a pé, segurando Shift e E (teclas push_vehicle e push_vehicle_e) perto de um veículo sem motorista, empurra; A e D viram as rodas e soltar o Shift para. Opções: vida do motor pra poder empurrar (padrão 1000, qualquer um; sem gasolina sempre pode) e classes que não empurram. Substitui o qbx_vehiclepush |
| Módulo | O que faz |
|---|---|
| Lixeiras (ligado) | Olhinho pra se esconder e vasculhar (abre o inventário da lixeira). Modelos no painel |
| Bebedouros (ligado) | Beber água e encher garrafa em bebedouros, fontes e pias. Beber seguido demais só mostra um aviso |
| Módulo | O que faz |
|---|---|
| Editor do inventário (base) | Itens, armas, lojas, crafting, licenças, baús, evidências, espaço dos veículos e animações do ox_inventory, editados no jogo. Ver Editor do inventário |
| Pegar itens do chão (ligado) | Olhinho pra pegar o prop de um item do ox_inventory. O export itemPlace continua valendo desligado |
| Carregar nos braços (ligado) | Itens como caixas ficam nos braços com animação (lista em resources/modules/itemcarry/items.lua) |
| Craft arrastando (ligado) | Arrastar um item sobre o outro faz a receita (em resources/modules/dragcraft/recipes.lua) |
| Item no chão vira prop (desligado) | Item largado aparece como o prop dele (tabela item e prop no painel) |
| Consumíveis (ligado) | Igual ao qbx_consumables: comida, bebida e álcool no painel (fome ou sede sorteada entre o mínimo e o máximo, alívio de estresse com aviso, animação e objeto na mão), contador de álcool com os eventos de evidência, drogas (baseado, cocaína, crack, ecstasy, oxy e metanfetamina), lockpick e lockpick avançado (evento lockpicks:UseLockpick) e a garrafa vazia depois da água. Mantém os eventos consumables:* e os exports pelo nome antigo (exports.qbx_smallresources:AddHunger e os outros). O baseado usa a animação do rpemotes-reborn. Substitui o qbx_consumables |
| Módulo | O que faz |
|---|---|
| Trilha sonora (ligado) | Player de música do servidor: scripts pedem música por prioridade e a trilha toca a mais importante, com troca suave. Abaixa quando o jogador fala. O volume segue o slider de efeitos sonoros das configurações de áudio do GTA (zerado, não toca). Ao trocar de faixa, mostra um aviso com capa, título e artista, ou um player com play e pause, numa das 8 posições das notificações do ox_lib. Opções: volume da trilha, tempo da troca, abaixar falando e quanto, aviso da faixa, posição do aviso e do player, os momentos e os locais |
| Módulo | O que faz |
|---|---|
| Sem capacete automático (ligado) | O personagem não põe capacete sozinho na moto |
| Máscara sem atravessar o rosto (desligado) | Encolhe cabeça e traços enquanto a máscara pede |
| Postes indestrutíveis (ligado) | Postes, semáforos e hidrantes não quebram (modelos no painel) |
| Densidade (ligado) | Quantidade de carros estacionados, no trânsito e aleatórios, pedestres e NPCs de cenário (0 a 1, padrão 0.8). A opção Cidade vazia tira todos de uma vez. NPCs de gangue, polícia, bombeiros, médicos e presos não atacam o jogador. Sem veículos parados no aeroporto, na base militar e em mais dois pontos. Substitui o qbx_density |
| Trânsito (ligado) | Escolhe no painel quais carros e motos aparecem no trânsito, grupo por grupo (bairros pobres, classe média, ricos, centro, rodovias, interior e motos), entre os do GTA e os das DLCs. Muda na hora: o carro desligado para de aparecer e os que já estão na rua somem com o tempo. Vem com a lista de cara brasileira ligada e o resto desligado. Substitui o mri_replacetraffic |
| Necessidades (ligado) | Liga e desliga fome, sede e estresse e ajusta quanto a fome e a sede caem a cada ciclo do qbx_core (padrão 4,2 e 3,8). Fome ou sede desligada fica sempre cheia e não tira vida. O estresse vem desligado: fica em zero, sem aviso nem tremor, a barra some do mri_Qhud e comida e bebida não mostram mais o aviso de estresse. O estresse não tem ritmo de queda: ele sobe por evento (velocidade e tiro, no mri_Qhud) e desce com item. Precisa do qbx_core 1.24.1 ou mais novo |
| Polícia e serviços do GTA (ligado) | Igual ao qbx_disableservices: desliga a polícia, os bombeiros, a ambulância, as gangues de reforço e o exército que o GTA manda sozinho (as barreiras da polícia continuam ligadas), os policiais a pé, o rádio da polícia e as sirenes ao longe, e trava o nível de procurado em 0. Cada serviço pode ser religado no painel. Substitui o qbx_disableservices e parte do qbx_ignore |
| Mapa (ligado) | Igual ao qbx_ignore e companhia: sem câmera parada e sem som ambiente, sem caminhão de lixo, carros não desenhados de longe, cenários e grupos de cenário desligados e veículos fora do trânsito (reaplicados a cada 10 s) e sons fixos desligados. O comando /staticemitters (admin) lista os sons fixos do mapa por interior, com marcadores e teleporte. Substitui o qbx_ignore e o qbx_staticemitters (props do mapa removidos ficam com o mri_Qobjects) |
| Áreas sem carro estacionado (ligado) | O GTA não estaciona carro nas áreas da lista (hospitais, delegacias, praia de nudismo e helicópteros de Vespucci). Saiu do módulo Mapa |
| Cancelas automáticas (ligado) | Cancelas e portões do mapa abrem sozinhos quando o carro chega perto. Vem com 69 cancelas de estacionamento e de linha de trem; no painel o admin adiciona mirando no portão, remove e vai até cada uma (lista por tipo, bairro e distância). A opção Para que lado abre vale pra todas: pros dois lados, abrindo longe do carro (padrão, o módulo gira a cancela no lugar do GTA), todas pro outro lado, ou um lado só (cada cancela pode ter o Outro lado ligado), e o botão Mostrar áreas desenha, só na tela do admin, o círculo onde cada uma abre: verde abre, vermelho é prop não achado ou que não é porta. Opções: distância para abrir (padrão média) e velocidade da cancela (padrão rápida). Substitui o cfx-anes-gates |
| Comando | Permissão | Descrição |
|---|---|---|
/mriqbox |
mri_Qbox.admin ou command |
Abre o painel de configuração |
/tpway |
A do /tpm |
Atalho de /tpm: teleporta pro waypoint do mapa |
/god [id] |
A do /revive |
Atalho de /revive: revive o jogador informado ou você mesmo |
/menu <job> |
Nenhuma | Abre o painel da organização no mri_Qbossmenu (admin entra em qualquer uma) |
/mri_carradio |
Nenhuma | Liga e desliga o rádio do carro |
/item <item> [qtd] [alvo] [tipo] |
group.admin |
Dá um item a você ou ao alvo |
/tuning |
group.admin |
Aplica todos os mods no veículo atual |
/customs |
group.admin |
Abre a customização do veículo atual |
/menu_admin |
group.admin |
Abre o menu F10 |
/raycast |
group.admin |
Pega coordenadas por raycast e copia |
/vipadm <id> <add| /staticemitters` |
admin |
Lista os sons fixos do mapa (módulo Mapa) |
| rem> [tier]` | group.admin |
Dá ou tira um tier de VIP |
Cada comando pertence a um módulo e só faz algo com o módulo ligado. /menu não tem restrição de permissão. /tpway e /god são atalhos
(módulo Atalhos de comando) e seguem a permissão do comando que chamam.
| Tecla | Ação |
|---|---|
F9 |
Menu do jogador |
F10 |
Menu de administração (executa /menu_admin, que exige group.admin) |
E |
Derrubar correndo (tackle) |
O |
Trocar de banco no veículo (shuffleSeat) |
Y |
Piloto automático (toggle_cruise_control) |
Shift + E |
Empurrar veículo (push_vehicle e push_vehicle_e) |
São keybinds do ox_lib (menu_jogador_keybind e menu_admin_keybind); o jogador pode
trocar nas configurações do FiveM. As teclas vindas do qbx_smallresources mantêm o nome do keybind de lá, então quem já tinha escolhido outra tecla continua com ela. O rádio do carro (/mri_carradio) vem sem tecla.
Identificação (/id), Emprego (/job), Gangue (/gang), Ver Reputação (/rep), Ver
Habilidades (/skill) e Waypoints (limpar marcadores e configurações). "Gerenciar Emprego"
e "Gerenciar Gangue" aparecem pra chefe ou recrutador, segundo o mri_Qbossmenu.
Abrir Painel (/adm), Customizar Veículo (/customs), Relógio (hora, escala de tempo,
congelar tempo), Clima (/weather) e Gerenciamento: Portas, Blips, Baús, NPC, Props,
Elevador, Outdoors/Posters, Garagens, Crafting, Grupos, Spotlight e, com o mri_Qvinewood,
Vinewood. O VIP entra aqui quando o módulo está ligado.
Outros recursos acrescentam entradas pelos exports (ver
Entrypoints). Alvos: 'player' (F9), 'f10' e
'management'.
Os cargos de staff ficam no Permissões do mri_Qadmin: o grupo vinculado a group.admin,
group.mod ou group.support dá o cargo a quem entra nele. O /staff agora é do mri_Qadmin.
Quem tinha cargo pelo antigo /staff (em metadata.staff) continua com ele: o mri_Qbox reaplica
o cargo ao logar até o mri_Qadmin mover o personagem para o grupo do cargo.
O tier fica em metadata.vip e vira principal ACE com o mesmo nome.
- Salário: a cada intervalo (minutos, no painel), cada VIP online recebe o
paymentdo tier na conta escolhida.0desliga. - Peso do inventário: no login e a cada mudança, o peso máximo vira
inventory * 1000gramas. Quem não é VIP usa o tiernenhum, por isso ele precisa existir. - Painel: F10 > Vip lista VIPs online e offline e permite adicionar e remover.
Tiers no painel, em JSON:
{
"nenhum": { "label": "Sem vip", "payment": 0, "inventory": 100 },
"tier1": { "label": "Tier 1", "payment": 5000, "inventory": 200 }
}Módulo da base (sempre ligado, substitui o antigo mri_Qvehicles). Cadastra, edita e controla
o estoque dos veículos sem editar o shared/vehicles.lua do qbx_core e sem reiniciar.
- Onde abre: aba Veículos do mri_Qadmin, ou
/mriqbox> Veículos > Veículos. - Adicionar veículos (carros addon) com nome, marca, preço, categoria, tipo e estoque.
- Modelos fora da lista: mostra os veículos que o jogo conhece (base e packs rodando) e
que não estão na lista do qbx_core. "Cadastrar" abre o formulário já com o nome, a marca e
o tipo que o jogo dá. É o antigo
/models, agora na tela. - Editar veículos do jogo: só os campos alterados ficam salvos; o resto segue o
shared/vehicles.lua, então atualizações do Qbox continuam chegando. - Remover e restaurar: veículo do jogo removido fica no filtro "Removidos" e volta ao original com um clique.
- Aviso de modelo ausente: marca veículos cujo modelo não existe no jogo (nome errado ou pack do carro parado).
- Tudo vale na hora pra concessionária, garagem, painel admin e demais scripts que usam a lista do qbx_core. Com a tela aberta, compras e mudanças de outro admin atualizam sozinhas.
Precisa do qbx_core com a API de veículos em runtime (UpsertVehicleData e
RemoveVehicleData, na pasta mri/ do fork MRI).
Criada ou ajustada sozinha no start.
| Coluna | Significado |
|---|---|
model |
nome de spawn do veículo |
stock |
estoque da concessionária |
name, brand, price, category, type |
NULL = valor do shared/vehicles.lua; preenchido = editado pelo painel |
removed |
veículo do jogo removido pelo painel |
A versão antiga do qbx_vehicleshop gravava uma cópia completa de cada veículo nessa
tabela. No primeiro start, o estoque fica, os campos iguais ao shared/vehicles.lua viram
NULL e os diferentes ficam como edição. Nada é apagado.
Tire o mri_Qvehicles do servidor (pasta e ensure). O mri_Qbox faz provide dele e
continua com a mesma tabela, a mesma permissão (mri_Qvehicles.admin), a mesma aba no
mri_Qadmin e os mesmos exports. Se os dois estiverem rodando juntos, o módulo de veículos do
mri_Qbox não sobe e avisa no console.
Tire o qbx_density do servidor (pasta e ensure) e ajuste os valores no módulo Densidade. O
mri_Qbox faz provide dele e responde exports.qbx_density:SetDensity(tipo, valor) (tipos
parked, vehicle, randomvehicles, peds, scenario; nil volta ao valor do painel).
Os .ymap que desligavam veículos parados viraram áreas no código, sem stream/. Se os dois
estiverem rodando juntos, o módulo não sobe e avisa no console do F8.
Quem pega a lista uma vez (exports.qbx_core:GetVehiclesByName() ou
GetCoreObject().Shared.Vehicles) recebe uma cópia. Pra acompanhar as mudanças do painel,
escute o evento do qbx_core:
-- server
AddEventHandler('qbx_core:server:onVehicleUpdate', function(model, vehicle)
VEHICLES[model] = vehicle -- vehicle nil = removido
end)
-- client
RegisterNetEvent('qbx_core:client:onVehicleUpdate', function(model, vehicle)
VEHICLES[model] = vehicle
end)A nota de desempenho que a base mostra (garagem do mri_Qgarage, oficina do mri_Qcustoms) vem de
um lugar só, o export de cliente GetVehicleRating:
local rating = exports.mri_Qbox:GetVehicleRating(vehicle)
-- { speed, acceleration, braking, traction (0 a 1), value (100 a 1000), letter }- Cada barra é o valor do carro como ele está (peças instaladas contam:
GetVehicleEstimatedMaxSpeed,GetVehicleAcceleration,GetVehicleMaxBraking,GetVehicleMaxTraction) dividido pelo melhor da categoria do GTA vezes 1,15. - A nota pesa velocidade e aceleração 32% cada, freio e tração 18% cada, e vai de 100 a 1000.
- Letra pela nota: até 400 D, até 500 C, até 600 B, até 700 A, até 800 S1, até 900 S2, acima X.
- Pesos e faixas ficam no topo da seção em
resources/modules/vehicles/client.lua. - Devolve
nilse a entidade não for um veículo. Quem usa esconde a nota nesse caso.
Módulo da base (sempre ligado). Edita o ox_inventory no jogo sem mexer nos arquivos dele: as
mudanças ficam em data/inventory.json do mri_Qbox, e o ox_inventory junta tudo por cima dos
arquivos data/*.lua dele quando carrega.
- Onde abre: aba Editor do inventário do mri_Qadmin, ou
/mriqbox> Inventário > Editor do inventário. - Abas: Itens, Armas, Lojas, Crafting, Licenças, Baús, Evidências, Veículos (porta-malas e porta-luvas por classe ou por modelo) e Animações.
- Itens e lojas da MRI: vêm do mri_Qbox (
resources/modules/inventory/base/items.luaeshops.lua), não do ox_inventory, e o editor mostra eles como original. Se o dono mexeu noitems.luaou noshops.luado ox_inventory, o arquivo dele vale: do mri_Qbox só entra o que falta lá. - Editar o que vem do ox_inventory: só o que mudou fica salvo, então atualizações do ox_inventory continuam chegando. Partes em código do original (botões, efeitos) continuam valendo.
- Novo, remover e voltar ao original: removido fica no filtro Removidos e volta com um clique.
- Pegar 1: dá um do item ou da arma pra testar.
- Posições: não se digitam. Minha posição usa onde você está (no atendente da loja, também a direção pra onde você olha) e Ir até leva você até lá. Zona do ox_target e ajuste fino ficam no Avançado (JSON).
- Avançado (JSON): todos os campos da entrada, inclusive os que o formulário não mostra.
| Aba | Vale na hora | Vale no próximo restart do servidor |
|---|---|---|
| Itens e armas | Criar e editar | Remover |
| Lojas | Produtos e preços | Locais, blip e loja nova |
| Crafting | Tudo | |
| Licenças | Preço | Local e licença nova |
| Baús, evidências, veículos e animações | Tudo |
Precisa do ox_inventory da MRI com mri/data.lua e mri/live.lua. Permissão: ACE
mri_Qbox.admin ou command. Ao atualizar o mri_Qbox à mão, guarde o data/inventory.json.
O painel aparece como a aba "MRI Qbox" e a tela de veículos como a aba "Veículos" (dois plugins do mesmo resource).
O mri_Qbossmenu substitui os dois e responde pelos nomes deles. O F9 consulta CheckPlayerIsbossByJobSystemData e CheckPlayerIrecruiterByJobSystemData
pra mostrar as opções de gerenciar. O painel de VIP pega os jogadores próximos por
qbx_management:server:getPlayers, e o /menu <job> abre o painel por OpenBossMenu.
Ganchos swapItems/createItem dos módulos de item no chão, craft arrastando e carregar
nos braços (registrados só com o módulo ligado) e o export itemPlace nos itens.
exports.mri_Qbox:AddPlayerMenu({ -- F9
title = 'Minha opção',
icon = 'star',
iconAnimation = 'fade',
description = 'Descrição da opção',
arrow = true,
onSelectFunction = function() ExecuteCommand('meucomando') end,
onSelectArg = nil, -- opcional: argumento pra onSelectFunction
})
exports.mri_Qbox:RemovePlayerMenu('Minha opção')
exports.mri_Qbox:AddManageMenu({ ... }) -- F10 > Gerenciamento
exports.mri_Qbox:RemoveManageMenu('Minha opção')
exports.mri_Qbox:AddItemToMenu('f10', { ... }) -- 'f10' | 'management' | 'player'
exports.mri_Qbox:RemoveItemFromMenu('f10', 'Minha opção')Seletor de coordenadas por raycast. Bloqueia até E (vector3), G (vector4) ou Q
(cancela, retorna false). Já copia pro clipboard.
local coords = exports.mri_Qbox:GetRayCoords()Pergunta Sim/Não num menu do ox_lib. Bloqueia até a resposta e retorna booleano. Também
disponível como callback mri_Qbox:client:request.
local confirmou = exports.mri_Qbox:Request('Título', 'Texto da pergunta', 'top-right')local pode = exports.mri_Qbox:CanCarryItem('water', 5)exports.mri_Qbox:SetDensity('peds', 0.2) -- nil volta ao valor do painelexports.mri_Qbox:addVip({
vipData = { source = 1, citizenId = 'ABC12345', name = 'Nome Sobrenome', offline = false },
newRole = 'tier1',
callback = function() end, -- opcional
})Mesma lógica do /vipadm. Retorna true em caso de sucesso.
exports.mri_Qbox:VipAdm(source, { id = targetId, tipo = 'add', tier = 'tier1' })Receita de craft arrastando em runtime; sincroniza o outro lado sozinha.
exports.mri_Qbox:addRecipe('garbage metalscrap', {
duration = 2000,
costs = { garbage = { need = 1, remove = true }, metalscrap = { need = 1, remove = true } },
result = { { name = 'lockpick', amount = 1 } },
})A chave é "<itemA> <itemB>"; a ordem inversa também vale.
Pra usar no campo export de um item do ox_inventory: coloca o prop do item no chão à
frente do jogador e bloqueia o uso dentro de veículo.
['cadeira'] = {
label = 'Cadeira',
weight = 1000,
prop = 'prop_chair_01a',
export = 'mri_Qbox.itemPlace',
},A trilha não tem export: quem pede música não precisa saber se o mri_Qbox está rodando (sem ele, nada acontece e não dá erro) e nada passa pelo servidor.
Pedido contínuo (tocar enquanto algo dura): uma chave music:<id> no statebag do
jogador. Toca o pedido de maior prioridade (o mais recente desempata); ao soltar
(nil), volta o que estava por baixo. Prioridades: ambient (10), zone (20),
activity (30), scene (40), ui (50), ou um número. Por ser estado, o pedido
sobrevive a reinício: se o mri_Qbox subir depois, ele lê as chaves que já existem.
-- client (o último argumento false = só neste client, sem rede)
LocalPlayer.state:set('music:perseguicao', { moment = 'chase', priority = 'activity' }, false)
LocalPlayer.state:set('music:perseguicao', nil, false) -- solta
-- abaixar a música (diálogo, cutscene com som próprio): nível 0 a 1, ou { level, fade }
LocalPlayer.state:set('musicDuck:cutscene', { level = 0.3, fade = 800 }, false)
LocalPlayer.state:set('musicDuck:cutscene', nil, false)
-- servidor, pra um jogador
Player(source).state:set('music:evento', { moment = 'festa', priority = 'zone' }, true)
-- servidor, pra todo mundo (só o servidor escreve no GlobalState)
GlobalState['music:carnaval'] = { moment = 'festa', priority = 'zone' }
GlobalState['music:carnaval'] = nilQuem pediu deve soltar a chave ao terminar (e ao parar o resource).
Frase curta por cima (missão concluída, alerta): evento local; a música abaixa enquanto ela toca.
TriggerEvent('mri_Qbox:soundtrack:stinger', { moment = 'alerta' }) -- client
TriggerClientEvent('mri_Qbox:soundtrack:stinger', source, { moment = 'alerta' }) -- servidorFaixa: moment (cadastrado no painel) ou url direto, em três formatos:
| Formato | Exemplo | Observação |
|---|---|---|
| YouTube | https://www.youtube.com/watch?v=... |
Toca pelo player do YouTube |
| Link direto de áudio | https://cdn.exemplo.com/chase.ogg |
Player leve, sem anúncio, loop sem emenda |
| Arquivo de um resource | @meu_script/sounds/chase.ogg |
O próprio script hospeda: o arquivo precisa estar no files do fxmanifest dele |
Opções do pedido: volume (0 a 1), loop, fade (ms) e title (nome no aviso).
Como aparece na tela (no pedido ou no momento; sem nada, vale o painel):
| Opção | Valores | Efeito |
|---|---|---|
display |
toast (padrão), player, none |
Aviso que some em alguns segundos, player com play/pause e progresso que fica enquanto a música é a da vez, ou nada na tela |
position |
top, top-right, top-left, bottom, bottom-right, bottom-left, center-right, center-left |
As mesmas 8 posições das notificações do ox_lib. bottom-left fica acima do minimapa. Sem ela, a posição do aviso ou do player do painel |
autoplay |
true (padrão), false |
Só no player: com false ele aparece pausado, esperando o play |
focus |
true |
Só no pedido: o player ganha o mouse até a pessoa dar play, fechar (X) ou apertar ESC |
-- caixa de som: aparece no meio da tela, pausada, com o mouse pra pessoa dar play
LocalPlayer.state:set('music:caixa', {
url = '@meu_script/sounds/radio.ogg',
priority = 'activity',
display = 'player',
autoplay = false,
focus = true,
position = 'center-right',
}, false)Pausar segura a vez da música: ela fica em silêncio sem pular pra outra de prioridade
menor, e o play continua de onde parou. Sem focus, o player só mostra e não dá pra
clicar (clicar na NUI tira o controle do personagem, então quem decide é o script).
Os momentos se cadastram no painel (módulo Trilha sonora, campo Momentos): nome, uma ou mais faixas (com várias, sorteia uma a cada vez), volume, loop, como aparece, posição e se o player começa tocando. Cada faixa tem um ▶ pra ouvir na hora.
No painel, módulo Trilha sonora, campo Locais: cada local é um círculo no mapa que toca um momento enquanto o jogador está dentro. Saiu, volta o que estava tocando antes. Não precisa de script.
- Cadastre antes os momentos (campo Momentos, logo acima). Adicionar local aqui cria o local na posição atual do jogador; Usar minha posição move um local existente. Vá até o lugar com o painel aberto.
- Cada local: nome, raio (metros), momento, prioridade (
zonapor padrão, pra perseguição e cena passarem por cima), só a pé ou só de veículo, altura mínima e máxima (separa andares e interiores) e só à noite (20h às 6h). - Testar toca o momento na hora; Mostrar desenha o círculo no mundo por 20 segundos (feche o painel pra ver).
- Locais um dentro do outro seguem a prioridade, e o mais recente desempata.
- Usa as zonas do ox_lib: só acordam ao entrar e sair. Cada jogador roda os próprios locais, então ninguém dispara a música de outro.
| Export | Nome antigo | Descrição |
|---|---|---|
exports.mri_Qbox:GetVehicleStock(model) |
GetStock |
Estoque do modelo (0 quando não há linha) |
exports.mri_Qbox:GetVehicleStocks() |
GetStocks |
Estoque de todos os modelos com linha na tabela |
exports.mri_Qbox:TakeVehicleStock(model) |
TakeStock |
Tira uma unidade. Retorna false sem estoque. Atômico no banco |
exports.mri_Qbox:ReturnVehicleStock(model) |
ReturnStock |
Devolve uma unidade (ex.: pagamento falhou) |
exports.mri_Qbox:SetVehicleStock(model, stock) |
SetStock |
Define o estoque |
O nome antigo (exports.mri_Qvehicles:GetStock e os outros) continua respondendo, pra quem já chamava o mri_Qvehicles (o mri_Qbox faz provide dele). Script novo usa o nome do mri_Qbox.
| Export | Descrição |
|---|---|
exports.mri_Qbox:GetPlayerPassport(source) |
Passaporte do jogador online (nil sem personagem carregado) |
exports.mri_Qbox:GetPlayerByPassport(passport) |
source do jogador online com esse passaporte, ou nil |
exports.mri_Qbox:GetCitizenIdByPassport(passport) |
citizenid do personagem, mesmo offline |
exports.mri_Qbox:SetCitizenPassport(citizenId, passport) |
Troca o passaporte do personagem, mesmo offline. Devolve true ou false, motivo: disabled (módulo desligado), invalid, not_found, taken (já é de outro) ou not_reserved (número igual ou acima do próximo passaporte, que um personagem novo ainda vai pegar) |
exports.mri_Qbox:IsPassportEnabled() |
true com o módulo ligado. Pra acompanhar sem perguntar, ouça a chave GlobalState['mri:passportEnabled'] com AddStateBagChangeHandler |
No cliente e em outros resources, o passaporte está em Player(source).state.passport (no próprio cliente, LocalPlayer.state.passport). Serve pra mostrar; pra decidir alguma coisa no servidor, use os exports, porque o cliente consegue escrever no próprio statebag.
Cores de status que os recursos MRI leem:
{ success = '#51CF66', info = '#668CFF', warning = '#FFD700', danger = '#FF6347' }mri_Qbox/
├── data/config.json # valores salvos pelo painel
├── html/ # NUI (painel, contador de drift, trilha) e vehicles.html (aba Veículos)
├── resources/
│ ├── core/ # núcleo: registro dos módulos, config, painel, exports
│ └── modules/<módulo>/ # um módulo por pasta: config.lua, client.lua, server.lua
└── fxmanifest.lua