THE ORB
Iniciando o studio

tentativa de yield através de um limite de chamada em C

Um script tentou esperar num lugar onde esperar não é permitido. É um erro de programação, não de configuração.

groupsAquela função para de funcionarcodePrecisa de um desenvolvedor

Faça isto primeiro

Isso precisa de mudança de código naquele script: o autor ou um desenvolvedor tem que mover a parte que espera.

bug_reportMelhor colar o console inteiro

O que significa

O código tentou esperar dentro de um lugar que não pode ser pausado. O Lua só consegue suspender os próprios quadros; quando a cadeia de chamadas passa naquele momento por código nativo (C++), não há nada para suspender, então a espera é ilegal.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    Um Wait ou um await dentro de um comparador de table.sort

    table.sort é nativo. Tudo o que o comparador faz precisa retornar imediatamente.

  2. 2

    Esperar dentro de uma função de substituição de string.gsub

    Também é nativo.

  3. 3

    Esperar dentro de um callback da NUI

    Os handlers de RegisterNUICallback precisam chamar cb() e retornar; esperar uma consulta dentro de um esbarra nisso em algumas versões.

  4. 4

    Esperar dentro de pcall num Lua mais antigo

    O Lua 5.4 permite ceder o controle através do pcall, mas os runtimes mais antigos e alguns wrappers nativos não.

  5. 5

    Esperar dentro de um handler de mudança de state bag

    Esses são invocados pela camada nativa.

Como saber qual é o seu

O rastro nomeia o quadro nativo. Faça uma pergunta mais simples à linha que falha: ela está dentro de uma função que eu passei para outra coisa? Se sim, ali está a fronteira.

Onde olhar

A função passada como argumento na linha que falha ou acima dela.

Como consertar

Faça a espera fora, e mantenha o callback síncrono:

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

-- certo
RegisterNUICallback('buy', function(data, cb)
    cb({ ok = true })                 -- responda na hora
    CreateThread(function()           -- e depois faça o trabalho lento
        local rows = MySQL.query.await('SELECT ...')
        SendNUIMessage({ action = 'result', rows = rows })
    end)
end)

Ainda travado no seu próprio código?

Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.

bug_reportAbrir o Server Fixer

Para esse tipo de erro, o Script Optimizer lê o script e conserta o código por trás disso.

Erros que andam junto com este