diff --git a/src/editor/engine/lua/RobloxShim.js b/src/editor/engine/lua/RobloxShim.js index 71d7f6a..d90a0ea 100644 --- a/src/editor/engine/lua/RobloxShim.js +++ b/src/editor/engine/lua/RobloxShim.js @@ -2173,6 +2173,10 @@ export function registerRobloxShim(lua, opts) { if (!p) return; const id = p.primId ?? p.target; const part = partById.get(Number(id)); + if (p.kind === 'click') { + // eslint-disable-next-line no-console + console.warn('[shim fireTargetEvent click] primId=', id, 'part=', !!part); + } if (!part) return; if (p.kind === 'touch' || p.kind === 'touched') { part.Touched.Fire(hrp); @@ -2180,13 +2184,16 @@ export function registerRobloxShim(lua, opts) { part.TouchEnded.Fire(hrp); } else if (p.kind === 'click') { // ClickDetector создаётся лениво — стрельба по 3D-объектам. - // Юзер делает: part.ClickDetector = Instance.new('ClickDetector', part) - // + clickDet.MouseClick:Connect(fn). Здесь фейерим сигнал. + // Фейерим без аргумента (передача объектов в Lua через wasmoon + // может крашить с null.then). try { const cd = part._clickDetector; - if (cd && cd.MouseClick) cd.MouseClick.Fire(localPlayer); - } catch (_) {} - // Также фейерим Part.Clicked если есть (наш расширенный API). + // eslint-disable-next-line no-console + console.warn('[shim click]', 'partId=', id, 'cd=', !!cd, 'sig=', !!cd?.MouseClick, 'conns=', cd?.MouseClick?.connections?.length); + if (cd && cd.MouseClick) cd.MouseClick.Fire(); + } catch (e) { + console.warn('[shim click err]', e?.message || e); + } try { if (part.Clicked) part.Clicked.Fire(); } catch (_) {}