Limite de fréquence des state bags / les state bags ne se répliquent pas
Un script met à jour des informations partagées beaucoup trop souvent, donc certaines mises à jour sont jetées.
Faites d'abord ceci
Cela demande un changement dans le script : il devrait mettre à jour quand quelque chose change, pas en continu.
Ce que ça veut dire
Les state bags sont limités en fréquence par entité. Écrire plus vite que la limite signifie que les mises à jour sont jetées, bridées, ou dans le pire des cas que le serveur passe tout son temps à répliquer. Rien n'échoue : la valeur n'arrive simplement pas sur le client, ou arrive en retard.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
Écrire un state bag à chaque tick
La limite existe précisément pour arrêter cela. Le carburant, la vitesse et la position écrits à chaque image seront bridés.
- 2
Des valeurs très grandes
Un inventaire entier dans un state bag est répliqué à tous ceux à portée à chaque changement. Une charge de cette taille, à n'importe quelle fréquence, est un problème.
- 3
Beaucoup de sacs sur une même entité
Des dizaines de clés sur la même entité, chacune répliquant séparément.
- 4
Répliqué alors que ce n'était pas nécessaire
:set(clé, valeur, true)réplique. L'état purement local devrait passerfalse. - 5
Lire un sac sur un client qui ne voit pas l'entité
Hors de portée signifie pas de sac. Ce n'est pas une limite de fréquence, mais c'est le même symptôme de « la valeur n'est pas là ».
Comment savoir laquelle est la vôtre
Écrivez une fois et relisez : si une seule écriture arrive et qu'une boucle d'écritures n'arrive pas, c'est la limite de fréquence. Si rien n'arrive, l'entité est hors de portée.
Où regarder
Chaque .state:set de la ressource, et à quelle fréquence il s'exécute.
Comment la corriger
N'écrivez qu'au changement, et seulement ce qui doit traverser le réseau :
local last
CreateThread(function()
while true do
Wait(1000) -- pas 0
local fuel = math.floor(GetFuel(veh))
if fuel ~= last then -- seulement au changement
last = fuel
Entity(veh).state:set('fuel', fuel, true)
end
end
end)Toujours bloqué sur votre propre code ?
Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.
bug_reportOuvrir le Server FixerPour ce type d'erreur, le Scanner de sécurité signale la gestion d'événements qui mène ici.