THE ORB
Démarrage du studio

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

groupsDes joueurs expulsés au hasardcodeIl faut un développeur

Faites d'abord ceci

Notez à quels joueurs cela arrive et quand. Celui-ci demande de trouver le script bavard.

bug_reportCollez plutôt toute votre console

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

    Un événement déclenché dans une boucle de tick

    TriggerClientEvent dans un thread avec un Wait court, par joueur, c'est la cause d'école.

  2. 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. 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. 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. 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 s

Où 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)
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