Tutoriel 2026-03-18

Guide des state bags pour FiveM

TDYSKY

TDYSKY

Fondateur et développeur principal chez Agency Scripts

Que sont les sacs d’État ?

Les sacs d'état sont une fonctionnalité FiveM intégrée permettant de synchroniser les données entre le serveur et les clients sans écrire de gestionnaires d'événements personnalisés. Ils fournissent un magasin clé-valeur attaché aux entités, aux acteurs ou à l'état global qui réplique automatiquement les modifications sur le réseau. Lorsque le serveur définit une valeur sur un sac d'état de joueur, tous les clients qui ont besoin de cette information la reçoivent automatiquement. Cela remplace le modèle courant consistant à déclencher manuellement des événements pour synchroniser les données et réduit considérablement le code passe-partout.

Sacs d’état du joueur

Chaque joueur connecté dispose d'un sac d'état accessible via Player(source).state sur le serveur et LocalPlayer.state sur le client. Tu peux définir n'importe quelle paire clé-valeur sur l'état du lecteur, et elle se synchronisera automatiquement avec les clients concernés. C'est parfait pour les données telles que le statut de service, le titre du poste, l'affiliation à un gang ou les indicateurs de statut personnalisés que d'autres joueurs ou ressources doivent lire. Définissez des valeurs sur le serveur pour des raisons de sécurité et lisez-les sur le client pour restituer les éléments de l'interface utilisateur ou ajuster le comportement en fonction de l'état du joueur.

Sacs d'état d'entité

Au-delà des joueurs, chaque entité en réseau dans FiveM peut être associée à des données de sac d'état. Accéder à l'état de l'entité avec Entity(entityHandle).state sur le client et le serveur. Ceci est utile pour stocker des métadonnées sur les véhicules telles que le niveau de carburant, l'état du verrouillage ou la propriété sans maintenir des tables de suivi séparées. Lorsqu'un joueur s'approche d'un véhicule, le client peut lire son sac d'état pour afficher le niveau de carburant sur un HUD sans demander de données au serveur. Les sacs d'état d'entité persistent tant que l'entité existe et sont automatiquement nettoyés lorsque l'entité est supprimée.

État global

GlobalState est un sac d'état partagé sur l'ensemble du serveur et sur tous les clients. Utilisez-le pour les paramètres à l'échelle du serveur tels que la météo, l'heure de la journée, les indicateurs d'événements ou les modificateurs d'économie. Lorsque le serveur définit GlobalState.weather = 'rain', chaque client connecté reçoit cette mise à jour et peut réagir en conséquence. C'est plus efficace que de diffuser des événements à tous les joueurs, car les sacs d'état gèrent automatiquement les connexions des nouveaux joueurs. Un joueur qui rejoint la partie en cours de session reçoit immédiatement l'état global actuel sans nécessiter d'événement de synchronisation distinct.

Gestionnaires de sacs d’État

Tu peux réagir aux changements d'état des sacs en enregistrant les gestionnaires auprès de AddStateBagChangeHandler. Cette fonction prend un filtre clé, un filtre à sac et un rappel qui se déclenche chaque fois que l'état spécifié change. Le gestionnaire reçoit le nom du sac, la clé, la valeur et d'autres métadonnées. Utilisez des gestionnaires pour déclencher des effets visuels lorsqu'un joueur entre en service, mettre à jour l'interface utilisateur lorsque les données d'inventaire changent ou enregistrer les modifications d'état pour le débogage. Les gestionnaires fonctionnent à la fois sur le client et sur le serveur, tu offrant ainsi une flexibilité quant à l'endroit où tu traites les mises à jour d'état.

Meilleures pratiques et limites

Les sacs d'état ne sont pas conçus pour les mises à jour à haute fréquence. La définition des valeurs du sac d'état déclenche la synchronisation du réseau, évitez donc de les mettre à jour à chaque trame. Utilisez-les pour les données qui changent occasionnellement, comme les indicateurs d'état, les valeurs de configuration et les métadonnées, plutôt que pour les valeurs qui changent constamment comme la position ou la vitesse. Gardez les valeurs stockées petites et sérialisables puisqu'elles voyagent sur le réseau. Lorsque tu as besoin d'objets complexes, aplatissez-les en simples paires clé-valeur ou utilisez des chaînes JSON. Définissez toujours l'état à partir du serveur lorsque les données doivent faire autorité pour empêcher toute manipulation côté client.

Partager cet article

Prêt à améliorer votre serveur ?

Découvrez nos scripts FiveM premium dans la boutique Agency Scripts ou rejoignez notre communauté Discord pour le support et les mises à jour.