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

# five-routes

> Sistema de rotas de farm: o jogador abre um ponto (NPC), escolhe insumos e um estilo (terrestre/aquática/aérea), paga o custo e percorre pontos no mapa guiado por GPS, coletando itens. Suporta multiplicadores por horário, por zona e bônus VIP.

O **five-routes** é um sistema de rotas de farm: cada ponto físico (`Routes.Points`) é vinculado a rotas (`Routes.Routes`) que definem insumos, custos e recompensas. Ao iniciar, o servidor valida permissão/itens/cobrança e escolhe uma pool de coordenadas conforme o estilo; o cliente cria blips de GPS em sequência (rota cíclica) e o jogador coleta em cada parada.

<Note>
  A **permissão é verificada pela chave do ponto** (ex.: para acessar `Municao1`, o jogador precisa da permissão vRP `Municao1`). O estado é só em memória (uma rota ativa por jogador, sem persistência).
</Note>

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Estilos de rota" icon="route">
    Estilos terrestre, aquática e aérea, cada um com seus próprios parâmetros de coleta.
  </Card>

  <Card title="GPS em sequência" icon="map-location-dot">
    O cliente cria blips de GPS em sequência (rota cíclica); o jogador coleta em cada parada.
  </Card>

  <Card title="Multiplicadores" icon="chart-line">
    Multiplicadores por horário (`Schedule`) e por zona (`ZoneMultiplier`), além de bônus VIP.
  </Card>

  <Card title="Economia configurável" icon="money-bill">
    Custos, preços de insumo e recompensas (`min`/`max`) definidos por rota e item.
  </Card>
</CardGroup>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vRP" icon="cube">
    Obrigatório: `Passport`, `HasTable`, `ItemAmount`, `GenerateItem`, `PaymentFull`, `UpgradeStress`, `exports.vrp:CallPolice`.
  </Card>

  <Card title="Configs do vRP" icon="gear">
    `@vrp/config/Global.lua` (`ItemsURL`) e `@vrp/config/Item.lua` (`ItemName`/`ItemIndex`/`ItemWeight`).
  </Card>

  <Card title="Sistema de interação" icon="hand-pointer">
    `sleepless_interact`, `ox_target` ou `marker`.
  </Card>
</CardGroup>

<Info>
  **Opcionais:** `five_logs` (log `COLETA-ROTA`) e `seattle-bonuses` (bônus VIP).
</Info>

***

## Configuração

<AccordionGroup>
  <Accordion title="config/config.lua — tabela Routes" icon="sliders">
    ```lua theme={null}
    Routes.Images = { BaseUrl = ItemsURL, Extension = ".png" }
    Routes.ThemeColor = "#0143bb"                  -- Theme.main tem prioridade
    Routes.NotificationPosition = "bottom-left"    -- posição do HUD de progresso

    Routes.Interaction = { System = "sleepless", AutoCloseDistance = 4.0, Sleepless = {...}, OxTarget = {...}, Marker = {...} }

    Routes.ZoneSettings = {
        terrestrial = { autoCollect = false, collectDistance = 3.0, markerDistance = 30.0, requiresOnFoot = true, collectAnim = {...} },
        aquatic     = { autoCollect = true,  collectDistance = 6.0, ... },
        aerial      = { autoCollect = true,  collectDistance = 15.0, markerType = 6, ... },
    }
    Routes.StyleToZone = { terrestre = "terrestrial", aquatica = "aquatic", aerea = "aerial" }
    Routes.DefaultCoordsZones = { terrestrial = "New", aquatic = "Aquaticas", aerial = "Aerea" }
    ```
  </Accordion>

  <Accordion title="Multiplicadores — FarmBuff e VipBonus" icon="chart-line">
    ```lua theme={null}
    Routes.FarmBuff = {
        Enabled = true, Multiplier = 1,
        ZoneMultiplier = { terrestrial = 1.0, aquatic = 2.0, aerial = 1.0 },
        Schedule = { Segunda = { Enabled = true, StartHour = 6, EndHour = 16 }, ... },  -- buff por dia/hora
        Notify = { Enabled = false, Message = "..." },
    }
    Routes.VipBonus = { Enabled = true, Export = "seattle-bonuses", Function = "GetBonusFarm" }
    ```
  </Accordion>

  <Accordion title="Rotas e pontos — Routes.Routes e Routes.Points" icon="route">
    ```lua theme={null}
    Routes.Routes = {
        Importacao = {
            RouteCost = 500,        -- custo base (0 = grátis)
            UpgradeStress = 1,      -- estresse por coleta
            CallPolice = false,     -- alerta a polícia?
            UsingVehicle = true,    -- permite coletar em veículo?
            Items = { { id = "aluminiofarm", price = 50, reward = { min = 2, max = 4 } } },  -- id = spawn do item
        },
    }

    Routes.Points = {
        Municao1 = {                              -- a CHAVE é a permissão exigida
            Routes = { "Municao" },               -- rotas disponíveis no ponto
            Coords = vec4(402.03,-4.98,84.92,238.12),
            NPC = true, Hash = "s_m_y_dealer_01", anim = { "dict", "anim" },
            -- AllowedStyles, CoordsZones, Blip são opcionais
        },
    }
    ```

    `Routes.Coords` define as pools (`New` terrestres, `Aquaticas`, `Aerea`).
  </Accordion>
