min d019da0ab6 feat(wiki): инфраструктура JS/Lua вкладок в статьях
Что сделано:

1. docsLang.jsx (НОВЫЙ):
   - DocsLangProvider — Context для выбранного языка (localStorage).
   - DocsLangPicker — большой переключатель JS/Lua над разделом.
   - <LangTabs js={...} lua={...} /> — локальные вкладки внутри
     статьи: показывает контент текущего языка.
   - useDocsLang() хук.
   - Стили для picker / tabs / langChoiceModal / docTable.

2. docsData.jsx:
   - Новая статья D0 "Скриптинг: JS или Lua — что выбрать?"
     в самом верху раздела D. Сравнение, примеры одного и того же
     кода на двух языках, советы новичкам.
   - Импорт LangTabs.

3. KubikonDocs.jsx:
   - ChapterPage обёрнут в DocsLangProvider + DocsLangPicker сверху.
     Юзер может одним кликом переключить весь раздел JS↔Lua.
   - LessonPage: при «Открыть мою копию» теперь показывается модалка
     LangChoiceModal (JS / Lua). Создаём копию с нужными скриптами.
   - convertProjectScriptsToLua() конвертит project_data:
     если в скрипте есть code_lua слот — активируем. Иначе ставим
     stub с подсказкой.

4. docsGamesBuilders.js:
   - buildGameProject(id, opts) принимает opts.lang='lua'.
     Та же логика — code_lua или stub.

ОСТАЛОСЬ (постепенно):
- Lua-эквиваленты в существующих 78 статьях. Сейчас Picker уже
  показывается, но если в статье нет <LangTabs> — контент одинаковый.
  Будем добавлять <LangTabs> в ключевые места по очереди.
- Lua-версии в GAME_BUILDERS для уроков 1-50 (code_lua слот).
2026-06-09 02:25:24 +03:00

Студия Рублокса

Open-source веб-студия для создания игр Рублокса — платформы 3D-игр в стиле Roblox.

Построена на Babylon.js 7 + React 18 + Vite 5 + Monaco Editor. Делай вокселные карты, ставь модели, пиши скрипты на JS в Web Worker-песочнице. Опубликованные игры открываются в Плеере Рублокса (отдельный репозиторий).

Лицензия: AGPL-3.0 Коммерческая лицензия


Быстрый старт (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'ам! Перед первым:

  1. Прочитай CONTRIBUTING.md — стиль, ветки, шаблон PR.
  2. Подпиши CLA (через https://team.rublox.pro/developer/cla или комментарий /sign-cla).
  3. Открывай 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 Иванкова Виктория Сергеевна (ИП). Все права защищены.


Ссылки

Description
Open-source веб-студия для создания игр Рублокса. AGPL-3.0 + Коммерческая лицензия.
https://studio.rublox.pro
Readme AGPL-3.0 22 MiB
2026-05-28 11:48:17 +00:00
Languages
JavaScript 95.9%
Python 2.3%
CSS 1.7%