player/README.md
МИН 8428cda555 docs: переписал README/ARCHITECTURE/CONTRIBUTING/SECURITY/CHANGELOG на русский
Юзер указал что вся документация opensource-репо должна быть на русском.
Также:
- .env.example комменты на русском
- package.json description на русском
- Описания org и repo в Gitea обновлены через API
2026-05-27 23:13:28 +03:00

165 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Плеер Рублокса
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/<gameId>` — например `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/<id> и т.д. — для 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)