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

# Funções Client

> Documentação das funções do lado do cliente disponíveis para personalização

# 🖥️ Funções Client

Esta página documenta todas as funções disponíveis no lado do cliente que você pode usar ou personalizar.

***

## 📍 Blips (`blips.lua`)

Gerenciamento de blips no mapa durante as corridas.

### Blips.create

Cria um blip no mapa para um checkpoint.

```lua theme={null}
function Blips.create(blipConfigs, id, coords, last, route)
```

**Parâmetros:**

| Parâmetro     | Tipo      | Descrição                   |
| ------------- | --------- | --------------------------- |
| `blipConfigs` | `table`   | Configuração do blip        |
| `id`          | `number`  | ID do checkpoint            |
| `coords`      | `table`   | Coordenadas \{x, y, z}      |
| `last`        | `boolean` | Se é o último checkpoint    |
| `route`       | `boolean` | Se deve marcar rota no mapa |

**Retorno:** `number?` - ID do blip criado ou `nil`

***

### Blips.delete

Remove um blip do mapa.

```lua theme={null}
function Blips.delete(blipId)
```

***

## 🎥 Câmera (`camera.lua`)

Animações cinematográficas de câmera.

### Camera.raceStartAnimation

Executa a animação de câmera no início da corrida.

```lua theme={null}
function Camera.raceStartAnimation()
```

A função cria 3 câmeras em diferentes ângulos e faz transições suaves entre elas:

1. **Câmera 1:** Vista lateral do veículo
2. **Câmera 2:** Vista frontal diagonal
3. **Câmera 3:** Vista do outro lado

<Info>
  A animação só é executada se `Config.raceStartCamAnim = true`.
</Info>

***

## 🎯 Checkpoints (`checkpoints.lua`)

Sistema de criação e gerenciamento de checkpoints.

### Checkpoints.init

Inicializa o módulo com suas dependências.

```lua theme={null}
function Checkpoints.init(particles, blips, props)
```

***

### Checkpoints.draw

Desenha um checkpoint com todos seus elementos visuais.

```lua theme={null}
function Checkpoints.draw(id, mode, last, coords, nCoords, drawNext)
```

**Parâmetros:**

| Parâmetro  | Tipo      | Descrição                                |
| ---------- | --------- | ---------------------------------------- |
| `id`       | `number`  | ID do checkpoint                         |
| `mode`     | `string`  | `"preview"`, `"racing"`, `"racing_next"` |
| `last`     | `boolean` | Se é o último checkpoint                 |
| `coords`   | `table`   | Coordenadas do checkpoint                |
| `nCoords`  | `table?`  | Coordenadas do próximo checkpoint        |
| `drawNext` | `boolean` | Se deve desenhar preview do próximo      |

***

### Checkpoints.clear

Remove um checkpoint e todos seus elementos.

```lua theme={null}
function Checkpoints.clear(id)
```

***

### Checkpoints.get

Obtém os dados de um checkpoint.

```lua theme={null}
function Checkpoints.get(id)
```

**Retorno:** `table?` com estrutura:

```lua theme={null}
{
    checkpoint = number,   -- ID do checkpoint visual
    particleId = number?,  -- ID da partícula
    blipId = number?,      -- ID do blip
    propId = number?       -- ID do prop
}
```

***

## 👻 Ghost Mode (`ghost.lua`)

Controle de colisões entre jogadores.

### Ghost.toggle

Ativa ou desativa o modo fantasma.

```lua theme={null}
function Ghost.toggle(toggle, vehicle, players)
```

**Parâmetros:**

| Parâmetro | Tipo      | Descrição                     |
| --------- | --------- | ----------------------------- |
| `toggle`  | `boolean` | Ativar/desativar              |
| `vehicle` | `number`  | Entity ID do veículo          |
| `players` | `table`   | Lista de jogadores na corrida |

**Implementação atual:**

```lua theme={null}
SetLocalPlayerAsGhost(toggle)
```

<Tip>
  Você pode modificar esta função para implementar ghost mode apenas entre participantes da corrida em vez de global.
</Tip>

***

## ✅ Validators (`validators.lua`)

Funções de validação para ações do jogador.

### Validators.canOpenPanel

Verifica se o jogador pode abrir o painel da corrida.

```lua theme={null}
function Validators.canOpenPanel(raceId)
```

**Validações:**

* Jogador está em um veículo
* Jogador está no banco do motorista

**Retorno:** `boolean`

***

### Validators.canEnterRace

Verifica se o jogador pode entrar na corrida.

