Activa nieve en FiveM con un recurso pequeño: el servidor controla el estado, ACE protege el comando y los clientes aplican natives meteorológicos documentados.
Crea el recurso
Crea una carpeta de recurso como resources/[local]/fmx-snow y añade el siguiente fxmanifest.lua. El manifiesto usa la versión FXv2 cerulean actual, declara GTA V y carga un script de cliente y uno de servidor.
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
Mantén el interruptor en el servidor
Coloca esto en server.lua. El comando solo acepta on u off y deja el estado sin cambios con cualquier otro argumento. La llamada RegisterCommand restringida delega el acceso a ACE; asigna el principal fmxsnow-admin solo al pequeño grupo de operadores que lo necesita. GlobalState proporciona a los clientes el valor actual controlado por el servidor.
local snowEnabled = false
RegisterCommand('fmxsnow', function(source, args)
local mode = args[1]
if mode ~= 'on' and mode ~= 'off' then
print(('fmxsnow: usage fmxsnow on|off (source %s)'):format(source))
return
end
snowEnabled = mode == 'on'
GlobalState.fmxSnowEnabled = snowEnabled
end, true)
add_ace group.fmxsnow-admin command.fmxsnow allow
ensure fmx-snow
Aplica el estado en cada cliente
Coloca esto en client.lua. Al iniciarse, el cliente lee el valor replicado de GlobalState, escucha las actualizaciones posteriores del state bag y usa los natives meteorológicos documentados. Ningún evento del cliente debe poder cambiar el estado controlado por el servidor.
local function applySnow(enabled)
if enabled then
SetWeatherTypeOvertimePersist('XMAS', 15.0)
SetWeatherTypeNowPersist('XMAS')
SetOverrideWeather('XMAS')
else
ClearOverrideWeather()
ClearWeatherTypePersist()
end
end
AddStateBagChangeHandler('fmxSnowEnabled', nil, function(_, _, value)
applySnow(value == true)
end)
applySnow(GlobalState.fmxSnowEnabled == true)
Añade ensure fmx-snow a server.cfg después de guardar los archivos y reinicia el recurso o servidor. Prueba fmxsnow on y off con una cuenta autorizada, verifica que un argumento no válido muestre el uso sin cambiar el estado y confirma que una cuenta sin privilegios no tenga acceso al comando.
Fuentes primarias: documentación de Cfx sobre manifiestos de recursos, comandos de servidor, referencia de natives y seguridad de servidor.