Überlauf zuverlässiger Netzwerk-Events
Ein Script hat einem Spieler so viel geschickt, dass seine Verbindung nicht mithielt — also flog er raus.
Mach das zuerst
Notier, welchen Spielern das passiert und wann. Hier muss jemand das laute Script finden.
Was es bedeutet
Für einen Client wurden mehr Events eingereiht, als der zuverlässige Kanal fasst. FiveM trennt die Verbindung, statt noch weiter zurückzufallen — Spieler fliegen also ohne ersichtlichen Grund raus.
Der Kanal ist pro Client, also ist der rausgeworfene Spieler nicht zwingend der, der etwas Ungewöhnliches tut.
Was es auslöst
Sortiert danach, wie oft es die Antwort ist.
- 1
Ein Event, das in einer Tick-Schleife ausgelöst wird
TriggerClientEventin einem Thread mit kurzem Wait, pro Spieler, ist die Lehrbuchursache. - 2
Eine Rundsendung in einer Schleife
TriggerClientEvent('x', -1, ...)in irgendetwas Wiederholtem multipliziert sich mit der Spielerzahl. - 3
Sehr große Nutzlasten
Ein ganzes Inventar oder eine Karte aller Spieler, häufig geschickt. Die Größe füllt den Kanal genauso sicher wie die Anzahl.
- 4
Eine Rückkopplungsschleife zwischen Client und Server
Der Client löst ein Server-Event aus, der Server antwortet mit einem Client-Event, der Client antwortet wieder.
- 5
Ein Cheater, der ein Event flutet
Was zugleich ein Sicherheitsproblem ist — siehe den Schwachstellen-Scanner.
Wie du erkennst, welcher deiner ist
Zähl sie. Ein Zähler pro Event auf dem Server für eine Minute macht den Übeltäter sofort sichtbar:
local counts = {}
local realTrigger = TriggerClientEvent
-- umschließen, zählen, alle 60 s ausgebenWo du nachsehen musst
Jedes TriggerClientEvent in einem CreateThread und jede Rundsendung an -1.
Wie du es behebst
Schick Zustand, keinen Strom von Events. State Bags replizieren einmal und nur bei Änderung:
-- statt eines TriggerClientEvent in jedem Tick
Entity(veh).state:set('fuel', level, true)Wenn du Events schicken musst, drossle und bündle:
if GetGameTimer() - lastSend > 1000 then
lastSend = GetGameTimer()
TriggerClientEvent('myres:update', src, batchedPayload)
endHä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.