Ative a neve no FiveM com um pequeno recurso: o servidor detém o estado, o ACE protege o comando e os clientes aplicam as natives de clima documentadas.
A configuração e os exemplos de código aqui são voltados ao FiveM para GTA V Legacy. O Enhanced tem regras diferentes de runtime e de compatibilidade; verifique as alterações de Legacy para Enhanced do Cfx.re antes de aplicá-las a um servidor Enhanced.
Crie o recurso
Crie uma pasta de recurso como resources/[local]/fmx-snow e adicione o seguinte fxmanifest.lua. O manifesto usa a versão FXv2 cerulean atual, declara GTA V e carrega um script cliente e um script servidor.
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
Mantenha o controle no servidor
Coloque isto em server.lua. O comando aceita apenas on ou off e mantém o estado inalterado após qualquer outro argumento. Seu RegisterCommand restrito delega o acesso ao ACE; atribua o principal fmxsnow-admin apenas ao pequeno grupo de operadores que precisa dele. GlobalState fornece aos clientes o valor atual de propriedade do servidor.
local snowEnabled = false
GlobalState.fmxSnowEnabled = 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
Aplique o estado em cada cliente
Coloque isto em client.lua. O cliente lê o valor replicado de GlobalState na inicialização, escuta atualizações posteriores do state-bag e usa as natives de clima documentadas. Nenhum evento do cliente pode alterar o estado de propriedade do servidor.
local function applySnow(enabled)
if enabled then
SetWeatherTypeNowPersist('XMAS')
SetOverrideWeather('XMAS')
else
ClearOverrideWeather()
ClearWeatherTypePersist()
end
end
AddStateBagChangeHandler('fmxSnowEnabled', nil, function(_, _, value)
applySnow(value == true)
end)
applySnow(GlobalState.fmxSnowEnabled == true)
AddEventHandler('onClientResourceStop', function(name)
if name == GetCurrentResourceName() then
ClearOverrideWeather()
ClearWeatherTypePersist()
end
end)
Adicione ensure fmx-snow ao server.cfg depois de salvar os arquivos e reinicie o recurso ou servidor. Teste fmxsnow on e off com uma conta autorizada, verifique se argumentos inválidos exibem o uso sem alterar o estado e confirme que uma conta sem privilégios não tem acesso ao comando.
Fontes primárias: documentação Cfx sobre manifesto de recurso, comando de servidor, referência de natives e segurança de servidor.
Verifique quem controla o estado e como recuperá-lo
Use apenas um controlador de clima. Desative a sincronização de clima concorrente na instância de teste antes de executar este exemplo. Ele muda para XMAS imediatamente; não persiste a escolha após um reinício do recurso/servidor.
GlobalState requer o suporte de reconhecimento de estado do servidor. Atribua o grupo ACE mostrado ao seu administrador autorizado real usando seu fluxo de trabalho de permissão existente. Teste ligar/desligar, reconectar e parar o recurso. Após removê-lo, deixe seu controlador de clima normal restaurar o clima pretendido.