mri-QboxResourcesMRI Qcarkeys

mri_Qcarkeys - Manual Funcional

Sistema completo de gerenciamento de chaves veiculares para FiveM com chaves permanentes/temporárias, lockpick, hotwiring, carjacking e key stacking.

O que o recurso faz

O mri_Qcarkeys gerencia todo o sistema de chaves de veículos, permitindo que jogadores tenham chaves permanentes (itens no inventário) e temporárias (armazenadas no estado da entidade), com suporte a trancar/destrancar veículos com animação e sons, hotwiring com minigame, lockpick de portas e motor, roubo de veículos (carjacking) e consolidação de chaves em um keybag.

Funcionalidades principais

  • Chaves permanentes e temporárias: Sistema dual de chaves com itens de inventário
  • Trancar/destrancar com animação: Key fob animation + sons de lock/unlock
  • Hotwiring: Minigame de ligação direta com chance escalada por nível de reputação
  • Lockpick de porta e motor: Suporte a ox_lib skill check ou minigame alternativo
  • Carjacking: Roubo de veículos de NPCs com chance baseada na arma utilizada
  • Key stacking: Consolidar todas as chaves em um único keybag
  • Key grabbing: Pegar chaves de NPCs vivos ou mortos em veículos
  • Multi-framework: Compatível com QBCore, QBX, ESX e ox_core
  • Multi-inventory: Compatível com ox_inventory, qb-inventory, ps-inventory, mm_inventory, qs-inventory

Como funciona

  1. Jogador recebe chave permanente (item) ou temporária (estado da entidade)
  2. Ao se aproximar de um veículo, o sistema verifica se possui chave
  3. Tecla L tranca/destranca o veículo com animação e som
  4. Tecla Z liga/desliga o motor (se tiver chave)
  5. Sem chave, tecla H inicia hotwiring (minigame)
  6. Lockpick e carjacking disponíveis conforme configuração

Configurações disponíveis (shared/shared.lua)

Opções gerais

OpçãoPadrãoDescrição
LockNPCVehiclefalseTrancar todos os veículos NPCs quando o jogador se aproxima
playerDraggabletruePermitir que jogadores arrastem outros jogadores
toggleLightsOnlyRemotetrueAlternar luzes apenas quando fora do veículo
keepVehicleEngineOntrueManter motor ligado ao sair do veículo
keepKeysInVehicletrueChaves ficam no veículo; motor não liga sem elas

Carjacking (steal)

OpçãoPadrãoDescrição
steal.availabletrueHabilitar carjacking
steal.getKey"permanent"Tipo de chave recebida: "permanent", "temporary", "none"
steal.chancePor armaChance de sucesso por categoria de arma (hash)

Lockpick (lockpick)

OpçãoPadrãoDescrição
lockpick.minigameScript"ox_lib""ox_lib" ou "inside-lockpicking"
lockpick.breakChance0.5Chance do lockpick quebrar (normal)
lockpick.advancedBreakChance0.1Chance do lockpick quebrar (avançado)

Hotwiring (hotwire)

OpçãoPadrãoDescrição
hotwire.availabletrueHabilitar hotwiring
hotwire.chance0.1Chance base de sucesso (escalada por nível cw-rep)

Key Grabbing (grab)

OpçãoPadrãoDescrição
grab.alivetruePermitir pegar chaves de NPCs vivos
grab.leaveKeysOnVehicletrueDeixar chaves no veículo ao pegar

Classes e armas bloqueadas

  • blacklistedClasses: 13-16, 21 (bicicletas, barcos, helicópteros, aviões, trens)
  • BlackListedWeapon: 28 armas corpo a corpo/arremessáveis que não podem fazer carjacking

Controles

TeclaAção
LTrancar/destrancar veículo (togglelocks)
ZLigar/desligar motor (mri:engine)
HHotwiring (quando dentro de veículo sem chave)

Comandos

ComandoRestritoDescrição
/givetempkeys [target] [plate]group.adminDar chaves temporárias
/removetempkeys [target] [plate]group.adminRemover chaves temporárias
/givekeyspolice/cardealer/adminDar chave permanente do veículo atual
/removekeyspolice/cardealer/adminRemover chave permanente do veículo atual
/stackkeysNãoConsolidar todas as chaves em um keybag
/unstackkeysNãoSeparar keybag em chaves individuais

Eventos

Client → Server

EventoDescrição
mm_carkeys:server:setVehLockStateDefinir estado de trancamento do veículo
mm_carkeys:server:acquiretempvehiclekeysRequisitar chaves temporárias
mm_carkeys:server:removetempvehiclekeysRemover chaves temporárias
mm_carkeys:server:acquirevehiclekeysRequisitar chave permanente
mm_carkeys:server:removevehiclekeysRemover chave permanente
mm_carkeys:server:stackkeysStack de chaves em keybag
mm_carkeys:server:unstackkeysUnstack keybag em chaves individuais

