# Студия Рублокса Open-source веб-студия для создания игр Рублокса — платформы 3D-игр в стиле Roblox. Построена на **Babylon.js 7** + **React 18** + **Vite 5** + **Monaco Editor**. Делай вокселные карты, ставь модели, пиши скрипты на JS в Web Worker-песочнице. Опубликованные игры открываются в [Плеере Рублокса](https://git.rublox.pro/rublox/player) (отдельный репозиторий). [![Лицензия: AGPL-3.0](https://img.shields.io/badge/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F-AGPL--3.0-blue.svg)](./LICENSE) [![Коммерческая лицензия](https://img.shields.io/badge/%D0%9A%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D0%B0-green.svg)](./LICENSE-COMMERCIAL.md) --- ## Быстрый старт (5 минут) **Требования:** - Node.js 18+ и npm 10+ - Браузер с WebGL2 (Chrome 90+ / Firefox 90+ / Safari 15+) - 8 ГБ свободной памяти (студия тяжелее плеера — Monaco + большой ландшафт) **Установка:** ```bash 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/` — например `http://localhost:5174/edit/265`. **Без JWT** ты увидишь экран авторизации. Чтобы обойти: ```js // В DevTools браузера: localStorage.setItem('Authorization', '<твой-jwt-с-rublox.pro>'); location.reload(); ``` --- ## Ассеты (GLB-модели / текстуры / звуки) Папка `public/kubikon-assets/` (~93 МБ) **не хранится в git** чтобы репозиторий был лёгким. Скачать отдельно: ```bash curl -L -o assets.zip https://git.rublox.pro/rublox/studio/releases/download/latest/kubikon-assets.zip unzip assets.zip -d public/ ``` Без ассетов студия запустится, но ландшафт будет пустой (нет текстур блоков). --- ## Standalone-режим (без бэкенда) Хочешь попробовать без авторизации? ```bash 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](./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, открыть пустой редактор. | --- ## Команды ```bash 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](./CONTRIBUTING.md) — стиль, ветки, шаблон PR. 2. Подпиши [CLA](./CLA.md) (через `https://team.rublox.pro/developer/cla` или комментарий `/sign-cla`). 3. Открывай issues через шаблоны в `.gitea/ISSUE_TEMPLATE/`. **Быстрый цикл:** ```bash git checkout -b feature/моя-фича # ...пишешь код... npm run lint && npm run format git commit -m "feat: описание" git push origin feature/моя-фича ``` --- ## Лицензия Двойная лицензия: - **[AGPL-3.0-or-later](./LICENSE)** — для open-source использования. Форки и производные работы (включая SaaS) обязаны публиковать свой исходник под той же лицензией. - **[Коммерческая лицензия](./LICENSE-COMMERCIAL.md)** — для проприетарных продуктов. Контакт: `maksimivankov26@yandex.ru`. Все контрибьюторы обязаны подписать [CLA](./CLA.md) перед первым 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](./SECURITY.md)