revert: импортированные .rbxl-скрипты выключены по умолчанию

Попытка выполнять 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.
This commit is contained in:
min 2026-06-08 13:29:54 +03:00
parent 5342c079d1
commit 8febde9727

View File

@ -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}`);