studio/src/community/learnArticles.jsx
МИН 61fba4e174
Some checks failed
CI / Lint + Format (push) Failing after 32s
CI / Build (push) Failing after 37s
CI / Secret scan (push) Failing after 37s
CI / PR size check (push) Has been skipped
fix: починка билда + studio.rublox.pro инфра
Большой консолидирующий коммит после поднятия studio.rublox.pro (28 мая 2026).
Содержит изменения которые делались в процессе подготовки прод-окружения:

Фиксы импортов после выноса из minecraftia:
- Массовая замена путей ../../components → ../components (40+ файлов в src/community/, src/admin-preview/)
- Замена ../KubikonEditor/ → ../editor/, ../KubikonStudio/ → ../community/, ../AdminPreview/ → ../admin-preview/
- API.js скопирован из минки целиком (было 8 экспортов, стало 312)
- Добавлены PLAYER_URL, MyButton_1, недостающие компоненты
- Заменены require() на статические ES-imports в BabylonScene, PrimitiveManager, GameRuntime (Vite не поддерживает CJS require)

Структура ассетов:
- public/kubikon-templates/ → public/assets/kubikon-templates/
- public/kubikon-learn/ → public/assets/kubikon-learn/
- (код искал в /assets/, файлы лежали без /assets/)

Навигация роутов внутри студии:
- /kubikon-studio/docs → /docs (90+ навигационных вызовов sed-replaced)
- /kubikon-editor/X → /edit/X, /kubikon/play/X → /play/X, /kubikon/gd/X → /gd/X

