THE ORB
Studio wird gestartet

State-Bag-Ratenlimit / State Bags replizieren nicht

Ein Script aktualisiert geteilte Informationen viel zu oft, also werden manche Aktualisierungen verworfen.

groupsWerte sehen falsch aus oder hinken hinterhercodeBraucht einen Entwickler

Mach das zuerst

Das braucht eine Änderung im Script: es sollte aktualisieren, wenn sich etwas ändert, nicht ständig.

bug_reportFüg lieber deine ganze Konsole ein

Was es bedeutet

State Bags sind pro Entity ratenbegrenzt. Schneller zu schreiben als das Limit heißt, dass Aktualisierungen verworfen oder gedrosselt werden — im schlimmen Fall verbringt der Server seine ganze Zeit mit Replikation. Es gibt keinen Fehler: Der Wert kommt schlicht nicht beim Client an oder kommt zu spät.

Was es auslöst

Sortiert danach, wie oft es die Antwort ist.

  1. 1

    Einen State Bag in jedem Tick schreiben

    Das Limit gibt es genau dafür. Treibstoff, Geschwindigkeit und Position, in jedem Frame geschrieben, werden gedrosselt.

  2. 2

    Sehr große Werte

    Ein ganzes Inventar in einem State Bag wird bei jeder Änderung an alle in Reichweite repliziert. Eine Nutzlast dieser Größe ist bei jeder Frequenz ein Problem.

  3. 3

    Viele Bags an einer Entity

    Dutzende Schlüssel an derselben Entity, jeder repliziert für sich.

  4. 4

    Repliziert, obwohl es nicht nötig war

    :set(schlüssel, wert, true) repliziert. Rein lokaler Zustand sollte false übergeben.

  5. 5

    Einen Bag auf einem Client lesen, der die Entity nicht sieht

    Außer Reichweite heißt kein Bag. Kein Ratenlimit, aber dasselbe Symptom von „der Wert ist nicht da".

Wie du erkennst, welcher deiner ist

Schreib einmal und lies es: Kommt ein einzelner Schreibvorgang an und eine Schleife von Schreibvorgängen nicht, ist es das Ratenlimit. Kommt keiner an, ist die Entity außer Reichweite.

Wo du nachsehen musst

Jedes .state:set in der Resource und wie oft es läuft.

Wie du es behebst

Schreib nur bei Änderung und nur, was übers Netz muss:

local last
CreateThread(function()
    while true do
        Wait(1000)                          -- nicht 0
        local fuel = math.floor(GetFuel(veh))
        if fuel ~= last then                -- nur bei Änderung
            last = fuel
            Entity(veh).state:set('fuel', fuel, true)
        end
    end
end)

Hängst du immer noch an deinem eigenen Code?

Diese Seite sagt, was dieser Fehler üblicherweise bedeutet. Füg deine Konsole in Server Fixer ein: es sortiert alles darin und sagt dir, was zuerst dran ist; und wenn du lieber nicht ranwillst, kann ORBIE das Script reparieren und dir die Resource fertig zum Einsetzen zurückgeben.

bug_reportServer Fixer öffnen

Für diese Art Fehler Sicherheitsscanner markiert die Event-Behandlung, die hierher führt.

Fehler, die mit diesem zusammen auftreten