From 701125d17b4af911731d3d3ba85e98c42dedf4ba Mon Sep 17 00:00:00 2001 From: min Date: Tue, 9 Jun 2026 10:37:18 +0300 Subject: [PATCH] =?UTF-8?q?fix(lua):=20task.delay/spawn/defer=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D1=82=D0=B5=D1=80=D1=8F=D0=BB=D0=B8=D1=81=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20prelude?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Корень бага HUD/звука в игре 'Собери монетки': prelude перезаписывал task = { wait = rbx_wait } если type(task)~='table'. task — JS-объект (userdata) → ветка else → методы delay/spawn/defer исчезали. Скрипт g1_main падал на: task.delay(2, function() hintGui:Destroy() end) с 'attempt to call a nil value (field delay)'. Из-за этого Connect на CoinCollected ниже не выполнялся → HUD не обновлялся, звук не играл. Фикс: сохраняем существующие методы task.delay/spawn/defer из shim, добавляем wait. --- src/editor/engine/lua/RobloxShim.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/editor/engine/lua/RobloxShim.js b/src/editor/engine/lua/RobloxShim.js index cb71593..415c353 100644 --- a/src/editor/engine/lua/RobloxShim.js +++ b/src/editor/engine/lua/RobloxShim.js @@ -1698,8 +1698,21 @@ export function registerRobloxShim(lua, opts) { function __rbxl_yield_frame() coroutine.yield(0.05) end - if type(task) == 'table' then - task.wait = rbx_wait + -- task — JS-object из shim ('userdata'/'table'). Сохраняем + -- существующие методы (delay/spawn/defer) и добавляем wait. + if type(task) == 'table' or type(task) == 'userdata' then + local existing = task + local jsDelay = existing.delay + local jsSpawn = existing.spawn + local jsDefer = existing.defer + task = { + wait = rbx_wait, + delay = jsDelay or function(_, fn) if fn then fn() end end, + spawn = jsSpawn or function(fn) if fn then fn() end end, + defer = jsDefer or function(fn) if fn then fn() end end, + synchronize = function() end, + desynchronize = function() end, + } else task = { wait = rbx_wait } end