7 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
8f0266f8c2 |
fix(skin): cache-bust query ?v=20260614 for character-assets URLs
All checks were successful
After backend CORS rollout users had stale CORS-failure cached for Mixamo GLB. Adding a query suffix forces browsers to re-fetch the URL instead of replaying the cached failure. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
1229bdad3f |
feat(studio): Mixamo skins + crouch + fullscreen + skin from DB
All checks were successful
Синхронизация с rublox-player (Этап 1 ANIMATIONS_PLAN.md): MIXAMO: - Добавлен MixamoAnimator.js (полная копия из плеера) - В PlayerController список MIXAMO_SKINS (78 шт) - _resolveModelSource ветка для skin_* — грузит GLB с /character-assets/skins/ - _loadPlayerModel создаёт MixamoAnimator для Mixamo-скинов CROUCH (Ctrl): - AABB → 0.45, скорость 0.45×walk, приоритет над sprint - Анимации: crouch_enter → crouch_idle / crouch_walk → crouch_to_stand - Y-drop по 0.20-0.45м для разных Mixamo-клипов - Анти-флик debounce + детект one-shot vs loopable PREVIEW PLAYER: - Skin приоритет: URL #skin= → БД → localStorage → дефолт - Дефолт skin_bacon-hair → skin_y-bot ENTERPLAYMODE: - BabylonScene при Play читает hash/localStorage и подставляет user skin поверх projectModelType (тест-режим = играешь СВОИМ скином) KUBIKONEDITOR: - handlePlay async: предзагрузка скина из БД (если нет в URL) и инжект в hash - При Play: requestFullscreen() — блокирует Ctrl+W/D/T/R/S/A/P/F и др. - Во время Play: window keydown listener блокирует системные хоткеи, WASD проходят к PlayerController (для crouch+движение) |
||
| 624bbc636b |
feat(rbxl-import): single-VM, Touched, scroll-to-selected, GUI
Some checks failed
Все 5 задач итерации:
1. Single-VM mode (RobloxLuaSharedWorker/Sandbox):
- один Worker, одна wasmoon-VM на ВСЕ скрипты проекта
- addScript() для каждого, общий tick/event broadcast
- снимает WASM OOM (1 VM 16MB вместо 742 × 16MB)
- убран per-script лимит 50, теперь все 742 загружаются
2. Touched events:
- sendGlobalEvent в shared sandbox распознаёт playerTouch
и пересылает в Worker как 'touched' с primId
- Worker находит Part по __primId в workspace и Fire'ит
его Touched сигнал — Lua-обработчики работают
3. Click в иерархии → scroll-to-selected:
- useEffect в HierarchyPanel ловит изменение selection
и scrollIntoView для нужного ItemRow
- data-sel-id атрибут на primitive/model/block строках
4. GUI Roblox в конвертере:
- ScreenGui/Frame/TextLabel/TextButton/ImageLabel/TextBox →
scene.gui c полным набором свойств (UDim2→pixel, Color3→hex,
BackgroundTransparency→bgOpacity, parentId)
5. Чистка:
- удалены debug-console.warn из PlayerController._loadPlayerModel
(убирает spam '[PlayerController.devlog]' в consoles)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
| 412bb2fad9 |
feat(rbxl-import): студия исполняет импортированные Roblox-Lua скрипты
All checks were successful
Сегодня доведены до играбельного состояния:
- UI модалка импорта подключена в KubikonStudio (кнопка для МИНа в навигации)
- Converter: SCALE 0.35 (карта пропорциональна R15-персонажу),
playerModelType='skin_bacon-hair', Lua упакован в поле code с маркером
// @roblox-lua (storys API сохраняет только {id,code,target,name})
- vite.config: api+статика через rublox.pro/minecraftia-school.ru
- GameRuntime: распознаёт маркер, запускает через RobloxLuaSandbox
+ wasmoon Worker. Фильтрация: target!=null + lua<2500б +
лимит 50 sandbox'ов (WASM OOM при >50 VM)
- roblox-shim: nullStub (Proxy с no-op методами) вместо null
для FindFirstChild/WaitForChild — цепочки не падают
- require() заменён на nullStub
- RobloxLuaSandbox: совместимость с интерфейсом ScriptSandbox
(sendGlobalEvent/SceneSnapshot/etc — no-op заглушки)
- RobloxLuaWorker: pcall обёртка над user-кодом
- remoteDevlog.js + /devlog endpoint: автосбор browser-логов
- PlayerController._loadSkinManifest: dev-fallback на studio.rublox.pro
Тест на Easy Obby:
- 8205 instances → 2245 primitives + 742 Lua-scripts
- 50/742 Lua-VM запущены (KillBrick handlers и т.п.),
151 отфильтровано как admin/chat services, 541 пропущено по памяти
- Скин bacon-hair виден, FPS 20-25
- Сцена играется, можно ходить, прыгать
TODO (следующая итерация):
- Single-VM mode для wasmoon (один Lua-state на 742 скрипта,
убрать WASM OOM)
- Реализовать select/focus в иерархии для импортированных карт
- Touched events от Babylon impostor → Lua-shim сигналы
- Поддержка GUI (ScreenGui/Frame/TextLabel) в конвертере
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
|||
|
|
2fda576e11 |
feat(14): Vehicle System V1+V2 — машины, на которых можно ездить
All checks were successful
Система транспорта для Рублокс-студии (задача 14 Недели 4): - VehicleManager — аркадная физика (газ/руль/тормоз/реверс), коллизия через physics.moveAABB; GLB-кузов Kenney car-kit (колёса в модели). - VehicleHud — графический спидометр-стрелка (SVG, 270° дуга) + передача D/R/N. - Вход hold-F / выход E; камера follow/капот/кинематографичная (V циклит). - game.scene.spawn(vehicle:car, opts) + onVehicleEnter/onVehicleExit. - Звук мотора: низкочастотный рокот (бас-пила + шум + LFO-пульсация тактов), pitch/громкость ∝ скорости — не воющий тон. - Авто оседает на землю при спавне (_settle + повторы при поздней готовности физики) — не висит/не тонет. - Водитель скрывается за рулём; падение в бездну → выход + респавн. - Производительность: addShadowCaster фильтрует мелкие/тонкие/огромный пол меши; InstancedMesh без receiveShadows (фикс тормозов 5→50 FPS). - Вики: карточка #61 «Такси-симулятор» + статья + 2 скриншота. - incrementPlay(id, userId) — передаём user_id для self/user-cooldown. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> @ |
||
| 42be04def9 |
feat(week4): модальные сцены, кастомные скины игрока и вики-гайды по 4 играм
Some checks failed
Задача 04 — модальные сцены (затемнение + GUI/3D-анимация + блок ввода): - engine/ModalManager.js (state-машина, fade, spotlight-проекция, HighlightLayer) - editor/ModalOverlay.jsx (CSS-overlay + mask-image для spotlight) - PlayerController.setInputBlocked/setCameraFrozen/captureCameraState/focusOnTarget - game.modal.open/close/update/isOpen/onClose + пресеты bossIntro/lootbox/dialog/confirmation - Фиксы ядра: клик GUI-кнопок (realId↔localId), modalOpened через globalEvent, guard от двойного срабатывания колбэков, кнопка ✓ на последней строке диалога Задача 07 — кастомные скины игрока + магазин: - non-humanoid скины (любая 3D-модель): загрузчик, процедурная анимация, настраиваемый AABB, центрирование через pivot-node - PlayerController.reloadSkin (смена скина в Play) - game.player.setSkin/unlockSkin/getAvailableSkins/onSkinChange/openSkinShop + локальная валюта - editor/SkinShopOverlay.jsx (встроенный магазин, клавиша B) + SkinManagerModal.jsx (вкладка «Скины») - сериализация scene.skins, кнопка «Скины» в тулбаре Вики — категория «Разбор готовых игр»: - docsGames.js: группа g5 + 4 карточки (Двор/Витрина GUI/Сундук/Парк) - docsLessons.jsx: 4 подробные статьи-урока для детей - «Открыть мою копию» создаёт копию проекта (оригинал не трогается) Адаптивная ширина кнопки billboard под длинный текст. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
|||
| 31adbf151b |
Initial public release: Студия Рублокса v1.0
Open-source веб-студия для создания игр Рублокса, двойная лицензия AGPL-3.0 + Коммерческая. Главное: - Vite 5 + React 18 + Babylon 7.54.3 + Monaco Editor + Colyseus 0.16 - Самодостаточный движок ~28к строк (66 файлов): BlockManager, TerrainVoxelBuilder, ModelManager, DecoManager, PlayerController, ScriptSandboxWorker, MultiplayerSync, 30+ GD-гейммодов - Главный редактор KubikonEditor (~37к строк) + панели, ScriptEditor (Monaco) - Витрина игр (KubikonFeed, KubikonStudio, KubikonDocs, KubikonLearn) - Geometry Dash sub-app (GdMenu, GdShop, GdRules, GdCoverArt) - 10 admin-preview каталогов для дизайнеров (скины, музыка, порталы и т.д.) - Конфигурируемый бэкенд через VITE_API_BASE — работает со staging (dev-api.rublox.pro) без настройки - Standalone-режим (VITE_STANDALONE=true) — открыть пустой редактор без бэка - Полная документация (на русском): README, ARCHITECTURE, CONTRIBUTING, SECURITY, CHANGELOG - ESLint + Prettier + EditorConfig - Legal: LICENSE (AGPL-3.0), LICENSE-COMMERCIAL.md, CLA.md, COPYRIGHT.md - Issue templates: bug_report, feature_request, security_disclosure Перед публикацией: - Все импорты из minecraftia заменены на локальные - Все хардкоды URL (minecraftia-school.ru) и внутренних IP убраны → env - Admin-эндпоинты Kubikon3DService вырезаны (остаются в приватном репо) - AdminKubikonModeration не публикуется (модерация — в team.rublox.pro) - 93 МБ ассетов public/kubikon-assets вынесены в .gitignore (раздаются через release artifact) |