THE ORB
Arrancando el studio

intento de ceder a través de un límite de llamada en C

Un script intentó esperar en un sitio donde esperar no está permitido. Es un fallo de programación, no de configuración.

groupsEsa función deja de andarcodeNecesita un desarrollador

Haz esto primero

Esto necesita un cambio de código en ese script: el autor o un desarrollador tiene que mover la parte que espera.

bug_reportMejor pega tu consola entera

Qué significa

El código intentó esperar dentro de un sitio que no se puede pausar. Lua sólo puede suspender sus propios marcos; cuando la cadena de llamadas pasa en ese momento por código nativo (C++), no hay nada que suspender, así que la espera es ilegal.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Un Wait o un await dentro de un comparador de table.sort

    table.sort es nativo. Todo lo que haga el comparador tiene que devolver de inmediato.

  2. 2

    Esperar dentro de una función de reemplazo de string.gsub

    También es nativo.

  3. 3

    Esperar dentro de un callback de la NUI

    Los manejadores de RegisterNUICallback tienen que llamar a cb() y volver; esperar una consulta dentro de uno se topa con esto en algunas versiones.

  4. 4

    Esperar dentro de pcall en un Lua más viejo

    Lua 5.4 permite ceder el control a través de pcall, pero los runtimes más viejos y algunos envoltorios nativos no.

  5. 5

    Esperar dentro de un manejador de cambio de state bag

    A esos los invoca la capa nativa.

Cómo saber cuál es el tuyo

La traza nombra el marco nativo. Hacele una pregunta más simple a la línea que falla: ¿está dentro de una función que le pasé a otra cosa? Si sí, ahí está la frontera.

Dónde mirar

La función que se pasa como argumento en la línea que falla o encima de ella.

Cómo arreglarlo

Hacé la espera afuera, y mantené el callback síncrono:

-- mal
RegisterNUICallback('buy', function(data, cb)
    local rows = MySQL.query.await('SELECT ...')   -- frontera
    cb(rows)
end)

-- bien
RegisterNUICallback('buy', function(data, cb)
    cb({ ok = true })                 -- contestá enseguida
    CreateThread(function()           -- y después hacé el trabajo lento
        local rows = MySQL.query.await('SELECT ...')
        SendNUIMessage({ action = 'result', rows = rows })
    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 lee el script y repara el código que hay detrás.

Errores que viajan con este