Activez la neige FiveM avec une petite ressource : le serveur gère l’état, ACE protège la commande et les clients appliquent des natives météo documentées.
Les exemples de configuration et de code ici ciblent FiveM pour GTA V Legacy. Enhanced a des règles d'exécution et de compatibilité différentes ; vérifiez les changements Legacy-to-Enhanced de Cfx.re avant de les appliquer à un serveur Enhanced.
Créez la ressource
Créez un dossier de ressource tel que resources/[local]/fmx-snow et ajoutez le fxmanifest.lua suivant. Le manifeste utilise la version FXv2 cerulean actuelle, déclare GTA V et charge un script client et un script serveur.
fx_version 'cerulean'
game 'gta5'
client_script 'client.lua'
server_script 'server.lua'
Conservez le commutateur côté serveur
Placez ceci dans server.lua. La commande accepte uniquement on ou off et laisse l’état inchangé pour tout autre argument. Son appel RegisterCommand restreint délègue l’accès à ACE ; attribuez le principal fmxsnow-admin uniquement au petit groupe d’opérateurs qui en a besoin. GlobalState fournit aux clients la valeur actuelle gérée par le serveur.
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
Appliquez l’état sur chaque client
Placez ceci dans client.lua. Au démarrage, le client lit la valeur GlobalState répliquée, écoute les mises à jour ultérieures du state bag et utilise les natives météo documentées. Aucun événement client ne doit pouvoir modifier l’état géré par le serveur.
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)
Ajoutez ensure fmx-snow à server.cfg après avoir enregistré les fichiers, puis redémarrez la ressource ou le serveur. Testez fmxsnow on et off avec un compte autorisé, vérifiez qu’un argument invalide affiche l’usage sans modifier l’état et confirmez qu’un compte non privilégié n’a pas accès à la commande.
Sources principales : documentation Cfx sur le manifeste de ressource, les commandes serveur, les natives et la sécurité serveur.
Vérifier la gestion de l’état et la récupération
Utilisez un seul contrôleur météo. Désactivez la synchronisation météo concurrente sur l'instance de test avant d'exécuter cet exemple. Il passe immédiatement à XMAS ; il ne persiste pas le choix après un redémarrage de ressource/serveur.
GlobalState nécessite la prise en charge de l'état du serveur. Attribuez le groupe ACE affiché à votre administrateur autorisé réel en utilisant votre flux de travail de permissions existant. Testez l'activation/désactivation, la reconnexion et l'arrêt de la ressource. Après l'avoir supprimée, laissez votre contrôleur météo normal restaurer la météo prévue.