# qb-weathersync

## Introduction

* Handles the logic for changing and syncing the weather
* Ability to set weather sync/desync weather
* Use exports to call weather changing events to any resource

## Configuration

### General

```lua
Config                  = {}
Config.DynamicWeather   = true -- set this to false if you don't want the weather to change automatically every 10 minutes.

-- On server start
Config.StartWeather     = 'EXTRASUNNY' -- default weather
Config.BaseTime         = 8 -- time     
Config.TimeOffset       = 0 -- time offset 
Config.FreezeTime       = false -- freeze time 
Config.Blackout         = false -- set blackout                                 
Config.BlackoutVehicle  = false -- set blackout affects vehicles                
Config.NewWeatherTimer  = 10 -- time (in minutes) between each weather change   
Config.Disabled         = false -- set weather disabled                         
```

### Weather types

{% hint style="danger" %}
DON'T TOUCH EXCEPT IF YOU KNOW WHAT YOU ARE DOING
{% endhint %}

```lua
Config.AvailableWeatherTypes = {
    'EXTRASUNNY',
    'CLEAR',
    'NEUTRAL',
    'SMOG',
    'FOGGY',
    'OVERCAST',
    'CLOUDS',
    'CLEARING',
    'RAIN',
    'THUNDER',
    'SNOW',
    'BLIZZARD',
    'SNOWLIGHT',
    'XMAS',
    'HALLOWEEN',
}
```

## Exports

#### nextWeatherStage

Triggers event to switch weather to next stage

Lua example

```lua
local success = exports["qb-weathersync"]:nextWeatherStage();
```

JavaScript example

```javascript
const success = global.exports["qb-weathersync"].nextWeatherStage();
```

#### setWeather \[type]

Switch to a specified weather type from Config.AvailableWeatherTypes

Lua example

```lua
local success = exports["qb-weathersync"]:setWeather("snow");
```

JavaScript example

```javascript
const success = global.exports["qb-weathersync"].setWeather("snow");
```

#### setTime \[hour] (minute)

Sets sun position based on time to specified

Lua example

```lua
local success = exports["qb-weathersync"]:setTime(8, 10); -- 8:10 AM
```

JavaScript example

```javascript
const success = global.exports["qb-weathersync"].setTime(15, 30); // 3:30PM
```

#### setBlackout (true|false)

Sets or toggles blackout state and returns the state

Lua example

```lua
local newStatus = exports["qb-weathersync"]:setBlackout(); -- Toggle
```

JavaScript example

```javascript
const newStatus = global.exports["qb-weathersync"].setBlackout(true); // Enable
```

#### setTimeFreeze (true|false)

Sets or toggles time freeze state and returns the state

Lua example

```lua
local newStatus = exports["qb-weathersync"]:setTimeFreeze(); -- Toggle
```

JavaScript example

```javascript
const newStatus = global.exports["qb-weathersync"].setTimeFreeze(true); // Enable
```

#### setDynamicWeather (true|false)

Sets or toggles dynamic weather state and returns the state

Lua example

```lua
local newStatus = exports["qb-weathersync"]:setDynamicWeather(); -- Toggle
```

JavaScript example

```javascript
const newStatus = global.exports["qb-weathersync"].setDynamicWeather(true); // Enable
```

#### getBlackoutState

Returns if blackout is enabled or disabled

Lua example

```lua
local state = exports["qb-weathersync"]:getBlackoutState();
```

JavaScript example

```javascript
const state = global.exports["qb-weathersync"].getBlackoutState();
```

#### getTimeFreezeState

Returns if time progression is enabled or disabled

Lua example

```lua
local state = exports["qb-weathersync"]:getTimeFreezeState();
```

JavaScript example

```javascript
const state = global.exports["qb-weathersync"].getTimeFreezeState();
```

#### getWeatherState

Returns the current weather type

Lua example

```lua
local currentWeather = exports["qb-weathersync"]:getWeatherState();
```

JavaScript example

```javascript
const currentWeather = global.exports["qb-weathersync"].getWeatherState();
```

#### getDynamicWeather

Returns if time progression is enabled or disabled

Lua Example

```lua
local state = exports["qb-weathersync"]:getDynamicWeather();
```

JavaScript example

```javascript
const state = global.exports["qb-weathersync"].getDynamicWeather();
```

## Events

{% hint style="warning" %}
All of these examples are triggered CLIENT side!
{% endhint %}

#### RequestStateSync

```lua
TriggerServerEvent("qb-weathersync:server:RequestStateSync")
```

#### RequestCommands

```lua
TriggerServerEvent("qb-weathersync:server:RequestCommands")
```

#### setWeather

```lua
TriggerServerEvent("qb-weathersync:server:setWeather", type)
```

#### setTime

```lua
TriggerServerEvent("qb-weathersync:server:setTime", hour, minute)
```

#### toggleBlackout

```lua
TriggerServerEvent("qb-weathersync:server:toggleBlackout", bool)
```

#### toggleFreezeTime

```lua
TriggerServerEvent("qb-weathersync:server:toggleFreezeTime", bool, minute)
```

#### toggleDynamicWeather

```lua
TriggerServerEvent("qb-weathersync:server:toggleDynamicWeather", bool)
```

## Commands

/freezetime - Toggle time progression

/freezeweather - Toggle dynamic weather

/weather \[type] - Set weather

/blackout - Toggle blackout

/morning - Set time to 9am

/noon - Set time to 12pm

/evening - Set time to 6pm

/night - Set time to 11pm

/time \[hour] (minute) - Set time to whatever you want


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.qbcore.org/qbcore-documentation/qbcore-resources/qb-weathersync.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
