feat(player): синхронизация со студией — поддержка Lua + JS-API + Roblox-импорта #22

Merged
min merged 7 commits from feat/rbxl-import into main 2026-06-09 22:01:54 +00:00
Owner

Summary

  • Lua-стек переключён с worker'а на main-thread LuaSharedSandbox
  • Перенесён RobloxShim 2500 строк (~35+ _rbxl* хелперов) и LabelManager с rich-text
  • GameRuntime получил ~12 новых cmd-handlers
  • JS-API: game.self.setVisible/setCollide/setColor/setLabel/rotate (фикс «GUI-карточки в студии работали, в плеере нет»), game.remote/tools/leaderstats/achievements
  • BabylonScene: _meshToTarget возвращает NPC, click в 3rd person через scene.pick
  • Удалены 7 файлов мёртвого worker-стека (-2034 строки)
  • npm build проходит

Test plan

  • Открой в плеере любую игру с Lua-скриптами → запускается без ReferenceError на _rbxl*
  • Открой ROBLOX Battle .rbxl-проект → HUD overlay (Teams/Leaderstats) виден
  • Открой игру где скрипт на 3D-объекте делает self.setColor/setVisible → работает
## Summary - Lua-стек переключён с worker'а на main-thread LuaSharedSandbox - Перенесён RobloxShim 2500 строк (~35+ __rbxl_* хелперов) и LabelManager с rich-text - GameRuntime получил ~12 новых cmd-handlers - JS-API: game.self.setVisible/setCollide/setColor/setLabel/rotate (фикс «GUI-карточки в студии работали, в плеере нет»), game.remote/tools/leaderstats/achievements - BabylonScene: _meshToTarget возвращает NPC, click в 3rd person через scene.pick - Удалены 7 файлов мёртвого worker-стека (-2034 строки) - npm build проходит ## Test plan - [ ] Открой в плеере любую игру с Lua-скриптами → запускается без ReferenceError на __rbxl_* - [ ] Открой ROBLOX Battle .rbxl-проект → HUD overlay (Teams/Leaderstats) виден - [ ] Открой игру где скрипт на 3D-объекте делает self.setColor/setVisible → работает
min added 1 commit 2026-06-07 15:27:09 +00:00
feat(rbxl-import): Lua-runtime (wasmoon) для Roblox-скриптов
All checks were successful
CI / Lint (pull_request) Successful in 54s
CI / Build (pull_request) Successful in 1m33s
CI / Secret scan (pull_request) Successful in 20s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
f34320db91
Часть тест-фичи импорта Roblox-карт (см. rublox/studio rbxl-importer/).

Что добавлено:
- wasmoon (Lua 5.4 WASM) как dep.
- RobloxLuaWorker.js — Worker-хост Lua-VM.
- RobloxLuaSandbox.js — main-side обёртка (по аналогии с ScriptSandbox).
- roblox-shim.js — math (Vector3/Color3/CFrame/UDim2),
  Instance прокси (game/workspace/script/GetService/IsA),
  Part свойства (Position/Color/Material/Anchored/CanCollide),
  RBXScriptSignal (Touched/Heartbeat/Stepped/Connect/Wait).
- roblox-scheduler.js — корутины + wait/task.wait/task.delay/task.spawn,
  автоматический fire Heartbeat/Stepped/RenderStepped на tick.
- roblox-tween.js — TweenService с 10 easing-функциями
  (Linear, Quad, Cubic, Quart, Quint, Sine, Bounce, Elastic, Back, Exponential).
- roblox-services.js — Players/LocalPlayer/Character/Humanoid
  (Health, WalkSpeed, JumpPower, TakeDamage, Died, LoadAnimation),
  UserInputService, RemoteEvent (FireServer/FireClient),
  RemoteFunction, DataStoreService, HttpService.
- roblox-physics.js — BodyVelocity/BodyGyro/BodyPosition/BodyForce/
  BodyAngularVelocity/AlignPosition/LinearVelocity.

Интеграция в GameRuntime:
- В start() проверяется script.kind === 'roblox-lua' →
  _startRobloxLuaScript() запускает RobloxLuaSandbox.
