Pular para o conteúdo
RPScripts

Como ativar a neve no FiveM

Por Luke

Como ativar a neve no FiveM

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.

Documentação de referência

Cfx.re — manifesto de recurso · Cfx.re — state bags

Seleção premium para o seu servidor

  • elevador de carro
    • ESX
    • QBCore
    • vRP
    US$ 4,99€ 4,99£ 3,99AU$ 7,99R$ 25,99CHF 4,99JP¥ 790
  • Pré-visualização do recurso KS Loadingscreen FiveM
      US$ 13,99€ 12,99£ 10,99AU$ 20,99R$ 71,99CHF 11,99JP¥ 2.220
    • Polícia de Origen
      • QBCore
      US$ 23,00€ 20,99£ 17,99AU$ 33,99R$ 116,99CHF 18,99JP¥ 3.640
    • Mirror Park Hood
        US$ 8,00€ 7,99£ 6,99AU$ 11,99R$ 40,99CHF 6,99JP¥ 1.270
      • Polícia de Origen
        • ESX
        US$ 23,00€ 20,99£ 17,99AU$ 33,99R$ 116,99CHF 18,99JP¥ 3.640
      Ver a loja