> ## Documentation Index
> Fetch the complete documentation index at: https://docs.temacstore.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Script de Veículos FiveM — Garagem e Controle de Frota

> Gerencie veículos no seu servidor FiveM com garagem pessoal, compra e venda, spawner configurável e controle de propriedade por personagem.

O módulo de **Veículos** oferece um sistema completo de garagem para o seu servidor FiveM. Os jogadores podem guardar, retirar e gerenciar seus veículos, com suporte a múltiplas garagens, sistema de propriedade vinculado ao personagem e integração com o sistema de economia.

## Funcionalidades

* Garagem pessoal por personagem
* Múltiplas localizações de garagem configuráveis
* Compra e venda de veículos (integração com Economia)
* Spawner de veículos para jobs específicos
* Histórico de veículos impoundados
* Blips automáticos no mapa para garagens
* Compatível com ox\_target para interação por proximidade

## Configuração de Garagens

Defina todas as garagens do servidor em `config.lua`. O campo `type` controla quem pode acessar cada garagem: `'public'` é aberta a todos, `'job'` é restrita aos empregos listados em `jobs`, e `'private'` requer que o jogador seja dono de um imóvel vinculado.

```lua config.lua theme={null}
Config.Garages = {
    ['garagem_central'] = {
        label = 'Garagem Central',
        type = 'public',            -- 'public', 'job' ou 'private'
        spawnPoint = vector4(-323.5, -816.9, 29.4, 248.5),
        blip = { sprite = 357, color = 3, label = 'Garagem Central' },
    },
    ['garagem_policia'] = {
        label = 'Garagem da Polícia',
        type = 'job',
        jobs = { 'police', 'sheriff' },
        spawnPoint = vector4(456.2, -1015.2, 28.0, 90.0),
        blip = { sprite = 357, color = 29, label = 'Garagem PM' },
    },
}
```

## Spawner de Veículos para Jobs

Permita que membros de jobs específicos spawnem veículos oficiais conforme o cargo. Cada número de grade libera os modelos listados — um jogador de grade superior herda os veículos de grades inferiores.

```lua config.lua theme={null}
Config.JobVehicles = {
    ['police'] = {
        [0] = { 'police', 'police2' },                 -- Grade 0: viaturas básicas
        [3] = { 'police', 'police2', 'policeb' },      -- Grade 3+: motos incluídas
        [4] = { 'fbi', 'fbi2', 'police', 'policeb' },  -- Capitão: acesso a SUVs
    },
    ['ambulance'] = {
        [0] = { 'ambulance' },
        [2] = { 'ambulance', 'lguard' },
    },
}
```

## Configuração de Propriedade

Controle o comportamento dos veículos próprios de cada personagem, incluindo o que acontece após a morte e os limites de frota.

```lua config.lua theme={null}
Config.VehicleOwnership = {
    storeOnDeath       = true,   -- Guarda o veículo automaticamente ao morrer
    maxOwnedVehicles   = 5,      -- Máximo de veículos por personagem (0 = ilimitado)
    allowSharing       = true,   -- Permite que outros jogadores retirem o veículo do dono
    impoundFee         = 500,    -- Taxa em R$ para retirar veículo do pátio
}
```

## Interação por Target

Para substituir os menus de aproximação pelo sistema de target (ox\_target), ative a opção abaixo no `config.lua`:

```lua config.lua theme={null}
Config.UseTarget = true  -- false por padrão; requer ox_target instalado
```

<Tip>
  Com `Config.UseTarget = true`, o jogador interage com a garagem mirando nela e pressionando a tecla de interação do ox\_target, em vez de abrir um menu automático ao se aproximar.
</Tip>

## Comandos do Módulo Veículos

| Comando             | Permissão            | Descrição                                   |
| ------------------- | -------------------- | ------------------------------------------- |
| `/garagem`          | Qualquer jogador     | Abre a garagem mais próxima                 |
| `/tempveh [modelo]` | `vehicles.admin`     | Spawna um veículo temporário (sem registro) |
| `/delveh`           | `vehicles.admin`     | Remove o veículo mais próximo do mundo      |
| `/impound [placa]`  | `vehicles.moderator` | Apreende um veículo pelo número de placa    |

## API — Integrações via Exports e Eventos

### Verificar se jogador tem veículo estacionado (servidor)

```lua theme={null}
local count = exports['veiculos']:GetPlayerVehicleCount(source)
-- Retorna o número de veículos registrados para o personagem
```

### Spawnar veículo por script (servidor)

```lua theme={null}
exports['veiculos']:SpawnVehicle(source, 'police', vector4(441.1, -982.1, 30.7, 90.0))
-- Parâmetros: source, modelo (string), posição (vector4 com heading)
```

### Evento disparado ao guardar veículo (cliente)

```lua theme={null}
AddEventHandler('veiculos:onVehicleStored', function(plate)
    print('Veículo ' .. plate .. ' guardado na garagem.')
end)
```

### Evento disparado ao retirar veículo (cliente)

```lua theme={null}
AddEventHandler('veiculos:onVehicleSpawned', function(plate, model)
    print('Veículo ' .. model .. ' (' .. plate .. ') retirado da garagem.')
end)
```

## Resolução de Problemas

| Problema                          | Causa provável                               | Solução                                                          |
| --------------------------------- | -------------------------------------------- | ---------------------------------------------------------------- |
| Garagem não aparece no mapa       | Blip não configurado ou recurso não iniciado | Confirme que o campo `blip` está preenchido e reinicie o recurso |
| Veículo não retorna após morte    | `storeOnDeath = false`                       | Ative `storeOnDeath = true` em `Config.VehicleOwnership`         |
| Spawner de job não funciona       | Modelo de veículo inválido                   | Confirme o nome do modelo usando o nome interno do GTA V         |
| Interação por target não funciona | ox\_target não instalado                     | Instale e inicie o ox\_target antes de ativar `Config.UseTarget` |
