Hail Storm

Hail Storm creates falling hail around players, applies periodic damage to exposed players and nearby NPCs, and damages vehicle body health. It includes separate sounds for players on foot and inside vehicles, a standalone command, and Disaster Hub integration.

Command access: The inspected source does not enforce ACE permissions on /hailstorm. Adding UseAcePermissions=true does not restrict that command. See permissions before relying on access restrictions.

{:is-warning}

{:links-list}

INSTALLATION

  1. Copy the inner BigDaddy-HailStorm resource folder into your server's resources folder. Use the folder containing fxmanifest.lua, settings.ini, the DLLs, bridge, and html.
  2. Enter your own product key as key1 under [licensing] in settings.ini. Leave the supplied synchronization value unchanged.
  3. Keep the packaged html/index.html and html/sounds files. They provide the hail audio.
  4. Start your weather resource first if you use one. Start BigDaddy-EAS if you want optional emergency alerts.
  5. Add ensure BigDaddy-HailStorm to server.cfg. If you use Disaster Hub, start Hail Storm before BigDaddy-DisasterHub.
  6. Restart the resource after configuration changes and reconnect before testing.

DO NOT RENAME THE FOLDER. Configuration and integration calls use the exact name BigDaddy-HailStorm.

{:is-danger}

Disaster Hub and EAS are optional. The inspected source has no framework, inventory, or database integration. Its NUI page handles sound; it is not an in-game control menu.

CONFIGURATION

settings.ini

The supplied file contains licensing/synchronization values and debug=true. The source also reads the optional settings below. Add optional settings under the existing [settings] section.

Section Setting Supplied / fallback Description
[licensing] key1 Your product key Enter your own product key here.
[settings] debug true / false Enables additional resource diagnostic messages where implemented.
[settings] UseAcePermissions Not supplied / false Reads a player's permission during initialization, but does not protect the command or storm events.
[settings] AcePermission Not supplied / command ACE object checked during initialization when UseAcePermissions=true. The result is not used to restrict triggering.
[settings] UseEAS Not supplied / false Enables standalone EAS alerts when BigDaddy-EAS is started.
[settings] EASTitle Not supplied / EMERGENCY ALERT SYSTEM Title passed to the standalone EAS alert.
[settings] EASMessage Not supplied / A severe hail storm has been detected. Take shelter immediately Standalone alert text.
[settings] DesyncKey Supplied by the package Internal synchronization value. Leave it unchanged.

“Fallback” means the source value used when a setting is missing or cannot be parsed. Setting names are case-insensitive. Edit existing keys rather than adding duplicates, and restart the resource to reload configuration.

There are no INI settings for hail density, damage, hit probability, sound volume, storm duration, or automatic scheduling. These values are fixed in the inspected source.

Permissions

The /hailstorm command is registered without a command restriction and performs no ACE check. Although the server calculates a permission during player initialization, the client does not use that value. The two server storm handlers also have no permission checks.

Setting UseAcePermissions=true, changing AcePermission, or granting an ACE object does not make this command admin-only. Enforcing that behavior requires correcting the command handler. Disaster Hub checks access to its own menu separately, but using that menu does not restrict Hail Storm's standalone command.

COMMANDS

Command Purpose
/hailstorm Starts a standalone storm after successful resource initialization. No supported arguments.

The command selects a random duration from 24,000 to 47,999 milliseconds. Arguments are ignored, so /hailstorm 120 does not request a two-minute storm. There is no registered stop command, local control menu, or automatic scheduler in Hail Storm itself.

For standalone storms, the server requests weather suspension through its bridge and tells clients to force weather. Clients transition to THUNDER for ten seconds before loading the hail model and starting the timed hail effects. At the end of those effects, clients request a ten-second transition to OVERCAST.

The server resumes its weather bridge after the selected duration measured from the initial trigger. Since the client starts its hail timer after the weather transition, the provider can resume approximately ten seconds before hail ends, plus any model-loading delay.

HOW THE STORM AFFECTS PLAYERS

Hail and shelter

