THE ORB
Studio başlatılıyor

attempt to yield across a C-call boundary

Bir script, beklemenin yasak olduğu bir yerde beklemeye çalıştı. Bu bir kurulum hatası değil, bir kodlama hatası.

groupsO özellik çalışmayı bırakıyorcodeGeliştirici gerektirir

Önce şunu yap

Bunun için o script'te bir kod değişikliği gerekiyor — bekleyen kısmı yazarın ya da bir geliştiricinin taşıması lazım.

bug_reportBunun yerine tüm konsolunu yapıştır

Ne anlama gelir

Kod, duraklatılamayan bir yerde beklemeye çalıştı. Lua yalnızca kendi çerçevelerini askıya alabilir; çağrı zinciri o anda native (C++) koddan geçiyorsa askıya alınacak bir şey yoktur, o yüzden bekleme yasaktır.

Neden olur

Ne sıklıkla doğru cevap olduğuna göre sıralı.

  1. 1

    table.sort karşılaştırıcısı içinde bir Wait ya da await

    table.sort native'dir. Karşılaştırıcının yaptığı her şey hemen dönmelidir.

  2. 2

    string.gsub değiştirme fonksiyonu içinde beklemek

    O da native.

  3. 3

    Bir NUI geri çağırması içinde beklemek

    RegisterNUICallback işleyicileri cb() çağırıp dönmelidir; içinde bir sorgu beklemek bazı sürümlerde buna çarpar.

  4. 4

    Eski Lua'da pcall içinde beklemek

    Lua 5.4 pcall üzerinden yield etmeye izin verir, ama daha eski çalışma zamanları ve bazı native sarmalayıcılar vermez.

  5. 5

    Bir state bag değişim işleyicisi içinde beklemek

    Onlar native katmandan çağrılır.

Hangisinin seninki olduğu nasıl anlaşılır

Geri iz native çerçeveyi adlandırır. Başarısız olan satıra daha basit bir soru sor: başka bir şeye geçirdiğim bir fonksiyonun içinde mi? Evetse, sınır odur.

Nereye bakmalı

Başarısız olan satırda ya da üstünde argüman olarak geçirilen fonksiyon.

Nasıl düzeltilir

Beklemeyi dışarıda yap, ve geri çağırmayı eşzamanlı tut:

-- yanlış
RegisterNUICallback('buy', function(data, cb)
    local rows = MySQL.query.await('SELECT ...')   -- sınır
    cb(rows)
end)

-- doğru
RegisterNUICallback('buy', function(data, cb)
    cb({ ok = true })                 -- hemen yanıtla
    CreateThread(function()           -- sonra yavaş işi yap
        local rows = MySQL.query.await('SELECT ...')
        SendNUIMessage({ action = 'result', rows = rows })
    end)
end)

Hâlâ kendi kodunda mı takıldın?

Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.

bug_reportServer Fixer'ı aç

Bu tür bir hata için Script Optimizer script'i okur ve bunun arkasındaki kodu onarır.

Bununla birlikte gelen hatalar