Lewati ke konten utama

Threading

Thread background yang di-drive dari Lua. Beda dari runtime Lucifer original, thread di Seraph share globals skrip — bisa baca / mutate value dari mana saja.

local value = 0

local threadId = runThread(function()
value = 5
end)

removeThread(threadId) -- stop thread spesifik

sleep(ms) nge-yield coroutine sekarang. Pasangin sama polling pathfinding() atau wait connected() kalau perlu nge-give scheduler slot waktu.

Globals

runThread(fn)

FieldType
Signature(fn: () → ()) → number
Returnsnumber — task id, di-pass ke removeThread(id) buat abort nanti
Asyncno — id langsung balik, fungsinya jalan di tokio task detached

Spawn fn sebagai tokio task fire-and-forget. Fungsinya jalan detached — return value dibuang; error di-swallow diam-diam. Pake getLogs() / print() buat surface progress.

local id = runThread(function()
sleep(60000)
print("bangun")
end)

removeThread(threadId)

FieldType
Signature(threadId: number) → boolean
Returnsbooleantrue kalau id-nya match task yang masih hidup; false kalau task udah selesai atau gak pernah ke-register
Asyncno

Cancel + abort secara cooperative task dengan id ini (value yang sebelumnya di-return runThread). Idempotent — manggil dua kali di id yang sama bakal balik false di kali kedua.

local id = runThread(function() sleep(60000) end)
removeThread(id) -- true
removeThread(id) -- false (udah hilang)

sleep(ms)

FieldType
Signature(ms: number) → ()
Returnsnothing
Asyncyes — yield skrip selama ms milidetik

Cooperative — bot lain dan packet handler tetep jalan. Jangan dipanggil di dalam event handler synchronous.

sleep(1500) -- 1.5 detik

Jalanin di setiap bot terhubung

for i, b in ipairs(getClients()) do
runThread(function()
-- kerjaan per-bot, semua jalan barengan
b:warp("MYWORLD")
end)
end