</AccordionGroup>

***

## Comandos

<Info>
  Nenhum (interação por target/marcador).
</Info>

***

## Localizações

### NPCs / pontos de interação (`Routes.Points`)

A chave de cada ponto é a permissão vRP exigida. Todos criam um NPC (`NPC = true`). Modelo `s_m_y_dealer_01`, exceto os restaurantes (`s_m_y_chef_01`).

| Local          | Coordenadas                             | Tipo                   |
| -------------- | --------------------------------------- | ---------------------- |
| Municao1       | vec4(402.03, -4.98, 84.92, 238.12)      | NPC (Munição)          |
| Municao2       | vec4(1463.37, 1104.18, 119.13, 0.0)     | NPC (Munição)          |
| Municao3       | vec4(833.19, -2924.51, 1.79, 93.55)     | NPC (Munição)          |
| Municao4       | vec4(-1802.92, 485.71, 108.48, 130.4)   | NPC (Munição)          |
| Arma1          | vec4(-3695.4, 3822.98, 14.76, 153.08)   | NPC (Arma)             |
| Arma2          | vec4(-1908.96, 2064.33, 135.98, 158.75) | NPC (Arma)             |
| Arma3          | vec4(-1562.61, 89.08, 53.87, 274.97)    | NPC (Arma)             |
| Arma4          | vec4(-1564.02, 836.46, 177.19, 138.9)   | NPC (Arma)             |
| Arma5 (Yakuza) | vec4(-2292.1, -660.17, 20.17, 314.65)   | NPC (Arma)             |
| Contrabando1   | vec4(-691.06, 2706.93, 54.34, 110.56)   | NPC (Ilegal)           |
| Contrabando2   | vec4(-2933.72, 36.89, 11.61, 65.2)      | NPC (Ilegal)           |
| Contrabando3   | vec4(-2093.77, -353.6, 6.07, 354.34)    | NPC (Ilegal)           |
| Contrabando4   | vec4(-306.44, 6132.84, 14.2, 192.76)    | NPC (Ilegal)           |
| Lavagem1       | vec4(369.45, 241.9, 107.75, 155.91)     | NPC (Lavagem)          |
| Lavagem2       | vec4(-6.31, 250.54, 101.35, 164.41)     | NPC (Munição)          |
| Lavagem3       | vec4(-663.48, -703.63, 30.99, 181.42)   | NPC (Lavagem)          |
| Lavagem4       | vec4(-298.87, 6262.92, 34.79, 314.65)   | NPC (Lavagem)          |
| Desmanche1     | vec4(1988.84, 3016.58, 47.5, 59.53)     | NPC (Desmanche)        |
| Desmanche2     | vec4(1186.9, -3283.16, 5.53, 274.97)    | NPC (Desmanche)        |
| Desmanche3     | vec4(-2811.0, 1449.22, 96.25, 238.12)   | NPC (Desmanche)        |
| Desmanche4     | vec4(-335.53, -161.85, 39.06, 354.34)   | NPC (Desmanche)        |
| Metafetamina1  | vec4(1186.57, -23.52, 81.35, 138.9)     | NPC (Metanfetamina)    |
| Metafetamina2  | vec4(-461.9, 1589.99, 363.55, 348.67)   | NPC (Metanfetamina)    |
| Skunk1         | vec4(1314.18, -786.07, 79.01, 331.66)   | NPC (Skunk)            |
| Skunk2         | vec4(-2151.16, 866.27, 208.53, 209.77)  | NPC (Skunk)            |
| Cocaina1       | vec4(1543.09, -1374.39, 89.78, 257.96)  | NPC (Cocaína)          |
| Cocaina2       | vec4(-2487.37, -155.98, 45.21, 235.28)  | NPC (Cocaína)          |
| Ecstasy1       | vec4(-843.41, 982.2, 250.81, 280.63)    | NPC (Ecstasy)          |
| Ecstasy2       | vec4(2636.22, 1841.4, 36.97, 223.94)    | NPC (Ecstasy)          |
| Heroina1       | vec4(-1164.34, 2524.88, 41.48, 110.56)  | NPC (Heroína)          |
| Heroina2       | vec4(-1395.28, 1543.68, 132.46, 85.04)  | NPC (Heroína)          |
| SodaPop        | vec4(-1395.65, -1399.08, 3.91, 85.04)   | NPC chef (Restaurante) |
| MooMoo         | vec4(-593.73, -1058.99, 22.53, 87.88)   | NPC chef (Restaurante) |
| OsakaSushi     | vec4(-802.14, -148.87, 37.81, 121.89)   | NPC chef (Restaurante) |
| MarinaLounge   | vec4(1545.49, 3796.17, 34.51, 300.48)   | NPC chef (Restaurante) |
| KittyCafe      | vec4(1146.3, -801.19, 58.06, 87.88)     | NPC chef (Restaurante) |

