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()
|
function __rbxl_yield_frame()
|
||||||
coroutine.yield(0.05)
|
coroutine.yield(0.05)
|
||||||
end
|
end
|
||||||
if type(task) == 'table' then
|
-- task — JS-object из shim ('userdata'/'table'). Сохраняем
|
||||||
task.wait = rbx_wait
|
-- существующие методы (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
|
else
|
||||||
task = { wait = rbx_wait }
|
task = { wait = rbx_wait }
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user