From 4835cb59c2697bca9b0c3cbbcebe9fb6dc2d725f Mon Sep 17 00:00:00 2001 From: min Date: Tue, 9 Jun 2026 06:55:51 +0300 Subject: [PATCH] =?UTF-8?q?debug(lua):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=5F=5Flog=20=D0=B2=20drain=5Fhandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Чтобы увидеть запускается ли handler из очереди и нет ли pcall error. Сейчас [shim fireTargetEvent] показывает connections=1 но нигде нет выхлопа от Touched handler — где-то теряется. --- src/editor/engine/lua/RobloxShim.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/editor/engine/lua/RobloxShim.js b/src/editor/engine/lua/RobloxShim.js index 30a704f..fdbf566 100644 --- a/src/editor/engine/lua/RobloxShim.js +++ b/src/editor/engine/lua/RobloxShim.js @@ -1744,20 +1744,20 @@ export function registerRobloxShim(lua, opts) { function __rbxl_drain_handler(fn, a1, a2, a3, a4) __rbxl_next_handler_id = __rbxl_next_handler_id + 1 local handlerId = "handler_" .. __rbxl_next_handler_id - -- Оборачиваем call в pcall чтобы поглотить return value handler'а - -- (RayGun возвращает :connect(...) объект как последнее выражение, - -- что приводит к wasmoon promise-detection crash). pcall возвращает - -- (ok, ret1, ret2, ...) — мы их не используем. + __log("warn", "[drain] starting handler " .. handlerId) local co = coroutine.create(function() - -- Тот же watchdog что и в _startSingleScript. debug.sethook(function() coroutine.yield(0.016) end, "", 20000) - pcall(fn, a1, a2, a3, a4) + local ok, err = pcall(fn, a1, a2, a3, a4) + if not ok then + __log("error", "[drain handler error] " .. tostring(err)) + end end) __rbxl_register_coroutine(handlerId, co) local ok, ret = coroutine.resume(co) if not ok then + __log("error", "[drain resume error] " .. tostring(ret)) __rbxl_send_error(handlerId, tostring(ret)) __rbxl_unregister_coroutine(handlerId) elseif type(ret) == 'number' then @@ -1765,7 +1765,6 @@ export function registerRobloxShim(lua, opts) { elseif coroutine.status(co) == 'dead' then __rbxl_unregister_coroutine(handlerId) end - -- Явно ничего не возвращаем чтобы wasmoon не оборачивал nil end `); // Кешируем ссылку на Lua-функцию запуска handler'а