From 8febde97277c6fdb2908f990cddf1c9c1c2fab37 Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 13:29:54 +0300 Subject: [PATCH] =?UTF-8?q?revert:=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20.rbxl-?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D1=8B=20=D0=B2=D1=8B=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=BE=20=D1=83?= =?UTF-8?q?=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Попытка выполнять Roblox-скрипты массово подвешивает страницу — даже с object-stub Proxy и батчевым init. У типичной карты 500-2000 скриптов, которые гоняют DataStore/Tools/RemoteFunction/PlayerGui — наш runtime их не имеет и не должен иметь (это AGPL Roblox-клон, не эмулятор). Импорт .rbxl теперь = ВИЗУАЛЬНЫЙ ПОРТЕР: - геометрия, материалы, текстуры — да - GUI (статические TextLabel/Button) — да - физика, анимации игрока — да - логика игры — пишется на нашем Lua (Этапы 1-7) Юзер импортирует Roblox-карту → видит её точно → пишет свои скрипты к примитивам, используя Vector3, Touched, Position-setters, Sound, TweenService. Это работает идеально и без подвисаний. Энтузиасты могут включить старое поведение через window.__RBXL_RUN_IMPORTED = true перед Play. --- src/editor/engine/GameRuntime.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/editor/engine/GameRuntime.js b/src/editor/engine/GameRuntime.js index a66c54c..42f45ee 100644 --- a/src/editor/engine/GameRuntime.js +++ b/src/editor/engine/GameRuntime.js @@ -121,11 +121,14 @@ export class GameRuntime { // скрипты (с маркером // @roblox-lua) теперь идут через ОДИН LuaSharedSandbox. // .rbxl-скрипты распаковываем из JS-комментария-обёртки в чистый Lua. const luaUserBatch = []; - // Импортированные .rbxl-скрипты выполняются по умолчанию (батчами по 20 - // через setTimeout, чтобы не подвешивать UI). Падения скриптов изолированы - // pcall'ом в shim — один битый скрипт не валит остальных. - // Выключить можно через window.__RBXL_SKIP_IMPORTED = true. - const runImportedRbxl = !(typeof window !== 'undefined' && window.__RBXL_SKIP_IMPORTED === true); + // Импортированные .rbxl-скрипты НЕ запускаются по умолчанию: + // Roblox-карты содержат сотни скриптов (DataStore, Tools, PlayerGui, + // UserInputService), наш runtime их не реализует — попытка их выполнить + // подвешивает страницу даже с stub'ами. + // Импорт работает как ВИЗУАЛЬНЫЙ ПОРТЕР: геометрия, GUI, материалы, + // физика. Юзер добавляет свои Lua-скрипты под наш Этап 1-7 API. + // Энтузиасты могут включить через: window.__RBXL_RUN_IMPORTED = true. + const runImportedRbxl = typeof window !== 'undefined' && window.__RBXL_RUN_IMPORTED === true; let rbxlSkipped = 0; for (const s of scripts) { if (s && typeof s.code === 'string' && s.code.startsWith('// @roblox-lua')) { @@ -220,7 +223,7 @@ export class GameRuntime { this._log('info', `Запущено Roblox-Lua скриптов (импортированных): ${rbxlImported}`); } if (rbxlSkipped > 0) { - this._log('info', `Импортированных .rbxl-скриптов пропущено: ${rbxlSkipped}. Вернуть: убрать window.__RBXL_SKIP_IMPORTED`); + this._log('info', `Импортированных .rbxl-скриптов пропущено: ${rbxlSkipped} (Roblox-скрипты не поддерживаются — пиши свои Lua-скрипты под Этап 1-7 API)`); } if (luaWritten > 0) { this._log('info', `Запущено Lua-скриптов юзера: ${luaWritten}`);