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>
Студия Рублокса
Open-source веб-студия для создания игр Рублокса — платформы 3D-игр в стиле Roblox.
Построена на Babylon.js 7 + React 18 + Vite 5 + Monaco Editor. Делай вокселные карты, ставь модели, пиши скрипты на JS в Web Worker-песочнице. Опубликованные игры открываются в Плеере Рублокса (отдельный репозиторий).
Быстрый старт (5 минут)
Требования:
- Node.js 18+ и npm 10+
- Браузер с WebGL2 (Chrome 90+ / Firefox 90+ / Safari 15+)
- 8 ГБ свободной памяти (студия тяжелее плеера — Monaco + большой ландшафт)
Установка:
git clone ssh://git@git.rublox.pro:2222/rublox/studio.git
cd studio
npm install
cp .env.example .env # дефолты указывают на публичный staging — работает сразу
npm run dev
Открой http://localhost:5174/edit/<gameId> — например http://localhost:5174/edit/265.
Без JWT ты увидишь экран авторизации. Чтобы обойти:
// В DevTools браузера:
localStorage.setItem('Authorization', '<твой-jwt-с-rublox.pro>');
location.reload();
Ассеты (GLB-модели / текстуры / звуки)
Папка public/kubikon-assets/ (~93 МБ) не хранится в git чтобы репозиторий был лёгким. Скачать отдельно:
curl -L -o assets.zip https://git.rublox.pro/rublox/studio/releases/download/latest/kubikon-assets.zip
unzip assets.zip -d public/
Без ассетов студия запустится, но ландшафт будет пустой (нет текстур блоков).
Standalone-режим (без бэкенда)
Хочешь попробовать без авторизации?
echo "VITE_STANDALONE=true" >> .env
npm run dev
Открой http://localhost:5174/edit/sample — пустой редактор, авторизация-мок, save отключён.
Структура проекта
src/
├── editor/ # Главный редактор (KubikonEditor) ~37к строк
│ ├── engine/ # Babylon-движок — 66 файлов, ~28к строк
│ │ # BabylonScene, GameRuntime, MultiplayerSync,
│ │ # PlayerController, BlockManager, TerrainVoxelBuilder,
│ │ # ModelManager, DecoManager, ScriptSandbox,
│ │ # 30+ GD-гейммодов
│ └── *Panel.jsx, *Modal.jsx — UI редактора (Hierarchy/Inspector/Terrain/ScriptEditor)
├── preview-player/ # Встроенный мини-плеер для теста («Play»-кнопка в редакторе)
├── community/ # Витрина/лента: KubikonFeed, KubikonStudio, KubikonDocs,
│ # KubikonLearn, KubikonGamePage, KubikonHeroKit, RealtimeTest
├── gd-shop/ # Geometry Dash: GdMenu, GdShop, GdRules, GdCoverArt, GdPlayWrapper
├── admin-preview/ # Превью-каталоги для дизайнеров: GdSkins, GdBosses,
│ # GdSpikes, GdArches, GdFinishes, GdPortals, GdMusic,
│ # GdSfx, GdShipSkins, GdDeco
├── components/ # Общий UI: KubikonBugReport, KubikonLeaderboard,
│ # KubikonPerfOverlay, EmailConfirmNotice, PleeseReg,
│ # RublocsLogo
├── api/ # API.js (конфиг) + Kubikon3DService.js + KubikonCadService
│ # + SanctionsService + playTicket
├── auth/ # AuthContext, SanctionsContext (лёгкие версии,
│ # без UserService от минки)
├── hooks/ # useDeviceType
├── utils/ # kubikonTheme, kubikonTime
├── App.jsx # Router + Suspense (15+ роутов)
├── main.jsx
├── index.css
└── LoadingScreen.jsx
Подробнее об архитектуре — в ARCHITECTURE.md.
Переменные окружения
Скопируй .env.example в .env и поправь:
| Переменная | Дефолт | Что означает |
|---|---|---|
VITE_API_BASE |
(пустая) | Базовый URL HTTP-API. Пустой = vite-proxy (для dev). |
VITE_API_PROXY_TARGET |
https://dev-api.rublox.pro |
(dev) куда vite-proxy шлёт /api-*. |
VITE_REALTIME_HTTP |
https://dev-api.rublox.pro/api-game |
Colyseus HTTP. |
VITE_REALTIME_WS |
wss://dev-api.rublox.pro/api-game |
Colyseus WS. |
VITE_RUBLOX_HOME |
https://rublox.pro/app |
Редирект на главный сайт если нет авторизации. |
VITE_PLAYER_URL |
https://player.rublox.pro |
URL плеера (для кнопки «Тест в плеере»). |
VITE_STANDALONE |
false |
Пропустить API, открыть пустой редактор. |
Команды
npm run dev # Dev-сервер (vite, порт 5174)
npm run build # Прод-билд → build/
npm run preview # Превью прод-билда локально
npm run lint # ESLint
npm run format # Prettier (записать)
npm run format:check # Prettier (проверить)
Контрибьютинг
Мы рады PR'ам! Перед первым:
- Прочитай CONTRIBUTING.md — стиль, ветки, шаблон PR.
- Подпиши CLA (через
https://team.rublox.pro/developer/claили комментарий/sign-cla). - Открывай issues через шаблоны в
.gitea/ISSUE_TEMPLATE/.
Быстрый цикл:
git checkout -b feature/моя-фича
# ...пишешь код...
npm run lint && npm run format
git commit -m "feat: описание"
git push origin feature/моя-фича
Лицензия
Двойная лицензия:
- AGPL-3.0-or-later — для open-source использования. Форки и производные работы (включая SaaS) обязаны публиковать свой исходник под той же лицензией.
- Коммерческая лицензия — для проприетарных продуктов. Контакт:
maksimivankov26@yandex.ru.
Все контрибьюторы обязаны подписать CLA перед первым merge.
© 2026 Иванкова Виктория Сергеевна (ИП). Все права защищены.
Ссылки
- Главный сайт: https://rublox.pro
- Студия (демо): https://studio.rublox.pro
- Плеер (отдельный репо): https://git.rublox.pro/rublox/player
- Issues и PR: https://git.rublox.pro/rublox/studio
- Безопасность: SECURITY.md