### Pools de coordenadas de coleta (`Routes.Coords`)

São os pontos de GPS percorridos durante a rota (não pontos de interação). Listados por contagem, em `config/config.lua`:

| Pool              | Quantidade de pontos | Tipo             | Amostra (primeiro ponto)    |
| ----------------- | -------------------- | ---------------- | --------------------------- |
| `New` (terrestre) | 25                   | Pontos de coleta | (201.91, 2461.28, 55.18)    |
| `Aquaticas`       | 62                   | Pontos de coleta | (1329.21, 3844.31, 32.7)    |
| `Aerea`           | 71                   | Pontos de coleta | (-1314.41, -2961.54, 43.33) |

***

## Exports

<Info>
  Não publica exports próprios. Consome: `exports.vrp:CallPolice`, `exports["seattle-bonuses"]["GetBonusFarm"]`, `exports["five_logs"]:AddLog`.
</Info>

***

## Banco de Dados

<Info>
  Nenhum (estado em memória `ActiveRoutes`).
</Info>

***

## Customização

* **Novo ponto/NPC:** entrada em `Routes.Points` (chave = permissão vRP).
* **Nova rota/item:** entrada em `Routes.Routes` (`id` = spawn de item válido).
* **Interação:** `Routes.Interaction.System`.
* **Pontos de coleta:** edite `Routes.Coords` (pools).
* **Economia:** `RouteCost`, `price`, `reward {min,max}`, `UpgradeStress`; multiplicadores em `FarmBuff`/`VipBonus`.
* **Aparência:** `Routes.ThemeColor`, `Routes.NotificationPosition`.
