THE ORB
Arrancando el studio

Desbordamiento de eventos de red fiables

Un script le mandó tanto a un jugador que su conexión no pudo seguir el ritmo, así que lo echaron.

groupsJugadores echados al azarcodeNecesita un desarrollador

Haz esto primero

Anota a qué jugadores les pasa y cuándo. Este necesita que alguien encuentre el script ruidoso.

bug_reportMejor pega tu consola entera

Qué significa

Se encolaron para un cliente más eventos de los que el canal fiable puede aguantar. FiveM corta la conexión en vez de quedarse todavía más atrás, así que a los jugadores los echan sin un motivo visible.

El canal es por cliente, así que el jugador al que echan no es necesariamente el que está haciendo algo raro.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Un evento disparado en un bucle de tick

    TriggerClientEvent dentro de un hilo con un Wait corto, por jugador, es la causa de manual.

  2. 2

    Una difusión dentro de un bucle

    TriggerClientEvent('x', -1, ...) dentro de cualquier cosa que se repita se multiplica por la cantidad de jugadores.

  3. 3

    Cargas muy grandes

    Un inventario entero o un mapa de todos los jugadores, mandado a menudo. El tamaño llena el canal igual de bien que la cantidad.

  4. 4

    Un bucle de realimentación entre cliente y servidor

    El cliente dispara un evento del servidor, el servidor contesta con un evento de cliente, el cliente vuelve a contestar.

  5. 5

    Un tramposo saturando un evento

    Que además es un problema de seguridad: mirá el escáner de vulnerabilidades.

Cómo saber cuál es el tuyo

Contalos. Un contador por evento en el servidor durante un minuto deja al culpable a la vista enseguida:

local counts = {}
local realTrigger = TriggerClientEvent
-- envolver, contar, imprimir cada 60 s

Dónde mirar

Cada TriggerClientEvent dentro de un CreateThread, y cada difusión a -1.

Cómo arreglarlo

Mandá estado, no un chorro de eventos. Los state bags se replican una vez y sólo cuando cambian:

-- en vez de un TriggerClientEvent en cada tick
Entity(veh).state:set('fuel', level, true)

Cuando haya que mandar eventos, poneles freno y agrupalos:

if GetGameTimer() - lastSend > 1000 then
    lastSend = GetGameTimer()
    TriggerClientEvent('myres:update', src, batchedPayload)
end

¿Sigues atascado en tu propio código?

Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.

bug_reportAbrir el Server Fixer

Para este tipo de error, el Escáner de seguridad marca el manejo de eventos que lleva hasta acá.

Errores que viajan con este