State-Bag-Ratenlimit / State Bags replizieren nicht
Ein Script aktualisiert geteilte Informationen viel zu oft, also werden manche Aktualisierungen verworfen.
Mach das zuerst
Das braucht eine Änderung im Script: es sollte aktualisieren, wenn sich etwas ändert, nicht ständig.
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
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
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
Viele Bags an einer Entity
Dutzende Schlüssel an derselben Entity, jeder repliziert für sich.
- 4
Repliziert, obwohl es nicht nötig war
:set(schlüssel, wert, true)repliziert. Rein lokaler Zustand solltefalseübergeben. - 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 öffnenFür diese Art Fehler Sicherheitsscanner markiert die Event-Behandlung, die hierher führt.