ITERATION 6 (single-VM rewrite):
- RobloxLuaSharedWorker: один wasmoon-state на 742 скрипта (не 742 VM)
- Pre-populated Workspace + Player.PlayerGui перед addScripts
- На каждом Part — Touched/TouchEnded сигналы; на каждом TextButton —
MouseButton1Click/Activated/MouseEnter/Leave; Humanoid с Died/Health
- Двухфазный init: addScriptsBatch ВСЕ скрипты → kickoff() с PlayerAdded
- wait()/task.wait/task.spawn/task.delay через scheduler+coroutines
- guiClick от Rublox-GUI → fireEvent → инстанс.MouseButton1Click.Fire()
- playerTouch → part.Touched.Fire(HumanoidRootPart) + humanoid.Touched
ITERATION 7 (nullStub compatibility):
- debug.setmetatable(nil, ...) + debug.setmetatable(function() end, ...)
с полным набором __index/__newindex/__call/__add/__sub/.../__len/__concat
- Возврат undefined из FindFirstChild/WaitForChild (вместо JS proxy)
- Lua-side __null_stub_singleton с Connect/connect/Wait/Fire (lowercase aliases)
- __rbxl_lookup_part через __rbxl_parts_by_id table (не ipairs на JS array)
- script.Parent гарантированно не nil (либо реальный Part либо null stub)
- RbxSignal: Connect+connect, Wait+wait, Fire+fire, Disconnect+disconnect
- SIGNAL_NAMES whitelist расширен: Tool (Selected/Equipped), Remote (OnInvoke),
ChatMakeSystemMessage, etc.
Converter:
- GUI: UDim2 dataclass правильно резолвится (scale*100 + offset/viewport*100)
- размеры в процентах (как Rublox-GuiOverlay ожидает)
- ScreenGui.Enabled → пропагируется в детей
- Эвристика скрыть HD Admin/Chat/CommandBar/TeleportTo модалки
- rbxasset:// rbxassetid:// фильтруются на пустой URL
Hierarchy:
- scroll-to-selected раскрывает workspace+rootPrims+folders перед scroll
- data-sel-id на всех ItemRow с rAF×2 timing
Известные ограничения:
- Synapse X obfuscated скрипты часто всё равно падают (требуют конкретный Roblox-VM)
- но debug.setmetatable перехват не даёт скриптам валиться на indexing/arithmetic
- реальные пользовательские KillBrick (Touched) теперь работают
- GUI кнопки → MouseButton1Click работают
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- UDim2: scale теперь умножается на viewport reference (1280×720),
раньше игнорировался — фреймы получали 0×0 и фейлились на дефолт 100×30
или наоборот заполняли всё окно
- _udim2_pair(): пара (x,y) через _udim2_to_rublox(axis='x'|'y')
- Фильтр rbxasset:// rbxassetid:// rbxhttp:// rbxthumb:// URL'ов на пустую
строку — браузер их не загружает, спам в console исчезает
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Все 5 задач итерации:
1. Single-VM mode (RobloxLuaSharedWorker/Sandbox):
- один Worker, одна wasmoon-VM на ВСЕ скрипты проекта
- addScript() для каждого, общий tick/event broadcast
- снимает WASM OOM (1 VM 16MB вместо 742 × 16MB)
- убран per-script лимит 50, теперь все 742 загружаются
2. Touched events:
- sendGlobalEvent в shared sandbox распознаёт playerTouch
и пересылает в Worker как 'touched' с primId
- Worker находит Part по __primId в workspace и Fire'ит
его Touched сигнал — Lua-обработчики работают
3. Click в иерархии → scroll-to-selected:
- useEffect в HierarchyPanel ловит изменение selection
и scrollIntoView для нужного ItemRow
- data-sel-id атрибут на primitive/model/block строках
4. GUI Roblox в конвертере:
- ScreenGui/Frame/TextLabel/TextButton/ImageLabel/TextBox →
scene.gui c полным набором свойств (UDim2→pixel, Color3→hex,
BackgroundTransparency→bgOpacity, parentId)
5. Чистка:
- удалены debug-console.warn из PlayerController._loadPlayerModel
(убирает spam '[PlayerController.devlog]' в consoles)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>