From 43f701f1c43f6b72e029d001cb0a503fd9d33377 Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 13:58:23 +0300 Subject: [PATCH] =?UTF-8?q?docs(lua):=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20CHANGELOG=20=D0=B4=D0=BB=D1=8F=20=D0=A8=D0=B0?= =?UTF-8?q?=D0=B3=D0=B0=201=20Tool/Backpack/Mouse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RUBLOX_LUA_API_CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/RUBLOX_LUA_API_CHANGELOG.md b/RUBLOX_LUA_API_CHANGELOG.md index 2a15502..16f8e36 100644 --- a/RUBLOX_LUA_API_CHANGELOG.md +++ b/RUBLOX_LUA_API_CHANGELOG.md @@ -67,6 +67,49 @@ ContextActionResult, UserInputState, BorderMode, FormFactor. не должны запускаться при старте. `parseRobloxLuaMeta()` парсит JSON из второй строки packed-кода, при `enabled=false` скрипт идёт в `rbxlSkipped`. +### Tool/Backpack/Mouse flow (Шаг 1) + +Контекст: Roblox-Tool это объект который попадает в Backpack игрока, +при экипировке (клавиша 1-9) фейерит Tool.Equipped с настоящим Mouse, +скрипты внутри Tool слушают MouseButton1Down/KeyDown. + +**В `RobloxShim.js`:** +- `localPlayer.Backpack` — инвентарь. +- `localPlayer:GetMouse()` → playerMouse с Button1Down/KeyDown/Hit.Position. +- Внутренний `allTools[]` registry + `equippedTool` слот. +- `Instance.new('Tool')` теперь: + - создаёт виртуальный `Handle` (Part внутри Tool); + - регистрирует в `allTools[]`; + - шлёт `toolRegistered {index, name}` в GameRuntime. +- `fireGlobalEvent` обрабатывает: `equipTool`, `unequipTool`, + `toolActivated`, `toolDeactivated`, `mouseButton1Down`/`Up`, `keyDown`/`Up`. +- `__rbxl_get_tool_by_name(name)` — для script.Parent резолва. + +**В `LuaSharedSandbox.js`:** +- `addScript(id, code, target, name, {toolName})` — расширенная сигнатура. +- В `_startSingleScript` если есть `toolName` — `script.Parent` = виртуальный Tool. + +**В `GameRuntime.js`:** +- Эвристика: скрипты с `target=null` и содержащие + `(script.Parent|Tool).(Equipped|Unequipped|Activated|Deactivated)` → + получают `toolName='Tool'`, группируются в один общий Tool. +- `_registerRbxlTool(payload)` — кладёт item в InventoryUI.hotbar, + слушает `slot` event → шлёт `equipTool`/`unequipTool`. +- `canvas.mousedown` → `mouseButton1Down` + `toolActivated` с raycast Hit. +- `_raycastFromCamera()` — простой ray из камеры на 50 unit вперёд. + +**Надо ли в JS?** ✅ Да — Tool/Backpack/Mouse это базовый Roblox-game-loop. + +### Импорт изменений в converter.py (не задеплоено) + +Файл изменён локально, но importer на VM 130 — не обновлён. Когда придёт +время деплоя, ключевые правки: +- `_collect_tool(inst)` — собирает `scene['tools'][]` из Tool/HopperBin; +- `_find_ancestor_tool(inst)` — определяет в каком Tool лежит Script; +- В `_convert_script` добавлено поле `tool_id` в метадату. + +Это уберёт необходимость эвристики на стороне studio. + ### Надо ли портировать в JS-движок? ✅ **Да, всё** — это базовый Roblox-совместимый API, который должен работать