- _handleRobloxLuaCommand() мапит IPC команды (partSet/partVel/playerCmd)
  на PrimitiveManager и game.player API.
- _buildRobloxLuaSceneSnap() готовит snap для workspace:GetChildren.

Тесты: **36/36 passed**.
- mvp (9): math, Instance proxy, Part, IsA.
- wait (5): корутины, wait/task.wait/task.delay.
- tween (2): TweenInfo + Linear easing.
- services (8): Humanoid, DataStore, HttpService, RemoteEvent.
- integration (12): KillBrick, WalkSpeed, Tween-door, BodyVelocity конвейер,
  leaderstats, Checkpoint, циклы с wait, task.spawn, Color/Material,
  RemoteEvent client→server, Heartbeat, Vector3.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
min added 4 commits 2026-06-09 21:21:31 +00:00
- ScriptSandboxWorker: добавлены отсутствующие методы game.self.* (rotate, rotateY,
  setVisible, setCollide, setColor, setLabel, clearLabel) — критично для GUI-карточек
  и интерактивных объектов сцены.
- Добавлены namespace'ы game.remote (RemoteEvent), game.tools (custom Tool.create),
  game.items.define, game.leaderstats (define/set/add/get/onChange/me-shortcut),
  game.achievements (define/unlock/has/bindToStat/setButtonVisible/openPage).
- inventory: добавлены inv2-методы (give/take/open/closeUi/toggle/sort/setActiveHotbar).
- giveTool теперь принимает Tool-объект из tools.create (поле customToolId).
- Роутинг globalEvent: добавлены leaderstatsChange, achievementUnlocked, toolEquipped,
  toolUnequipped, remoteEvent; toolUse теперь вызывает per-tool onActivated.
- tween() нормализует ref через _normRef — теперь принимает не только строку,
  но и объект из scene.spawn/find.
- BabylonScene._meshToTarget: добавлен случай md.npcId != null → kind='npc'.
- BabylonScene._handlePlayClick: в 3-м лице (без pointer-lock) клик теперь
  пикает по реальным координатам мыши, а не из центра экрана. Это чинит
  клики по GUI/3D-карточкам и интерактивным объектам в третьем лице.

Не тронуты старые worker-файлы (roblox-shim.js и т.п.) — снос будет позже.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
chore(player): удалён мёртвый worker-based Lua стек после миграции на LuaSharedSandbox (Фаза 4)
All checks were successful
CI / Lint (pull_request) Successful in 55s
CI / Build (pull_request) Successful in 1m27s
CI / Secret scan (pull_request) Successful in 26s
CI / PR size check (pull_request) Successful in 10s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
60f0ba009d
min changed title from feat: импорт Roblox .rbxl карт (тест-фича МИНа) to feat(player): синхронизация со студией — поддержка Lua + JS-API + Roblox-импорта 2026-06-09 21:22:25 +00:00
min added 1 commit 2026-06-09 21:48:39 +00:00
feat(player): обновлённый LoadingScreenOverlay с blur-фоном из студии
All checks were successful
CI / Lint (pull_request) Successful in 52s
CI / Build (pull_request) Successful in 1m31s
CI / Secret scan (pull_request) Successful in 21s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
adc950accf
В студии был обновлён loading-экран:
- размытый фон из cover-картинки
- квадратная обложка по центру вместо широкой
- имя автора под названием
- более крупный прогресс с процентом

Плеер остался на старой версии (синий фон, широкая обложка),
поэтому в проде разница была заметна — фикс делает плеер
1-в-1 со студией.
min added 1 commit 2026-06-09 21:56:51 +00:00
Merge remote-tracking branch 'origin/main' into feat/rbxl-import
All checks were successful
CI / Lint (pull_request) Successful in 55s
CI / Build (pull_request) Successful in 1m35s
CI / Secret scan (pull_request) Successful in 20s
CI / PR size check (pull_request) Successful in 6s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
4a3192ea67
# Conflicts:
#	src/engine/GameRuntime.js
#	src/engine/ScriptSandboxWorker.js
min merged commit a5e1558c2d into main 2026-06-09 22:01:54 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rublox/player#22
No description provided.