# CyberM.environment — client runtime

Runs inside the game process. Reads and presentation are local; anything that changes shared state has to go through the server.

6 functions.

## getTime

```lua
CyberM.environment.getTime()
```

`GAME` — Requires a live game instance.

Lit l'horloge REDengine locale.

Primitive interne protégée par `world.environment`. Retourne un snapshot atomique de l'heure appliquée et de l'état de pause. Dans une session normale, utilisez l'export `cyberm_weather.getState` plutôt que cette valeur de projection.

Returns: `table { day, hour, minute, second, totalSeconds, frozen }, ou nil`, `raison si indisponible`

Registered in `ResourceHost.cpp` (line 6739) as `LuaEnvironmentTime`.

## isWeatherFrozen

```lua
CyberM.environment.isWeatherFrozen()
```

`GAME` — Requires a live game instance.

Indique si la météo automatique vanilla est neutralisée.

Demande `world.environment`.

Returns: `boolean, ou nil`, `raison si indisponible`

Registered in `ResourceHost.cpp` (line 6744) as `LuaEnvironmentWeatherFrozen`.

## setTime

```lua
CyberM.environment.setTime(hour, minute, [second])
```

`GAME` — Requires a live game instance.

Projette une heure serveur dans REDengine.

Demande `world.environment`. `cyberm_weather` est normalement le seul propriétaire de cette permission. REDengine choisit la prochaine occurrence de l'heure demandée ; le package officiel filtre donc les petits reculs réseau pour éviter un saut d'un jour.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `hour` | `integer 0..23` | required | — |
| `minute` | `integer 0..59` | required | — |
| `second` | `integer 0..59` | optional | `0` |

Returns: `true en cas de succès, sinon false`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6740) as `LuaEnvironmentSetTime`.

## setTimeFrozen

```lua
CyberM.environment.setTimeFrozen(frozen)
```

`GAME` — Requires a live game instance.

Fige ou libère uniquement l'horloge du jeu.

Ne fige pas la simulation. Demande `world.environment`; utilisé par la projection serveur pour neutraliser la vitesse vanilla.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `frozen` | `boolean` | required | — |

Returns: `true en cas de succès, sinon false`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6741) as `LuaEnvironmentFreezeTime`.

## setWeather

```lua
CyberM.environment.setWeather(preset, [transitionSeconds], [priority])
```

`GAME` — Requires a live game instance.

Applique un preset météo REDengine.

Primitive interne demandant `world.environment`. Le second retour `applied=false` est aussi possible en cas de succès si le preset était déjà actif.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `preset` | `string` | required | — |
| `transitionSeconds` | `number` | optional | `0` |
| `priority` | `integer` | optional | `5` |

Returns: `true en cas de succès, sinon false`, `applied si succès, sinon raison du refus`

Registered in `ResourceHost.cpp` (line 6742) as `LuaEnvironmentSetWeather`.

## setWeatherFrozen

```lua
CyberM.environment.setWeatherFrozen(frozen)
```

`GAME` — Requires a live game instance.

Désactive ou réactive le contrôleur météo automatique vanilla.

Demande `world.environment`. Figer conserve le preset courant et laisse le serveur décider du prochain événement.

| Parameter | Type | Required | Default |
|---|---|---|---|
| `frozen` | `boolean` | required | — |

Returns: `true en cas de succès, sinon false`, `raison du refus`

Registered in `ResourceHost.cpp` (line 6743) as `LuaEnvironmentFreezeWeather`.