```lua theme={null}
function Validators.canEnterRace(raceId, allowedVehicles)
```

**Parâmetros:**

| Parâmetro         | Tipo     | Descrição                      |
| ----------------- | -------- | ------------------------------ |
| `raceId`          | `number` | ID da corrida                  |
| `allowedVehicles` | `table`  | Classes de veículos permitidas |

**Classes de veículos disponíveis:**

| Classe        | IDs do GTA | Tipos                                                  |
| ------------- | ---------- | ------------------------------------------------------ |
| `cars`        | 0-7        | Compactos, Sedans, SUVs, Coupes, Muscle, Sports, Super |
| `trucks`      | 10, 11     | Caminhões, Utilitários                                 |
| `motorcycles` | 8, 9       | Motos, Quadriciclos                                    |
| `bicycles`    | 13         | Bicicletas                                             |
| `boats`       | 14         | Barcos                                                 |
| `helicopters` | 15         | Helicópteros                                           |
| `planes`      | 16         | Aviões                                                 |
| `service`     | 17, 18     | Veículos de serviço                                    |
| `vans`        | 12         | Vans                                                   |

<Warning>
  **Não é possível adicionar novas classes de veículos.** Utilize apenas as classes já existentes listadas acima. Essas classes são definidas pelo GTA V e não podem ser expandidas.
</Warning>

**Retorno:** `boolean`

***

## 🔊 Sons (`sounds.lua`)

Sistema de reprodução de sons.

### Sons Configurados

Os sons são definidos em `Config.Sounds`:

```lua theme={null}
Config.Sounds = {
    reach_checkpoint = { enabled = true, name = "...", set = "..." },
    finish_success = { enabled = true, name = "...", set = "..." },
    regressive_countdown = { enabled = true, name = "...", set = "..." },
}
```

***

## ✨ Partículas (`particles.lua`)

Sistema de efeitos de partículas nos checkpoints.

### Estrutura de Configuração

```lua theme={null}
{
    enabled = true,
    dict = 'core',
    name = 'ent_amb_steam',
    scale = 1.5,
}
```

***

## 🏗️ Props (`props.lua`)

Sistema de objetos decorativos nos checkpoints.

### Estrutura de Configuração

```lua theme={null}
{
    enabled = true,
    model = "prop_offroad_tyres02",
    offsetDistance = 4.0,
    alpha = 255,
    solo = false,
    collision = false,
}
```

| Propriedade | Descrição                                        |
| ----------- | ------------------------------------------------ |
| `solo`      | Se `true`, spawna apenas um prop (lado esquerdo) |
| `collision` | Se `true`, o prop terá colisão física            |
| `alpha`     | Transparência (0 = invisível, 255 = sólido)      |

***

## 🖼️ Interface (`ui.lua`)

Funções de interface do usuário.

### drawText (interno)

Desenha texto flutuante para indicar entrada na corrida.

```lua theme={null}
local function drawText(raceCoords)
```

***

## 🎁 Itens Coletáveis Client (`collectable_items.lua`)

Sistema de power-ups no lado do cliente.

### Efeitos Visuais

Cada item pode ter partículas configuradas:

```lua theme={null}
local itemParticles = {
    repair = {
        dict = "core",
        name = "ent_sht_electrical_box",
        bone = "chassis",
        offset = vector3(0.0, 0.0, 0.3),
        rotation = vector3(0.0, 0.0, 0.0),
        scale = 0.8,
        color = {0, 255, 150}
    },
    -- ... outros itens
}
```

### Funções de Uso

<Tabs>
  <Tab title="Nitro" icon="rocket">
    ```lua theme={null}
    local function onUseNitro()
        local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
        
        SetVehicleRocketBoostActive(vehicle, true)
        SetVehicleNitroEnabled(vehicle, true)
        SetVehicleBoostActive(vehicle, true)
        ModifyVehicleTopSpeed(vehicle, 50.0)
        
        -- Efeito de chamas no escapamento
        CreateThread(function()
            while usingNitro do
                fireExaust(vehicle)
                Wait(100)
            end
        end)
    end
    ```
  </Tab>

  <Tab title="Reparo" icon="wrench">
    ```lua theme={null}
    local function onUseRepair()
        local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
        
        SetVehicleFixed(vehicle)
        SetVehicleDeformationFixed(vehicle)
        SetVehicleUndriveable(vehicle, false)
        SetVehicleEngineOn(vehicle, true, true, false)
    end
    ```
  </Tab>
</Tabs>
