From ad26395e10e345c4434712dc6b6228575c56cc53 Mon Sep 17 00:00:00 2001 From: min Date: Tue, 9 Jun 2026 10:45:06 +0300 Subject: [PATCH] =?UTF-8?q?fix(lua):=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=B4=D0=B2=D0=BE=D0=B9=D0=BD=D0=BE=D0=B9=20part.Touched.Fire?= =?UTF-8?q?=20=E2=80=94=20=D1=81=D1=87=D1=91=D1=82=20+1=20=D0=B7=D0=B0=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=BD=D0=B5=D1=82=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Симптом: счётчик показывает 10/8 при 5 собранных монетах. Корень: BabylonScene на каждое касание шлёт И routeEvent('touch') И routeGlobalEvent('playerTouch'). Lua-shim фейерил part.Touched.Fire(hrp) в обоих обработчиках (fireTargetEvent + fireGlobalEvent). Handler монетки срабатывал 2 раза → 2 Fire CoinCollected → score +2. Фикс: в fireGlobalEvent для playerTouch УБРАЛИ part.Touched.Fire. Остался только humanoid.Touched.Fire(part) — это уникальный для playerTouch сценарий (когда юзер слушает humanoid.Touched). --- src/editor/engine/lua/RobloxShim.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/editor/engine/lua/RobloxShim.js b/src/editor/engine/lua/RobloxShim.js index 9dc8639..e3127e9 100644 --- a/src/editor/engine/lua/RobloxShim.js +++ b/src/editor/engine/lua/RobloxShim.js @@ -1984,8 +1984,9 @@ export function registerRobloxShim(lua, opts) { } if (primId != null) { const part = partById.get(Number(primId)); - if (part?.Touched) part.Touched.Fire(hrp); - if (humanoid.Touched) humanoid.Touched.Fire(part); + // НЕ фейерим part.Touched — это делает fireTargetEvent + // в routeEvent('touch'). Иначе двойной счёт. + if (part && humanoid.Touched) humanoid.Touched.Fire(part); } } // GUI-клик: GameRuntime шлёт {type:'guiClick', localId, id}