THE ORB
Arrancando el studio

hitch warning: un fotograma de N milisegundos

Algo congeló el servidor un momento. Los jugadores lo sienten como un tirón. Es un síntoma, no un fallo.

groupsTirones y picos de lagcodeNecesita un desarrollador

Haz esto primero

Unos pocos al arrancar son normales. Constantes durante el juego significan que hay que mirar un script.

bug_reportMejor pega tu consola entera

Qué significa

Algo bloqueó el hilo principal durante ese tiempo. Esto NO es un error: nada falló y nada se cayó. Es el runtime avisando de que un fotograma tardó muchísimo más de lo que debería, y eso los jugadores lo sienten como un congelamiento.

Tomalo como un síntoma con un número al lado. Por debajo de unos 100 ms suele ser ruido del arranque; tirones sostenidos de más de 200 ms durante el juego normal son un problema de verdad.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Una consulta síncrona a la base de datos en el servidor

    El tick entero espera a MySQL. Un índice que falta lleva esto de invisible a varios cientos de milisegundos.

  2. 2

    Trabajo pesado durante el arranque de un recurso

    Analizar una configuración JSON grande, construir una tabla enorme, cargar cientos de props. Los tirones que sólo pasan al arrancar suelen ser inofensivos.

  3. 3

    Un bucle cerrado sin Wait

    while true do ... end sin ceder bloquea el planificador hasta que termina.

  4. 4

    Transmitir muchos assets a la vez

    Pedir muchos modelos o diccionarios de animación en el mismo fotograma.

  5. 5

    Un manejador de eventos lento

    Un evento que se dispara por jugador, haciendo trabajo de verdad, en un servidor lleno.

Cómo saber cuál es el tuyo

resmon 1

en la consola del cliente muestra el uso de CPU por recurso. Del lado del servidor, txAdmin y el perfilador incorporado señalan el recurso. Cruzá el momento del tirón con lo que estaba pasando: una oleada de entradas, el reinicio de un recurso, o una acción concreta de un jugador.

Dónde mirar

El recurso que señala resmon, y después sus hilos y sus llamadas a la base de datos.

Cómo arreglarlo

Cedé el control dentro de los bucles largos, hacé las consultas asíncronas, e indexá lo que filtrás:

-- bloqueante
local rows = MySQL.query.await('SELECT * FROM users')

-- no bloqueante
MySQL.query('SELECT * FROM users WHERE identifier = ?', { id }, function(rows)
    -- ...
end)

-- cedé siempre
CreateThread(function()
    while true do
        Wait(500)      -- no lo omitas nunca
    end
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 Script Optimizer encuentra qué te está costando fotogramas y lo reescribe.

Errores que viajan con este