HZ Scripts

FAQ

General

Is the script compatible with my framework?

Hz-Weather Pro supports QBCore, ESX, QBX and Standalone mode. The framework is auto-detected at startup — no manual configuration needed.

Does the script work with OneSync?

Yes. Hz-Weather Pro is fully compatible with OneSync and OneSync Infinity. Weather synchronization uses GlobalState and state bags for optimal performance.

Can I use this with another weather script?

No. You must disable all other weather scripts before using Hz-Weather Pro. Having two active weather scripts will cause visual and synchronization conflicts.

Scripts to stop: vSync, qb-weathersync, cd_easytime, esx_weather, etc.

Hz-Weather Pro automatically replaces qb-weathersync and cd_easytime via the provide directive and exposes their exports for backward compatibility.

Does the script use a lot of resources?

No. Hz-Weather Pro is optimized for minimal impact: 0.00 ms idle on client-side, ~0.08 ms during active events (tornado, tsunami). Server-side impact is negligible.

What are the dependencies? Required: No framework is required — the script works standalone.

Installation

Error "Asset not found" at startup

Verify that:


  1. The folder is named exactly HZ-Weather

  2. The script is in your resources/ directory (e.g. resources/[standalone]/HZ-Weather/)

  3. Your license is active on keymaster.fivem.net

  4. You are using the same FiveM account linked to your Tebex purchase


Error "Framework not detected"

This is normal if you're running standalone (no framework). The script will use standalone mode.

If you do have a framework, make sure es_extended or qb-core is ensured before HZ-Weather in your server.cfg.

Database tables not created

Hz-Weather creates tables automatically on first start. If this fails:


  1. Verify oxmysql is running and configured correctly

  2. Check that your database user has CREATE TABLE permissions

  3. As a fallback, manually import sql/install.sql


How to update the script?
  1. Download the latest version from Keymaster
  2. Back up your config/ folder
  3. Replace all files except config/
  4. Check the Changelog for any new config parameters
  5. Restart the resource: ensure HZ-Weather
Database config overrides are preserved automatically.

Admin Panel

Admin panel doesn't open
  1. Verify you have the ACE permission: hz_weather.admin
   add_ace group.admin hz_weather.admin allow
  1. Check for conflicting resources using the same keybind
  2. Try restarting the resource: ensure HZ-Weather
Panel opens but shows no data
  • Ensure the database is accessible (check oxmysql status)
  • Check the F8 console for JavaScript errors
  • Restart the resource to force a fresh data sync

Weather

Weather doesn't change automatically

Check these settings in config/config.lua:


  • Config.DynamicWeather = true (must be enabled)

  • Config.FreezeWeather = false (must not be frozen)

  • Config.WeatherChangeInterval (default: 600 seconds = 10 minutes)


Also verify no other weather script is running.

How to force permanent snow / Christmas? Option 1 — Server exports:
exports['HZ-Weather']:setZoneWeather('all', 'XMAS')
-- Or for a specific zone:
exports['HZ-Weather']:setZoneWeather('Mount Chiliad', 'XMAS')
Then freeze weather via the admin panel or Config.FreezeWeather = true. Option 2 — Admin panel: Open the panel, select XMAS weather, apply to all zones, then enable "Freeze Weather". Option 3 — Season system: Set Config.DefaultSeasonPreset = 'winter' and configure the winter preset to use XMAS weather.
How to disable snow completely?

In config/weather_types.lua, remove or disable the snow-related weather types (SNOW, SNOWLIGHT, BLIZZARD, XMAS).

Or in the season presets (config/seasons.lua), remove snow types from all weather sequences.

Zone transitions are too abrupt

Increase Config.ZoneTransitionDistance in config/config.lua. The default is 800.0 meters. A higher value creates a larger blending area between zones.

You can also enable Config.WeatherInfluence.enabled = true so neighboring zones blend naturally.


Zones

Zones not loading or not detected
  1. Ensure PolyZone is started before HZ-Weather in server.cfg
  2. Check the server console for database errors
  3. Verify zones exist in the database (hz_weather_zones table)
  4. Try creating a zone from the admin panel to test
How to create custom zones? Option 1 — Config file: Add zones to config/zones.lua with center coordinates, radius, and priority. Option 2 — Admin panel: Open the panel, go to the Zones tab, click "Create Zone" and fill in the details. Option 3 — Server export:
exports['HZ-Weather']:createZone({
    name = 'my_zone',
    label = 'My Custom Zone',
    center = vector3(x, y, z),
    radius = 1500.0,
    shape = 'circle',
    priority = 1,
    weather = 'CLEAR',
})

Seasons & Temperature

How do seasons work?

Each season defines a weather sequence (e.g. Summer = EXTRASUNNY → CLEAR → CLOUDS → CLEARING) that cycles automatically. Seasons also control temperature ranges and wind profiles.

Three cycle modes are available:


  • disabled — Manual control only (via admin panel or commands)

  • auto — Rotates through 4 seasons on a timer (default: 120 minutes for full cycle)

  • realtime — Maps real calendar months to seasons


Temperature doesn't display correctly
  1. Ensure Config.TemperatureEnabled = true
  2. Check Config.TemperatureMode'hybrid' is recommended
  3. Toggle display unit: Config.TemperatureUnit = 'C' or 'F'
  4. Use /temp in chat to check the current temperature
How to sync seasons with real calendar?

Set Config.SyncRealWorldSeasons = true in config/config.lua. The script will map:


  • December, January, February → Winter

  • March, April, May → Spring

  • June, July, August → Summer

  • September, October, November → Autumn



