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

> Interface NUI (React) que permite ao jogador sobrescrever localmente o clima e o horário do jogo, com opção de ressincronizar com o clima/horário globais da cidade.

O **five-weather** abre, via `/clima`, um painel onde o jogador escolhe clima e/ou horário. A alteração é **local (client-side)**: grava um state bag `cw_override` no jogador (`weather`, `hour`, `minute`).

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Override de clima" icon="cloud-sun">
    O jogador escolhe o clima que ele próprio enxerga, localmente.
  </Card>

  <Card title="Override de horário" icon="clock">
    Define hora e minuto locais sem afetar os demais jogadores.
  </Card>

  <Card title="Ressincronizar" icon="rotate">
    Volta ao clima/horário globais da cidade a qualquer momento.
  </Card>

  <Card title="Controle de acesso" icon="lock">
    Liberação pública ou restrita a grupos/níveis configuráveis.
  </Card>
</CardGroup>

<Note>
  A aplicação efetiva **não acontece neste recurso**: quem lê `LocalPlayer.state.cw_override` e chama as natives (`SetWeatherTypeNow`, `NetworkOverrideClockTime`, etc.) é o **five-modules**. Ele precisa estar rodando para o override ter efeito visual. Ao resetar, o jogador volta ao clima/horário globais (`GlobalState`, definidos por `[scripts]/hud` e `[scripts]/ticket`).

  Este recurso **não altera o clima global** para todos, só o que o próprio jogador vê.
</Note>

***

## Dependências

<CardGroup cols={2}>
  <Card title="vRP" icon="cube">
    `vRP.Passport`, `vRP.HasGroup`.
  </Card>

  <Card title="@vrp/config/Global.lua" icon="palette">
    Tabela `Theme`.
  </Card>

  <Card title="five-modules" icon="gears">
    Dependência funcional: lê o state e aplica clima/horário.
  </Card>

  <Card title="Notify" icon="bell">
    Sistema de notificações para feedback.
  </Card>
</CardGroup>

***

## Configuração

<AccordionGroup>
  <Accordion title="shared-side/config.lua — Configurações (tabela Weather)" icon="sliders">
    ```lua theme={null}
    Weather.Command = "clima"   -- comando que abre o painel

    Weather.Public = true       -- true = libera para todos (ignora Permissions)
    Weather.Permissions = { { "Admin", 5 }, "Streamer" }
    -- Se Public=false, exige um dos grupos. Formato: { "Grupo", nivelMin } ou "Grupo" (sem nível).

    Weather.ThemeColor = "#0143bb"  -- cor da UI (Theme.main tem prioridade)
    ```
  </Accordion>
</AccordionGroup>

***

## Comandos

O recurso registra apenas um comando de chat.

| Comando  | Permissão                                                                                                                                                                                  | Descrição                                                                                            |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| `/clima` | `Weather.Public` (padrão `true` = todos). Com `Public = false`, exige um dos grupos de `Weather.Permissions` (padrão `{ "Admin", 5 }` ou `"Streamer"`), checado por `Core.CheckPermission` | Abre o painel de clima/horário. O comando apenas abre a NUI; a validação de acesso ocorre no Tunnel. |

***

## Localizações

Não possui pontos fixos no mapa. O override de clima/horário é estritamente local ao jogador (state bag `cw_override`), sem peds, blips, lojas ou zonas com coordenadas.

***

## Exports

Nenhum export Lua. A comunicação usa **Tunnel** (`Tunnel.bindInterface("five-weather", Core)`):

| Função (Tunnel)          | Retorno | Descrição                               |
| ------------------------ | ------- | --------------------------------------- |
| `Core.CheckPermission()` | boolean | `true` se o jogador pode usar o painel. |

***

## Eventos

* **NUI callbacks** (`five-weather`): `close`, `setWeather` (define clima), `setTime` (define hora/minuto), `reset` (volta ao global).
* **State bag:** `LocalPlayer.state:set("cw_override", {...}, false)` (não replicado, override estritamente local).
* Feedback via `Notify`.

<Note>
  **Não acessa banco de dados** e **não cria comandos server-side**. Sem persistência: ao reconectar, volta ao clima/horário globais.
</Note>

***

## Customização

* **Comando:** `Weather.Command`.
* **Acesso:** `Weather.Public` + `Weather.Permissions` (use `{ "Grupo", Nivel }` ou `"Grupo"`).
* **Cor:** `Weather.ThemeColor` (ou `Theme.main`).
* **Comportamento de aplicação:** depende do `five-modules` (lógica que lê `cw_override`).
