> ## 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.

# Configurações Server

> Configurações do servidor para recompensas, webhooks e integrações

# ⚙️ Configurações Server

Estas configurações controlam a lógica do servidor, recompensas, integrações com frameworks e webhooks do Discord. Localizadas em `config/server/config.lua`.

***

## 🎮 Configurações Gerais

```lua theme={null}
-- Tempo em segundos de cooldown para trocar nickname (86400 = 24 horas)
Config.nicknameChangeCooldown = 86400

-- Se true, apenas uma corrida pode estar ativa por vez
Config.singleRace = false

-- Raio em metros para limpar veículos ao redor da fila
Config.clearQueueArea = 5

-- Caminho para o banco de dados NoSQL
Config.noSqlPath = "nosql/database"
```

<AccordionGroup>
  <Accordion title="nicknameChangeCooldown" icon="clock" defaultOpen>
    | Propriedade | Valor              |
    | ----------- | ------------------ |
    | **Tipo**    | `number`           |
    | **Padrão**  | `86400` (24 horas) |
    | **Unidade** | Segundos           |

    Define quanto tempo o jogador deve esperar antes de poder alterar seu nickname novamente.

    **Valores comuns:**

    * `3600` = 1 hora
    * `86400` = 24 horas (1 dia)
    * `604800` = 7 dias
    * `0` = Sem cooldown
  </Accordion>

  <Accordion title="singleRace" icon="1">
    | Propriedade | Valor     |
    | ----------- | --------- |
    | **Tipo**    | `boolean` |
    | **Padrão**  | `false`   |

    Quando `true`, apenas uma corrida pode ocorrer por vez no servidor. Útil para servidores menores ou para criar eventos especiais.

    <Warning>
      Se ativado, jogadores não poderão iniciar novas corridas enquanto houver uma em andamento.
    </Warning>
  </Accordion>

  <Accordion title="clearQueueArea" icon="broom">
    | Propriedade | Valor    |
    | ----------- | -------- |
    | **Tipo**    | `number` |
    | **Padrão**  | `5`      |
    | **Unidade** | Metros   |

    Define o raio ao redor dos pontos de fila onde veículos abandonados serão removidos automaticamente ao iniciar uma corrida.
  </Accordion>

  <Accordion title="noSqlPath" icon="database">
    | Propriedade | Valor              |
    | ----------- | ------------------ |
    | **Tipo**    | `string`           |
    | **Padrão**  | `"nosql/database"` |

    Caminho relativo para o armazenamento do banco de dados NoSQL interno. Aqui são salvas as rotas das corridas, e pontos de inicio.

    <Tip>
      Certifique-se de que a pasta existe e tem permissões de escrita.
    </Tip>
  </Accordion>
</AccordionGroup>

***

## 🏁 Valores Padrão - Criação de Corridas

Valores aplicados automaticamente ao criar uma nova corrida.

```lua theme={null}
Config.RaceCreationDefaults = {
    bonus_prize = 1.0,
    required_item = "",
    required_item_quantity = 1,
    collectable_items = false,
    cooldown = 30,
    min_runners = 1,
    active = false
}
```

| Propriedade              | Tipo      | Padrão  | Descrição                                        |
| ------------------------ | --------- | ------- | ------------------------------------------------ |
| `bonus_prize`            | `number`  | `1.0`   | Multiplicador de prêmio (1.0 = 100%)             |
| `required_item`          | `string`  | `""`    | Item necessário para participar (vazio = nenhum) |
| `required_item_quantity` | `number`  | `1`     | Quantidade do item necessário                    |
| `collectable_items`      | `boolean` | `false` | Ativar power-ups durante a corrida               |
| `cooldown`               | `number`  | `30`    | Tempo em minutos entre participações             |
| `min_runners`            | `number`  | `1`     | Mínimo de corredores para iniciar                |
| `active`                 | `boolean` | `false` | Se a corrida inicia ativa                        |

<Info>
  Esses valores podem ser alterados individualmente ao criar cada corrida através do painel administrativo.
</Info>

***

## 🛤️ Valores Padrão - Criação de Rotas

Valores aplicados automaticamente ao criar uma nova rota.