Server → Client

EventoDescrição
mm_carkeys:client:addtempkeysAdicionar chave temporária na lista do cliente
mm_carkeys:client:removetempkeysRemover chave temporária da lista do cliente
mm_carkeys:client:setplayerkeyDefinir chave permanente
mm_carkeys:client:removeplayerkeyRemover chave permanente
mm_carkeys:client:givekeyitemProgress bar de dar chave
mm_carkeys:client:stackkeysProgress bar de stack
mm_carkeys:client:unstackkeysProgress bar de unstack

Exports

Client

ExportParâmetrosRetornoDescrição
GiveTempKeys(plate)-Dar chave temporária para uma placa
RemoveTempKeys(plate)-Remover chave temporária para uma placa
GiveKeyItem(plate)-Dar item de chave permanente
RemoveKeyItem(plate)-Remover item de chave permanente
HaveTemporaryKey(plate)booleanVerifica se tem chave temporária
HavePermanentKey(plate)booleanVerifica se tem chave permanente

Server

ExportParâmetrosRetornoDescrição
GiveTempKeys(src, plate)-Dar chave temporária ao jogador
RemoveTempKeys(src, plate)-Remover chave temporária do jogador
GiveKeyItem(src, plate, netId)-Dar item de chave permanente
RemoveKeyItem(src, plate)-Remover item de chave permanente
HaveTemporaryKey(src, plate)booleanVerifica via callback
HavePermanentKey(src, plate)booleanVerifica via callback

Itens necessários (inventory)

['vehiclekey'] = {
    label = 'CHAVE',
    weight = 50,
    type = 'item',
    image = 'vehiclekey.png',
    description = 'Chave de veículo',
    client = { status = { hunger = -10000 } },
},
['keybag'] = {
    label = 'Chaveiro',
    weight = 100,
    type = 'item',
    image = 'keybag.png',
    description = 'Um chaveiro com várias chaves',
},
['lockpick'] = {
    label = 'Gazuas',
    weight = 100,
    type = 'item',
    image = 'lockpick.png',
    description = 'Gazuas para abrir fechaduras',
},
['advancedlockpick'] = {
    label = 'Gazuas Avançadas',
    weight = 150,
    type = 'item',
    image = 'advancedlockpick.png',
    description = 'Gazuas avançadas com menor chance de quebrar',
},

Integração com outros recursos MRI

Obrigatórias

  • ox_lib — UI, menus, progress bars, notificações

Opcionais (auto-detected)

  • Frameworks: qb-core, qbx_core, es_extended, ox_core
  • Inventories: ox_inventory, qb-inventory, ps-inventory, mm_inventory, qs-inventory
  • rep-enginewire — Minigame alternativo de hotwiring
  • inside-lockpicking — Minigame alternativo de lockpick
  • cw-rep — Sistema de reputação/habilidade para hotwiring e lockpick
  • InteractSound — Sons de lock/unlock

Exemplos práticos

Dar chave permanente via export server

exports['mri_Qcarkeys']:GiveKeyItem(source, 'ABC1234', vehicleNetId)

Verificar se jogador tem chave temporária

local hasKey = exports['mri_Qcarkeys']:HaveTemporaryKey('ABC1234')
if hasKey then
    -- jogador tem chave temporária
end

Dar chaves temporárias via comando admin

TriggerEvent('mm_carkeys:server:acquiretempvehiclekeys', source, 'ABC1234')

Configurar chance de hotwiring com cw-rep

A chance de hotwiring é escalada pelo nível de reputação no cw-rep (níveis 1-8), começando em Config.hotwire.chance (10% padrão).

Solução de problemas

  • Chaves não funcionam: Verifique se o framework e inventory estão sendo detectados corretamente
  • Motor não liga: Com keepKeysInVehicle = true, o veículo verifica o entity state keysIn
  • Hotwiring não dispara: Verifique se Config.hotwire.available = true e jogador não tem chave
  • Lockpick quebra sempre: Ajuste Config.lockpick.breakChance e advancedBreakChance
  • Carjacking cooldown: Há cooldown de 5 segundos entre tentativas
  • Stacking converte tudo: O stacking converte todos os itens vehiclekey em um único keybag com metadata de placas
  • NPCs fogem: NPCs ocupantes fogem quando um carjacking é bem-sucedido
  • Desligar motor consome chave: Com keepKeysInVehicle = true, desligar consome a chave permanente e concede temporária