Débordement d'événements réseau fiables
Un script a envoyé tellement de données à un joueur que sa connexion n'a pas suivi, et il a été expulsé.
Faites d'abord ceci
Notez à quels joueurs cela arrive et quand. Celui-ci demande de trouver le script bavard.
Ce que ça veut dire
Plus d'événements ont été mis en file pour un client que le canal fiable ne peut en contenir. FiveM coupe la connexion plutôt que de prendre encore plus de retard : les joueurs sont donc éjectés sans raison apparente.
Le canal est par client, donc le joueur éjecté n'est pas forcément celui qui fait quelque chose d'inhabituel.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
Un événement déclenché dans une boucle de tick
TriggerClientEventdans un thread avec un Wait court, par joueur, c'est la cause d'école. - 2
Une diffusion dans une boucle
TriggerClientEvent('x', -1, ...)dans quoi que ce soit qui se répète se multiplie par le nombre de joueurs. - 3
Des charges utiles très grandes
Un inventaire entier ou une carte de tous les joueurs, envoyée souvent. La taille remplit le canal aussi sûrement que le nombre.
- 4
Une boucle de rétroaction entre client et serveur
Le client déclenche un événement serveur, le serveur répond par un événement client, le client répond à nouveau.
- 5
Un tricheur qui sature un événement
Ce qui est aussi un problème de sécurité : voyez le scanner de vulnérabilités.
Comment savoir laquelle est la vôtre
Comptez-les. Un compteur par événement sur le serveur pendant une minute rend le coupable évident immédiatement :
local counts = {}
local realTrigger = TriggerClientEvent
-- envelopper, compter, afficher toutes les 60 sOù regarder
Chaque TriggerClientEvent dans un CreateThread, et chaque diffusion à -1.
Comment la corriger
Envoyez de l'état, pas un flot d'événements. Les state bags se répliquent une fois et uniquement au changement :
-- au lieu d'un TriggerClientEvent à chaque tick
Entity(veh).state:set('fuel', level, true)Quand il faut envoyer des événements, bridez et regroupez :
if GetGameTimer() - lastSend > 1000 then
lastSend = GetGameTimer()
TriggerClientEvent('myres:update', src, batchedPayload)
endToujours 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.