```lua theme={null}
Config.RouteCreationDefaults = {
    time_limit_seconds = 50,
    is_explosive = true,
    is_ilegal = true,
    reward_min = 1000,
    reward_max = 5000,
    is_active = false
}
```

| Propriedade          | Tipo      | Padrão  | Descrição                             |
| -------------------- | --------- | ------- | ------------------------------------- |
| `time_limit_seconds` | `number`  | `50`    | Limite de tempo para completar a rota |
| `is_explosive`       | `boolean` | `true`  | Veículo explode ao falhar             |
| `is_ilegal`          | `boolean` | `true`  | Rota é ilegal (alerta polícia)        |
| `reward_min`         | `number`  | `1000`  | Recompensa mínima                     |
| `reward_max`         | `number`  | `5000`  | Recompensa máxima                     |
| `is_active`          | `boolean` | `false` | Se a rota inicia ativa                |

<Warning>
  Rotas marcadas como **ilegais** (`is_ilegal = true`) enviarão alertas para todos os policiais online quando a corrida iniciar.
</Warning>

***

## 🔗 Integração com Framework

Configurações para integração com o framework do servidor.

```lua theme={null}
-- Permissão necessária para policiais (nil = usa padrão do framework)
Config.policePermission = nil

-- Item usado como dinheiro sujo em frameworks VRP
Config.dirtyDollarItem = nil
```

<Tabs>
  <Tab title="policePermission" icon="badge-sheriff">
    | Propriedade | Valor             |
    | ----------- | ----------------- |
    | **Tipo**    | `string` ou `nil` |
    | **Padrão**  | `nil`             |

    Define qual permissão identifica policiais no seu framework. Se `nil`, usa valores padrão:

    | Framework     | Permissão Padrão      |
    | ------------- | --------------------- |
    | VRP CRNetwork | `"Policia"`           |
    | VRP vRPEX     | `"policia.permissao"` |
    | Outros        | `"Police"`            |

    **Exemplo de uso:**

    ```lua theme={null}
    Config.policePermission = "police.duty"
    ```
  </Tab>

  <Tab title="dirtyDollarItem" icon="money-bill">
    | Propriedade | Valor             |
    | ----------- | ----------------- |
    | **Tipo**    | `string` ou `nil` |
    | **Padrão**  | `nil`             |

    Define o nome do item usado como "dinheiro sujo" em frameworks VRP. Usado para entregar recompensas de corridas ilegais.

    **Itens comuns por framework:**

    | Framework     | Item             |
    | ------------- | ---------------- |
    | VRP CRNetwork | `"dollarsroll"`  |
    | VRP CRv3/CRv5 | `"dollars2"`     |
    | VRP Padrão    | `"dinheirosujo"` |

    <Info>
      Se `nil`, o script tentará detectar automaticamente baseado no framework.
    </Info>
  </Tab>
</Tabs>

***

## 📢 Webhooks Discord

Configure notificações automáticas para um canal do Discord.

```lua theme={null}
Config.Webhooks = {
    raceStart = "",
    raceFinish = ""
}
```

| Propriedade  | Tipo     | Descrição                                        |
| ------------ | -------- | ------------------------------------------------ |
| `raceStart`  | `string` | URL do webhook para notificar início de corridas |
| `raceFinish` | `string` | URL do webhook para notificar fim de corridas    |

### Como Criar um Webhook

<Steps>
  <Step title="Acesse as configurações do canal">
    No Discord, vá ao canal desejado → Configurações → Integrações → Webhooks
  </Step>

  <Step title="Crie um novo webhook">
    Clique em "Novo Webhook" e personalize o nome e avatar
  </Step>

  <Step title="Copie a URL">
    Clique em "Copiar URL do Webhook"
  </Step>

  <Step title="Cole no config">
    Adicione a URL no arquivo de configuração:

    ```lua theme={null}
    Config.Webhooks = {
        raceStart = "https://discord.com/api/webhooks/...",
        raceFinish = "https://discord.com/api/webhooks/..."
    }
    ```
  </Step>
</Steps>

<Tip>
  Você pode usar o mesmo webhook para ambos os eventos ou webhooks diferentes para canais separados.
