# Плеер Рублокса Open-source веб-плеер игр Рублокса — платформы для создания 3D-игр в стиле Roblox. Построен на **Babylon.js 7** + **React 18** + **Vite 5**. Запускает пользовательские игры, опубликованные из [Студии Рублокса](https://git.rublox.pro/rublox/studio) (отдельный репозиторий). [![Лицензия: 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+) - 4 ГБ свободной памяти (Babylon-сцены тяжёлые) **Установка:** ```bash git clone ssh://git@git.rublox.pro:2222/rublox/player.git cd player npm install cp .env.example .env # дефолты указывают на публичный staging — работает сразу npm run dev ``` Открой `http://localhost:5173/` — например `http://localhost:5173/265` для нашего демо-уровня. **Без JWT** ты увидишь экран авторизации. Чтобы обойти его для локальной разработки: 1. Получи 90-дневный test-JWT у мейнтейнера (или используй свой с rublox.pro). 2. В DevTools браузера: ```js localStorage.setItem('player_jwt', '<вставь-сюда-свой-jwt>'); location.reload(); ``` --- ## Ассеты (GLB-модели / текстуры / звуки) Папка `public/kubikon-assets/` (~106 МБ) **не хранится в git** чтобы репозиторий был лёгким. Скачать отдельно: ```bash # Скачать последнюю версию ассетов из релиза: curl -L -o assets.zip https://git.rublox.pro/rublox/player/releases/download/latest/kubikon-assets.zip unzip assets.zip -d public/ ``` В standalone-режиме (см. ниже) ассеты не нужны — там работает только встроенная демо-игра. --- ## Standalone-режим (без бэкенда) Нет JWT? Хочешь попробовать плеер без авторизации? ```bash echo "VITE_STANDALONE=true" >> .env npm run dev ``` Открой `http://localhost:5173/sample` — загрузится встроенный демо-проект (`src/fixtures/sample-game.json`). Все save/leaderboard/chat действия игнорируются. --- ## Структура проекта ``` src/ ├── engine/ # Движок Babylon.js — 81 файл, ~46k строк. │ # Самодостаточный: BabylonScene, GameRuntime, │ # MultiplayerSync, PlayerController, BlockManager, │ # DecoManager, ScriptSandbox, 30+ классов GD-гейммодов. ├── KubikonPlayer/ # UI-контейнер плеера: меню, чат, комменты, моб. контролы. ├── editor-shared/ # HUD-компоненты общие с редактором: хотбар, healthbar, │ # GUI-оверлей. ├── AdminPreview/ # Превью-роуты для команды дизайнеров (каталоги скинов, │ # музыки, порталов). ├── PreviewSkin/ # Роуты /_preview-skin/ и т.д. — для 3D-превью на │ # team.rublox.pro. ├── components/ # Общий UI: EmailConfirmNotice, KubikonBugReport, │ # Leaderboard. ├── api/ # API.js (конфиг) + Kubikon3DService.js (обёртки эндпоинтов). ├── auth/ # PlayerAuth.jsx (JWT/ticket flow), ticketExchange.js. ├── hooks/ # useDeviceType.js (детект моб./планшет). ├── utils/ # kubikonTime.js (форматирование времени). ├── App.jsx, main.jsx, LoadingScreen.jsx └── fixtures/ # sample-game.json для VITE_STANDALONE=true ``` Подробнее об архитектуре — в [ARCHITECTURE.md](./ARCHITECTURE.md). --- ## Переменные окружения Скопируй `.env.example` в `.env` и поправь: | Переменная | Дефолт | Что означает | |---|---|---| | `VITE_API_BASE` | _(пустая)_ | Базовый URL HTTP-API. Пустой = vite-proxy (для dev). | | `VITE_REALTIME_HTTP` | `https://dev-api.rublox.pro/api-game` | Colyseus HTTP-эндпоинт (мультиплеер-матчмейкинг). | | `VITE_REALTIME_WS` | `wss://dev-api.rublox.pro/api-game` | Colyseus WebSocket-эндпоинт. | | `VITE_RUBLOX_HOME` | `https://rublox.pro/app` | Куда редиректить юзеров без авторизации. | | `VITE_STANDALONE` | `false` | Пропустить API, загрузить `sample-game.json`. | | `VITE_API_PROXY_TARGET` | `https://dev-api.rublox.pro` | (только dev) куда vite-proxy шлёт `/api-*`. | --- ## Контрибьютинг Мы рады PR'ам! Прежде чем впервые что-то контрибьютить: 1. Прочитай [CONTRIBUTING.md](./CONTRIBUTING.md) — стиль кода, именование веток, шаблон PR. 2. Подпиши [CLA](./CLA.md) — обязательно перед первым merge (в Gitea стоит CLA-бот). 3. Открывай issues для багов/предложений через шаблоны в `.gitea/ISSUE_TEMPLATE/`. **Быстрый цикл PR:** ```bash git checkout -b feature/моя-фича # ...пишешь код... npm run lint npm run format git commit -m "feat: добавил фичу" git push origin feature/моя-фича # Открой PR на https://git.rublox.pro/rublox/player ``` --- ## Команды ```bash npm run dev # Dev-сервер (vite, порт 5173) npm run build # Прод-билд → build/ npm run preview # Превью прод-билда локально npm run lint # ESLint npm run format # Prettier (записать) npm run format:check # Prettier (только проверить — используется в CI) ``` --- ## Лицензия Двойная лицензия: - **[AGPL-3.0-or-later](./LICENSE)** — для open-source использования. Форки и производные работы (включая сетевые сервисы) обязаны публиковать свой исходник под той же лицензией. - **[Коммерческая лицензия](./LICENSE-COMMERCIAL.md)** — для проприетарных продуктов. Контакт: `maksimivankov26@yandex.ru`. Все контрибьюторы обязаны подписать [CLA](./CLA.md) перед первым merge. © 2026 Иванкова Виктория Сергеевна (ИП). Все права защищены. --- ## Ссылки - Главный сайт: https://rublox.pro - Демо плеера: https://player.rublox.pro - Студия (отдельный репо): https://git.rublox.pro/rublox/studio - Issues и PR: https://git.rublox.pro/rublox/player - Безопасность: см. [SECURITY.md](./SECURITY.md)