THE ORB
Démarrage du studio

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.

groupsLes valeurs semblent fausses ou en retardcodeIl faut un développeur

Faites d'abord ceci

Cela demande un changement dans le script : il devrait mettre à jour quand quelque chose change, pas en continu.

bug_reportCollez plutôt toute votre console

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. 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. 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. 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. 4

    Répliqué alors que ce n'était pas nécessaire

    :set(clé, valeur, true) réplique. L'état purement local devrait passer false.

  5. 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 Fixer

Pour ce type d'erreur, le Scanner de sécurité signale la gestion d'événements qui mène ici.

Les erreurs qui voyagent avec celle-ci