</Tip>

***

## 💰 Sistema de Recompensas

O sistema de recompensas está configurado em `config/server/functions/rewards.lua`.

```lua theme={null}
Rewards = {}

-- Bônus de recompensa por posição
Rewards.positionBonus = {
    [1] = 0,  -- 1º lugar: sem bônus extra
    [2] = 0,  -- 2º lugar
    [3] = 0,  -- 3º lugar
}
```

### Cálculo de Prêmio

```lua theme={null}
function Rewards.calculate(bonus, min, max, position)
    local posBonus = Rewards.positionBonus[position] or 0
    return ParseInt((math.random(min, max) + posBonus) * bonus)
end
```

**Fórmula:**

$$
\text{Prêmio} = \lfloor (\text{random}(\text{min}, \text{max}) + \text{bônusPosição}) \times \text{multiplicador} \rfloor
$$

### Personalizando Recompensas

Para adicionar bônus por posição:

```lua theme={null}
Rewards.positionBonus = {
    [1] = 1000,  -- 1º lugar: +$1000
    [2] = 500,   -- 2º lugar: +$500
    [3] = 250,   -- 3º lugar: +$250
}
```

### Integração com Frameworks

O sistema detecta automaticamente o framework e entrega a recompensa:

<Tabs>
  <Tab title="VRP" icon="v">
    Entrega como item (dinheiro sujo ou similar):

    ```lua theme={null}
    user.giveItem(item, reward, true)
    ```

    Itens por framework:

    * CRNetwork: `dollarsroll`
    * CRv3/CRv5: `dollars2`
    * Padrão: `dinheirosujo`
  </Tab>

  <Tab title="ESX / QBCore" icon="dollar-sign">
    Deposita diretamente no banco:

    ```lua theme={null}
    user.paymentBank(reward)
    ```
  </Tab>
</Tabs>

***

## 🚔 Sistema de Polícia

Configurado em `config/server/functions/police.lua`.

### Funcionalidades

1. **Alertas automáticos** quando corridas ilegais iniciam
2. **Rastreamento em tempo real** dos corredores
3. **Blips no mapa** para policiais

### Personalização

```lua theme={null}
-- Em config/server/config.lua
Config.policePermission = "police.duty"  -- Sua permissão de polícia
```

### Exemplo de Alerta

Quando uma corrida ilegal inicia, policiais recebem:

```
⚠️ Corrida ilegal: Uma corrida foi iniciada em [Nome da Corrida]
```

***

## 📝 Exemplo Completo

```lua theme={null}
-- config/server/config.lua

-- ========================================
-- CONFIGURAÇÕES GERAIS
-- ========================================

Config.nicknameChangeCooldown = 86400
Config.singleRace = false
Config.clearQueueArea = 5
Config.noSqlPath = "nosql/database"

-- ========================================
-- VALORES PADRÃO - CRIAÇÃO DE CORRIDAS
-- ========================================

Config.RaceCreationDefaults = {
    bonus_prize = 1.0,
    required_item = "",
    required_item_quantity = 1,
    collectable_items = true,  -- Ativar power-ups por padrão
    cooldown = 15,             -- 15 minutos de cooldown
    min_runners = 2,           -- Mínimo 2 corredores
    active = false
}

-- ========================================
-- VALORES PADRÃO - CRIAÇÃO DE ROTAS
-- ========================================

Config.RouteCreationDefaults = {
    time_limit_seconds = 120,  -- 2 minutos
    is_explosive = false,      -- Não explodir ao falhar
    is_ilegal = true,          -- Alertar polícia
    reward_min = 2000,
    reward_max = 10000,
    is_active = false
}

-- ========================================
-- INTEGRAÇÃO COM FRAMEWORK
-- ========================================

Config.policePermission = "police.duty"
Config.dirtyDollarItem = "dinheirosujo"

-- ========================================
-- WEBHOOKS DISCORD
-- ========================================

Config.Webhooks = {
    raceStart = "https://discord.com/api/webhooks/123456789/abc...",
    raceFinish = "https://discord.com/api/webhooks/123456789/xyz..."
}
```