Each client spawns falling hail objects around its player, within approximately five meters horizontally and 10–25 meters above them. Objects are given downward velocity and are deleted after collision, reaching ground level, or a maximum lifetime of approximately 15 seconds.

The scripted damage checks run separately from the visible hail collisions. A visible hailstone does not need to strike a player for a damage roll to occur.

Players on foot count as sheltered when they are in a recognized interior or when the script detects overhead cover with an upward ray extending 12 meters. Shelter effectiveness depends on the map's interior and collision data. Shelter stops the scripted on-foot damage checks; the source does not use it to stop spawning visible hail or playing ambient audio.

Damage

These values describe the scripted damage checks in the current source, not configurable settings or guaranteed damage rates.

Target Behavior
Exposed player on foot After an initial two-second delay, checks run roughly every 500 milliseconds. Each eligible check has a 12% chance to apply 1 damage and trigger a ragdoll reaction.
Ragdoll reaction A successful hit has a 40% chance of a one-second ragdoll; otherwise the requested ragdoll lasts 100 milliseconds.
Player's current vehicle Each eligible player damage check has an 8% chance to reduce vehicle body health by 10, with a minimum of zero. This branch does not check overhead shelter.
Nearby NPCs Living, non-player peds owned by the local client and within 100 meters are checked. Exposed NPCs outside vehicles have a 12% hit chance, take 1 damage, ragdoll, and are told to flee.
Other nearby vehicles Living vehicles owned by the local client, within 100 meters, and not under detected cover have an 8% chance per check to lose 10 body health. The local player's current vehicle is excluded from this loop.

The nearby-entity loop waits 500 milliseconds between passes, with additional delays for NPC reactions. Entering a vehicle avoids the scripted on-foot player damage branch, but the vehicle can still take damage, including when parked under cover through the occupied-vehicle branch.

Sound

The resource plays onfoot.ogg outside vehicles and incar.ogg inside them. It changes ambience as you enter or leave a vehicle and requests a three-second fade at the end of the sound loop. Successful player/NPC damage rolls relay playerhit.ogg to listeners within six meters of the hit.

The audio page loads Howler from an external CDN. If hail is visible but silent, check the packaged sound files and whether the client can load that script. There is no sound-volume option in settings.ini.

DISASTER HUB INTEGRATION

Start BigDaddy-HailStorm before BigDaddy-DisasterHub, then select Hail Storm in /DisasterHub. The Hub can also trigger hail in eligible weather branches. Configure HailStormChance and weather monitoring in the Hub.

The Hub calls BigDaddy-HailStorm:StartHailStormHub with a duration in seconds. Hail Storm then runs the effects without forcing its own weather, calling its own weather bridge, or sending its standalone EAS alert. The Hub supplies its weather and alert handling.

For manual Hub combinations, hail receives half the selected duration when combined with Tornado, Sea Storm, or Ice Age. Hail cannot be combined with Earthquake in the Hub. See the Disaster Hub documentation for the full selection rules and automatic weather behavior.

Server integration events

Server event Argument Behavior
BigDaddy-HailStorm:StartHailStorm Integer duration in seconds Standalone path with forced weather, bridge handling, and optional EAS. Pass 0 for the random duration.
BigDaddy-HailStorm:StartHailStormHub Integer duration in seconds Effects without Hail Storm's own weather or EAS handling. Pass 0 for the random duration.

Call these from authorized server logic. The handlers do not validate caller permissions or reject overlapping storms. Positive standalone durations should be at least ten seconds because the handler waits ten seconds before calculating its remaining delay.

WEATHER BRIDGE

Edit Config.WeatherBridge at the top of bridge/weather.server.lua.

