diff --git a/src/editor/engine/lua/RobloxShim.js b/src/editor/engine/lua/RobloxShim.js index 61bb1d1..3e04ba6 100644 --- a/src/editor/engine/lua/RobloxShim.js +++ b/src/editor/engine/lua/RobloxShim.js @@ -1748,22 +1748,19 @@ export function registerRobloxShim(lua, opts) { debug.sethook(function() coroutine.yield(0.016) end, "", 20000) - local ok, err = pcall(fn, a1, a2, a3, a4) - if not ok then - __log("error", "[handler-fn-error] " .. tostring(err)) - end + -- ВНУТРЕННИЙ pcall: игнорирует runtime errors handler'а + -- ВНЕШНИЙ pcall: ловит yield-across-C-boundary + -- Все возвращаемые значения отбрасываем (не возвращаем из coroutine + -- что-либо, чтобы wasmoon Promise-detection не сработал на null). + pcall(function() pcall(fn, a1, a2, a3, a4) end) + return 1 -- возвращаем НЕ-nil чтобы wasmoon не падал на null.then end) __rbxl_register_coroutine(handlerId, co) - local ok, ret = coroutine.resume(co) - if not ok then - __log("error", "[handler-resume-error] " .. tostring(ret)) - __rbxl_send_error(handlerId, tostring(ret)) - __rbxl_unregister_coroutine(handlerId) - elseif type(ret) == 'number' then - __rbxl_schedule_resume(handlerId, ret) - elseif coroutine.status(co) == 'dead' then + pcall(coroutine.resume, co) + if coroutine.status(co) == 'dead' then __rbxl_unregister_coroutine(handlerId) end + return 1 -- возвращаем НЕ-nil end `); // Кешируем ссылку на Lua-функцию запуска handler'а