Exports and Statebags
Public API contracts (exports/statebags) for gcm_storms.
Exports
OnEnterZone() (client export)
- Context: client
- Signature:
lua
exports['gcm_storms']:OnEnterZone()
-
Behavior:
- Applies storm-zone weather and environment effects.
- Sets
LocalPlayer.state.inStormZone = true.
-
Failure cases:
- No active storm marker context: effect still applies, but gameplay logic may not match current storm state.
Usage example
lua
RegisterCommand('forceStormWeather', function()
exports['gcm_storms']:OnEnterZone()
end)
Statebags
Player(state).stormData
- Owner: server writes (
Player(source).state:set), client reads. - Observed writes:
- On storm join: sets
{ id, name, stormID, kills = 0, lives = playerlives }. - On kills/deaths: updates
killsandlives. - On leave/remove: sets
nil.
- On storm join: sets
- Impact: Drives HUD lives/kills and storm membership logic.
Read example
lua
local data = LocalPlayer.state.stormData
if data and data.stormID then
print(('In storm %s with %s lives'):format(data.stormID, data.lives))
end
Write example
lua
-- Server-side custom adjustment example
local current = Player(source).state.stormData
if current then
Player(source).state:set('stormData', {
stormID = current.stormID,
name = current.name,
kills = current.kills + 1,
lives = current.lives
}, true)
end
LocalPlayer.state.inStorm
- Owner: client writes.
- Observed writes:
truewhen player enters active storm phase.falsewhen player leaves storm.
- Impact: Controls local zone loops, HUD visibility, and death handling.
Read example
lua
if LocalPlayer.state.inStorm then
-- run storm-only gameplay logic
end
Write example
lua
-- Client custom override example
LocalPlayer.state.inStorm = false
LocalPlayer.state.inStormZone
- Owner: client writes.
- Observed writes:
trueon zone enter.falseon zone leave.
- Impact: Determines whether out-of-zone damage should be applied.
Read example
lua
if not LocalPlayer.state.inStormZone then
print('Player is outside the safe storm ring')
end
Write example
lua
LocalPlayer.state.inStormZone = true