fix(lua): task.delay/spawn/defer не терялись после prelude
Корень бага 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.
This commit is contained in:
parent
bb69ccf9ed
commit
701125d17b
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user