Option Default Description
Enabled true Enables bridge suspend/resume handling. Disabling this does not prevent standalone clients from requesting THUNDER and OVERCAST.
Provider 'auto' Detects the first started provider in the order below, or uses an explicit identifier.
RestorePreviousWeather true Used by the QB resume handler to request saved weather when available.
Debug false Enables [WeatherBridge] diagnostics, including failed export calls.
Detection order / resource Identifier Implemented behavior
BigDaddy-Weather bigdaddy Reads GetWeather; sends weather-sync suspend/resume events.
qb-weathersync qb-weathersync Reads weather/dynamic state; attempts to disable dynamic weather and restore saved state on resume.
cd_easytime cd_easytime Reads GetAllData; suspend/resume hooks are placeholders.
Renewed-Weathersync renewed Reads GlobalState.weather; suspend/resume hooks are placeholders.
vSync vsync Detection only; no stock weather getter or working suspend/resume hooks are supplied.
vMenu vmenu Detection only; no stock weather getter or working suspend/resume hooks are supplied.

This table describes the local bridge implementation, not tested compatibility with every provider version. With no detected resource, the provider is none. You can also explicitly select none.

To configure another provider, select Provider='custom' and fill the Custom fields:

  • SuspendEvent and ResumeEvent: server events called with (enabled, reason).
  • SuspendExportResource and SuspendExportName: optional server export called on suspend with the same arguments.
  • ResumeExportResource and ResumeExportName: optional server export called on resume with the same arguments.
  • CurrentWeatherExportResource and CurrentWeatherExportName: getter called without arguments, accepting a weather string or a table containing a recognized weather field.

If both an event and export are configured for an action, both run. A current-weather getter does not add automatic hail triggers; those belong to Disaster Hub.

The bridge exposes server exports Suspend(enabled, reason), Resume(reason), IsSuspended(), GetSuspendedReason(), GetProvider(), and GetCurrentWeather(). Pass true to Suspend to request suspension. State and success results describe bridge handling, not proof that the weather provider paused; some handlers are placeholders and export failures are caught. The weather getter returns nil when unavailable.

EMERGENCY ALERTS

To enable standalone alerts, start BigDaddy-EAS and add the following under [settings]:

UseEAS=true
EASTitle=EMERGENCY ALERT SYSTEM
EASMessage=A severe hail storm has been detected. Take shelter immediately

Approximately ten seconds after the standalone server trigger, Hail Storm sends the configured title and message to BigDaddy-EAS:BuildEAS, with an empty alert-type argument. It only sends this alert when EAS is started.

Hub-triggered storms skip the standalone alert. Configure the Hub's Hail Storm EAS settings for that path instead.

TROUBLESHOOTING AND LIMITATIONS

Problem What to check
/hailstorm is unavailable Confirm the resource name, product key, and successful initialization. The command is registered after synchronization succeeds. Check the server and F8 logs.
Everyone can start storms despite ACE settings The current command does not enforce permissions. This requires a handler correction, not another ACE grant.
Hail starts after a delay Standalone storms first spend ten seconds transitioning weather, then load the hail model.
Weather changes before hail ends The server starts its duration timer before the client's ten-second transition. Also check whether the chosen provider implements suspension.
Vehicle takes damage under cover The player's occupied-vehicle damage branch does not check shelter. Other nearby vehicles do get a shelter check.
Shelter does not protect a player Confirm the map has recognized interior or overhead collision data within the shelter check's range.
Hail is silent Check html/sounds, NUI errors, and loading of the external Howler script.
No EAS alert Standalone alerts default to disabled; add UseEAS=true and start EAS. For Hub storms, use the Hub's alert settings.
Rain does not automatically start hail Hail Storm has no weather watcher. Set up automatic triggers in Disaster Hub.
Repeated storms behave inconsistently There is no overall active-storm guard. Some damage/audio loops refuse duplicates while object spawning and shared storm state can overlap. Wait for the current storm to finish.

Players joining after the storm broadcast are not sent the active storm's remaining duration. The inspected source also has no resource-stop cleanup handler to explicitly remove active hail, stop sound loops, or resume weather when interrupted. Normal completion handles object deletion, audio fading, and the standalone bridge timer.

Enable debug=true in settings.ini and Debug=true in the weather bridge when gathering diagnostics. See the log collection guide.

This page describes the inspected source with manifest version 1.0.0. The packaged DLLs have not been exercised on a live FiveM server and may differ if built from another source revision.