Natural Disasters

Tornado / Tsunami commands not working
  1. Ensure disasters are enabled in config:
- Config.Tornado.Enabled = true - Config.Tsunami.Enabled = true
  1. You need the hz_weather.admin ACE permission
  2. Use the correct syntax: /tornado start, /tsunami start
Tornado doesn't throw vehicles/players

Check the tornado physics settings in config/config.lua:


  • Config.Tornado.ThrowVehicles = true

  • Config.Tornado.ThrowPeds = true

  • Config.Tornado.AffectPlayer = true


ThrowObjects is false by default as it can cause GTA crashes.

Tsunami water doesn't rise
  1. Verify the tsunami is in RISING phase (check /tsunami status)
  2. Check Config.Tsunami.MaxWaterHeight — default is 200.0 meters
  3. The warning phase lasts 30 seconds before water starts rising
  4. Ensure no other script is modifying water levels

Gameplay Effects

Vehicle traction not working

Vehicle traction is disabled by default. Enable it in config:

Config.Effects.vehicleTraction.enabled = true

Player effects (cold/heat) notifications

Temperature notifications fire when you enter a Cold or Heat state. Since v1.1.5 two guards prevent notification spam when the temperature oscillates around a threshold:

  1. 2 °C hysteresis — once in the Cold state (temp < coldThreshold), the temperature must rise to coldThreshold + 2 before you exit. Symmetric for Heat (heatThreshold − 2 to exit). Stops the overlay from flickering when the temperature hovers at the boundary.
  2. 2-minute cooldown — even if hysteresis is somehow bypassed, the same notification can't re-fire within 120 s.
To disable notifications entirely, set notifications = false in Config.Effects.playerEffects.

Thresholds:


  • coldThreshold = 10 — below this = cold state activates

  • heatThreshold = 30 — above this = heat state activates


Notifications still showing in French after I change Config.Locale

Before v1.1.5 the cold / heat notification titles (Froid / Chaleur) were hardcoded strings and ignored Config.Locale. v1.1.5 added a client-side locale loader that reads config/locales/.lua on boot and localizes the titles to all 12 shipped languages (en / fr / es / de / it / ja / ko / pl / pt / ru / tr / zh).

If you updated to v1.1.5+ and the notification is still blank, either:


  • Config.Locale is set to a locale file that doesn't exist → it falls back to en, you should see Cold / Heat

  • You've customized the locale files and didn't add the two new keys cold_notif_title and heat_notif_title → add them with a translation for your target language


How to disable specific effects?

Each effect can be toggled individually in config/config.lua:

Config.Effects = {
vehicleTraction = { enabled = false },
reducedVisibility = { enabled = true },
autoWipers = { enabled = true },
autoLights = { enabled = false },
playerEffects = { enabled = true },
speedReduction = { enabled = false },
ambientSounds = { enabled = true },
syncedLightning = { enabled = true },
}


Phone Integration

Are there ready-made weather apps for my phone?

Yes! Dedicated weather apps are available for:

Both apps feature an interactive satellite map, animated backgrounds, hourly forecast, sun tracker, and wind/season cards.
  • For QS Smartphone V3 (resource qs-smartphone) → use qs-hzweather v2.0.0+. Requires a one-line edit in qs-smartphone/config/main.lua to disable the native Weather entry (V3 doesn't allow same-id overrides). See Phone Weather Apps → QS Smartphone V3.
  • For QS Smartphone Pro V2 (resource qs-smartphone-pro) → use qs-hzweather v1.x. Drop-in, no config edit. See legacy section.
Why does the QS Smartphone V3 app need a config edit when V2 didn't?

QS Smartphone V2 (Pro) merged native + third-party apps into one routing table — registering a custom app under id = 'weather' cleanly replaced the native one.

QS Smartphone V3 uses two separate tables: phoneApplications (built-in apps, declared in qs-smartphone/config/main.lua) and customApps (registered at runtime via addCustomApp). The router consults phoneApplications first and the native always wins, regardless of whether a custom app with the same id exists. The V3 docs confirm this: built-in native ids cannot be removed via the API.

The fix is a one-line manual edit — comment out the native weather line in Config.PhoneApplications. Reversible. Fully documented in Phone Weather Apps → QS Smartphone V3.

How to embed the weather map in my phone?

If you prefer a simple iframe embed instead of the dedicated app, add this to your phone resource:

<iframe
  src="https://cfx-nui-HZ-Weather/web/dist/map.html"
  style="width:100%;height:100%;border:none"
/>

This works with any phone resource (lb-phone, qs-phone, HZ-Phone, etc.). See the Exports & Events page for full integration details.

How to build a custom weather app?

You need one client Lua file in your phone resource to relay data from HZ-Weather, plus your UI code. No server file needed — lib.callback handles the round-trip.

Use the hz-weather:getMapData callback or the getForecast / getAllZoneForecasts exports to get weather data.

See the Phone Integration Guide for step-by-step instructions with code examples.


Compatibility

Do scripts using qb-weathersync exports still work?

Yes. Hz-Weather Pro exposes all qb-weathersync exports and events via a compatibility layer. Scripts calling exports['qb-weathersync']:setWeather('CLEAR') will work without changes.

You can disable this layer with Config.EnableQBCompat = false if you don't need it.

Do scripts using cd_easytime exports still work?

Yes. Same as above — the cd_easytime compatibility layer is enabled by default. Disable with Config.EnableCDCompat = false.


Can't find your answer? Join our Discord and open a ticket!