UI:
- Новый компонент StudioHeader (61px, как в минке) + копия favicon
- WithHeader wrapper в App.jsx для всех страниц кроме fullscreen-редактора/плеера
- SSO ticket-flow в AuthContext (auto-redeem #ticket= при загрузке)
- Тёмная тема карточек игр в ВИКИ (фон #1c2231 вместо #fff, картинка впритык)

Документация:
- docs/ONBOARDING.md — путь нового контрибьютора от нуля до PR
- docs/TUTORIAL_ADD_SCRIPT_API.md — как добавить game.* API
- API_USAGE.md — список эндпоинтов backend
- README в подпапках engine/, engine/terrain/, engine/voxel/, engine/robloxterrain/, engine/types/

.gitignore:
- public/wiki/ исключён (73МБ PNG, будут на CDN отдельной задачей)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 05:01:13 +03:00

388 lines
22 KiB
JavaScript
Raw 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.

import React from 'react';
import DocIcon from './docsIcons';
/**
* learnArticles.jsx — статьи блока «Изучай Студию» Рублокс Студии.
*
* Каждая статья — { id, icon, color, title, summary, cover, body }:
* - id — ключ для роута /learn/<id>
* - icon — имя SVG-иконки (docsIcons), для запасного фона карточки
* - color — акцентный цвет карточки
* - cover — файл превью из public/assets/kubikon-learn/<cover>
* - summary — краткое описание для карточки
* - body — готовый JSX статьи
*
* Рендерит KubikonLearn.jsx.
*/
// ── Хелперы разметки (своя плашка-стилистика, классы в KubikonLearn) ──
const Tip = ({ children }) => (
<div className="lrnBox lrnBox--tip">
<span className="lrnBox__ico"><DocIcon name="lightbulb" size={18} /></span>
<div>{children}</div>
</div>
);
const Warn = ({ children }) => (
<div className="lrnBox lrnBox--warn">
<span className="lrnBox__ico"><DocIcon name="warning" size={18} /></span>
<div>{children}</div>
</div>
);
const Ok = ({ children }) => (
<div className="lrnBox lrnBox--ok">
<span className="lrnBox__ico"><DocIcon name="flag" size={18} /></span>
<div>{children}</div>
</div>
);
// Шаг инструкции с номером
const Step = ({ n, children }) => (
<div className="lrnStep">
<span className="lrnStep__n">{n}</span>
<div className="lrnStep__body">{children}</div>
</div>
);
// Подзаголовок внутри статьи
const H = ({ children }) => <h3 className="lrnH">{children}</h3>;
// ── Статьи ──────────────────────────────────────────────────────────
export const ARTICLES = [
// ═══ 1. С чего начать ═══
{
id: 'start',
icon: 'rocket',
color: '#3357ff',
cover: 'start.jpg',
title: 'С чего начать',
summary: 'Что такое Рублокс Студия и как сделать свою первую игру за пару минут.',
body: (
<>
<p>
<b>Рублокс Студия</b> это редактор, в котором ты создаёшь
свои 3D-игры: строишь мир, ставишь объекты, пишешь логику и
публикуешь игру, чтобы в неё играли другие.
</p>
<H>Первая игра за 1 минуту</H>
<Step n="1">
На главной Студии нажми <b>«Новая игра»</b> или выбери
готовый шаблон в блоке «Открой шаблон».
</Step>
<Step n="2">
Откроется редактор. Шаблон уже содержит ландшафт можно
сразу ходить по нему и достраивать.
</Step>
<Step n="3">
Нажми <b>«Запустить»</b> попробуй игру так, как её увидят
игроки.
</Step>
<Step n="4">
Когда игра готова нажми <b>«Опубликовать»</b>, и она
появится в общей ленте Рублокса.
</Step>
<H>Что дальше</H>
<p>
Изучи остальные статьи этого раздела: как добавлять свои
модели и текстуры, как писать скрипты, чем отличаются плееры
и как правильно тестировать игру. А подробный учебник по
всем механикам в разделе <b>ВИКИ</b>.
</p>
<Tip>
Лучший способ научиться открыть готовый шаблон или
игру-урок из вики и разобраться, как она устроена.
</Tip>
</>
),
},
// ═══ 2. Свои текстуры и 3D-модели (ОБЯЗАТЕЛЬНАЯ) ═══
{
id: 'assets',
icon: 'cube',
color: '#8b5cf6',
cover: 'assets.jpg',
title: 'Свои текстуры и 3D-модели',
summary: 'Как загрузить свои картинки и 3D-модели .glb в игру. Про лимиты на загрузку.',
body: (
<>
<p>
В Рублокс Студию можно добавлять <b>свои картинки</b> (для
текстур и интерфейса) и <b>свои 3D-модели</b> в формате{' '}
<b>.glb</b> (или .gltf). Это позволяет наполнять игру
уникальным контентом, а не только встроенными объектами.
</p>
<H>Как загрузить 3D-модель (.glb)</H>
<Step n="1">
Открой свою игру в редакторе.
</Step>
<Step n="2">
В панели объектов найди раздел загрузки моделей и нажми
кнопку <b>«Загрузить .glb»</b>.
</Step>
<Step n="3">
Выбери файл <b>.glb</b> или <b>.gltf</b> на компьютере.
Модель появится в палитре её можно ставить в сцену как
обычный объект.
</Step>
<p>
Где взять .glb-модели: бесплатные библиотеки (например
Sketchfab, Poly Pizza, Quaternius), или сделай свою в
Blender и экспортируй в .glb.
</p>
<H>Как загрузить картинку (текстуру)</H>
<p>
В редакторе есть библиотека картинок туда можно загрузить
свои изображения и использовать их как текстуры объектов
или картинки в интерфейсе игры. Картинка автоматически
ужимается до 512 пикселей, чтобы не раздувать игру.
</p>
<H>Лимиты на загрузку важно</H>
<p>
Рублокс Студия веб-платформа: вся твоя игра вместе с
моделями, текстурами и звуками <b>хранится на сервере</b>.
Место на сервере не бесконечно, поэтому действуют лимиты:
</p>
<ul>
<li><b>3D-модели .glb:</b> до 6 штук на одну игру, каждая не больше 4 МБ.</li>
<li><b>Картинки:</b> до 24 штук на одну игру.</li>
<li><b>Звуки:</b> ограничены по числу и размеру на игру.</li>
<li><b>Игры:</b> до 40 игр на один аккаунт.</li>
</ul>
<Warn>
Лимиты не придирка, а забота о платформе. Рублокс делает
один человек, и сервер пока небольшой. Если каждый зальёт
сотни тяжёлых моделей место кончится у всех. Поэтому:
удаляй ненужные игры и не загружай огромные модели без
необходимости.
</Warn>
<Tip>
Чтобы модель весила меньше: уменьши количество полигонов в
Blender, сожми текстуры модели, убирай лишние материалы.
Лёгкая модель и грузится быстрее у игроков.
</Tip>
<Ok>
Достиг лимита игр на аккаунт? Удали те, что не нужны
освободится место для новых. Старые наработки лучше держать
компактными.
</Ok>
</>
),
},
// ═══ 3. Плееры (ОБЯЗАТЕЛЬНАЯ) ═══
{
id: 'players',
icon: 'window',
color: '#06b6d4',
cover: 'players.jpg',
title: 'Плееры: веб, Windows, мобильный',
summary: 'Где играют в твою игру и почему её обязательно нужно тестировать в плеере.',
body: (
<>
<p>
Игру ты создаёшь <b>здесь</b>, в Рублокс Студии на сайте
Майнкрафтии в браузере. Но играют в твою игру на разных
устройствах, и у каждого свой «плеер» (программа, которая
запускает игру).
</p>
<H>Три плеера Рублокса</H>
<ul>
<li>
<b>Веб-плеер</b> прямо в браузере на сайте. На нём же
ты тестируешь игру кнопкой «Запустить» в редакторе.
</li>
<li>
<b>Windows-приложение</b> отдельная программа для ПК.
Работает на движке <b>Godot</b>.
</li>
<li>
<b>Мобильное приложение</b> для телефонов. Работает на
отдельном движке, написанном специально для Рублокса.
</li>
</ul>
<H>Почему это важно</H>
<p>
Редактор и три плеера используют <b>разные движки</b>. Мы
стараемся, чтобы игра везде выглядела и работала одинаково,
но <b>небольшие различия возможны</b>: где-то иначе ляжет
свет, чуть по-другому сработает физика или эффект.
</p>
<Warn>
<b>Всегда проверяй свою игру в плеере, а не только в
редакторе.</b> То, что хорошо смотрится в редакторе, на
Windows или телефоне может выглядеть немного иначе. Прошёл
игру сам в плеере значит, в неё точно можно играть.
</Warn>
<Tip>
Если заметил, что в плеере что-то работает не так, как в
редакторе, это ценная находка. Отправь баг-репорт (см.
статью «Бета-версия и баг-репорты»), и расхождение починят.
</Tip>
</>
),
},
// ═══ 4. Бета-версия и баг-репорты (ОБЯЗАТЕЛЬНАЯ) ═══
{
id: 'beta',
icon: 'bug',
color: '#ec4899',
cover: 'beta.jpg',
title: 'Бета-версия и баг-репорты',
summary: 'Почему сейчас бета, как сообщить об ошибке и помочь сделать Рублокс лучше.',
body: (
<>
<p>
Рублокс большая платформа: редактор, три плеера,
мультиплеер, лента игр, чат, система скинов. И всё это
делает <b>один человек МИН</b>.
</p>
<H>Сейчас Рублокс это бета-версия</H>
<p>
Работы очень много, и причесать каждую мелочь к идеалу
одному человеку пока не получилось. Поэтому текущая версия
Рублокса <b>бета</b>: всё основное работает, но кое-где
могут встречаться баги и шероховатости.
</p>
<p>
Когда платформа станет стабильной и отполированной будет
полноценный <b>релиз</b>. А пока помоги её до него
довести.
</p>
<H>Нашёл баг отправь репорт</H>
<p>
Если что-то сломалось, работает странно или вылетает
<b> отправь баг-репорт</b>. МИН видит все репорты и
исправляет ошибки. Каждый репорт реально помогает.
</p>
<Step n="1">
Заметил проблему в редакторе или плеере найди кнопку
<b> «Сообщить о баге»</b>.
</Step>
<Step n="2">
Опиши, что случилось: что ты делал, что ожидал и что
получилось вместо этого. Чем подробнее тем быстрее
починят.
</Step>
<Step n="3">
Если можно приложи скриншот. Картинка часто объясняет
баг лучше слов.
</Step>
<Ok>
Хороший баг-репорт: «Открыл игру в Windows-плеере, нажал
прыжок на платформе 3 персонаж провалился сквозь
платформу. В редакторе всё нормально». Понятно, что, где и
при каких условиях.
</Ok>
<Warn>
Не нужно: репорты вроде «всё плохо», «не работает» без
подробностей. По ним невозможно понять, что чинить.
</Warn>
<Tip>
Спасибо, что пользуешься Рублоксом на стадии беты. Каждый
твой репорт приближает релиз и платформа станет лучше для
всех.
</Tip>
</>
),
},
// ═══ 5. Скрипты и логика ═══
{
id: 'scripts',
icon: 'code',
color: '#16a34a',
cover: 'scripts.jpg',
title: 'Скрипты: оживи свою игру',
summary: 'Как с помощью скриптов сделать так, чтобы в игре что-то происходило.',
body: (
<>
<p>
Построить красивый мир половина дела. Чтобы игра была
<b> игрой</b>, в ней должно что-то происходить: считаться
очки, появляться враги, открываться двери. За это отвечают
<b> скрипты</b>.
</p>
<H>Что такое скрипт</H>
<p>
Скрипт это небольшая программа на JavaScript. Её можно
повесить на весь мир или на конкретный объект. Через объект
{' '}<code>game</code> скрипт управляет игрой: игроком,
объектами, интерфейсом, звуками.
</p>
<H>Что умеют скрипты</H>
<ul>
<li>реагировать на касание объекта, клик, нажатие клавиши;</li>
<li>двигать и создавать объекты, менять их цвет;</li>
<li>считать очки, таймер, здоровье игрока;</li>
<li>показывать текст и интерфейс, проигрывать звуки;</li>
<li>телепортировать игрока, спавнить врагов и эффекты.</li>
</ul>
<Tip>
Не нужно писать всё с нуля. Открой готовый шаблон
(Платформер, Шутер, Гонки) или игру-урок из вики
посмотри, как там написаны скрипты, и переделай под себя.
</Tip>
<p>
Полный справочник по скриптам что доступно через{' '}
<code>game.*</code>, какие есть события и команды в
разделе <b>ВИКИ</b>.
</p>
</>
),
},
// ═══ 6. Публикация ═══
{
id: 'publish',
icon: 'globeIcon',
color: '#f59e0b',
cover: 'publish.jpg',
title: 'Как опубликовать игру',
summary: 'Что происходит при публикации и как попасть в ленту Рублокса.',
body: (
<>
<p>
Когда игра готова её можно <b>опубликовать</b>, и она
появится в общей ленте Рублокса, где её увидят и запустят
другие игроки.
</p>
<H>Как опубликовать</H>
<Step n="1">
Проверь игру: пройди её сам в плеере от начала до конца.
</Step>
<Step n="2">
В редакторе нажми <b>«Опубликовать»</b>.
</Step>
<Step n="3">
Скрипты автоматически проверятся на безопасность. Если всё
чисто игра сразу попадёт в ленту.
</Step>
<H>Как игру заметят</H>
<p>
Лента показывает игры по «рейтингу интереса»: чем больше
игроки лайкают игру и проводят в ней времени тем выше она
в рекомендациях. Новым играм лента какое-то время даёт
«фору», чтобы их успели заметить.
</p>
<Tip>
Понятная цель, честная обложка, звук и проверенный геймплей
вот что делает игру популярной. Подробно в разделе
«Правила создания игр».
</Tip>
<Ok>
Опубликовал не бросай: чини баги, добавляй уровни. Лента
любит игры, которые развиваются.
</Ok>
</>
),
},
];
export const getArticle = (id) => ARTICLES.find((a) => a.id === id) || null;