diff --git a/README.md b/README.md
index cffa6b9..1591aa7 100644
--- a/README.md
+++ b/README.md
@@ -168,3 +168,4 @@ git push origin feature/моя-фича
- Issues и PR: https://git.rublox.pro/rublox/studio
- Безопасность: [SECURITY.md](./SECURITY.md)
+
diff --git a/src/community/docsGames.js b/src/community/docsGames.js
index 1f69526..1923434 100644
--- a/src/community/docsGames.js
+++ b/src/community/docsGames.js
@@ -353,4 +353,24 @@ export const GAMES = [
desc: 'Полноценные машины: подходишь, держишь F — садишься за руль, WASD рулят, камера следует за авто, спидометр снизу. E — выйти. Готовые 3D-модели машин.',
mechanics: ['game.scene.spawn(\'vehicle:car\')', 'аркадная физика (газ/руль/тормоз)', 'hold-F вход / E выход', 'камера за машиной (V меняет)', 'HUD водителя (спидометр+передача)', 'onVehicleEnter/onVehicleExit'],
previewShot: 'guide-taxisim-scene.png', openProjectId: 2436, ready: true },
+ { id: 'guide-skybox', num: 62, group: 'g5', stars: 2, icon: 'cloud',
+ title: 'Небесная демка — кастомное небо',
+ desc: 'Одной строкой меняешь небо: голубой день, закат, звёздная ночь, космос. Облака, туман, далёкие горы и плавные переходы между пресетами.',
+ mechanics: ['game.scene.setSkybox({ preset })', 'game.scene.setClouds / setFog', 'skybox.fadeTo(opts, сек) — плавный переход', '6 пресетов: день/lowpoly/закат/ночь/космос', 'небо = единый источник света сцены', 'облака-дрейф + дымка горизонта'],
+ previewShot: 'guide-skybox-scene.png', openProjectId: 2541, ready: true },
+ { id: 'guide-leaderstats', num: 63, group: 'g5', stars: 2, icon: 'trophy',
+ title: 'Сбор монет — лидерборды и достижения',
+ desc: 'Таблица лидеров справа-сверху (монеты/время/уровень) + всплывающие достижения с редкостью и звуком. Прогресс сохраняется в БД между сессиями.',
+ mechanics: ['game.leaderstats.define / me.add', 'HUD-таблица топ-10 (сортировка по primary)', 'game.achievements.define / unlock', 'bindToStat — авто-награда по статy', 'toast 4 редкости + очередь', 'кубок → страница достижений', 'сохранение в БД (savegame)'],
+ previewShot: 'guide-leaderstats-scene.png', openProjectId: 2616, ready: true },
+ { id: 'guide-floaters', num: 64, group: 'g5', stars: 2, icon: 'sparkles',
+ title: 'Зомби-арена — бластер и цифры урона',
+ desc: 'Шутер: волны зомби бегут к игроку, бластер их отстреливает, над целью всплывают облачка урона. Авто-floater над любым мобом одной строкой + ручной game.fx.damageFloater (крит/хил/мана/промах/стек/комикс).',
+ mechanics: ['game.fx.damageFloater(pos, value, opts)', 'game.fx.autoMobFloaters(true) — облачко над NPC при уроне', 'game.player.giveTool(\'blaster-...\') — бластер', 'бластер от 3-го лица — в точку клика', 'spawnNpc + follow(\'player\') — зомби-волны', 'isCrit/isHeal/isMana/isMiss, стек ×N, комикс', 'object pool 30 планов (без лагов)'],
+ previewShot: 'guide-floaters-scene.png', openProjectId: 2676, ready: true },
+ { id: 'guide-inventory', num: 65, group: 'g5', stars: 2, icon: 'box',
+ title: 'Сбор и сортировка — инвентарь с drag-drop',
+ desc: 'Полный инвентарь как в Minecraft/RPG: сетка 8×5 + хотбар 9, стаки, 5 редкостей (цвет рамки), перетаскивание мышью, ПКМ-меню, tooltip, сортировка. Собираешь предметы — стаки растут.',
+ mechanics: ['game.items.define([...]) — предметы (редкость/стак/иконка)', 'game.inventory.give / take', 'окно по I — сетка 8×5 + хотбар 9 (1-9)', 'drag-drop между слотами (swap + merge)', 'стаки с maxStack, 5 редкостей', 'ПКМ-меню: использовать / разделить / выбросить', 'tooltip + сортировка по редкости'],
+ previewShot: 'guide-inventory-scene.png', openProjectId: 2685, ready: true },
];
diff --git a/src/community/docsIcons.jsx b/src/community/docsIcons.jsx
index d32a1b9..5de69c8 100644
--- a/src/community/docsIcons.jsx
+++ b/src/community/docsIcons.jsx
@@ -319,6 +319,11 @@ const ICONS = {
+ Красивое небо в одну строку. Вместо плоского цветного фона — + градиентный купол с солнцем, плывущими облаками, дымкой у горизонта + и далёкими горами (low-poly стиль, как в топовых Roblox-играх). Небо + меняется кнопками: день, закат, звёздная ночь, + космос — с плавным переходом за пару секунд. И главное: небо — + это единый источник света: меняешь пресет → вместе с небом + меняется и освещение всей сцены (на закате теплеет, ночью темнеет). +
+ +
+ Самое простое — выбрать пресет. Доступны:
+ clear-summer-day, lowpoly-roblox,
+ cloudy, sunset, starry-night,
+ space.
+
{`// Голубое low-poly небо с облаками, дымкой и горами (как на скрине):
+game.scene.setSkybox({ preset: 'lowpoly-roblox' });
+game.scene.setClouds({ enabled: true, cover: 0.45, speed: 0.014 });
+game.scene.setFog({ color: '#e2eef7', density: 0.005 });`}
+
+ skybox.fadeTo переводит небо к новому пресету за указанное
+ число секунд — цвета купола, солнце, облака, туман и свет сцены
+ меняются плавно. Удобно вешать на кнопки или события.
+
{`game.gui.onClick('btn-sunset', () => game.scene.skybox.fadeTo({ preset: 'sunset' }, 2));
+game.gui.onClick('btn-night', () => game.scene.skybox.fadeTo({ preset: 'starry-night' }, 2));
+game.gui.onClick('btn-space', () => game.scene.skybox.fadeTo({ preset: 'space' }, 2));`}
+
+ + Можно не брать пресет, а задать цвета купола вручную — верх, низ, + горизонт и солнце. +
+{`game.scene.setSkybox({
+ mode: 'gradient',
+ topColor: '#3d7fe0', // зенит
+ bottomColor: '#dcebf7', // у земли
+ horizonColor: '#bcd9f2', // линия горизонта
+ sunDirection: { x: 0.3, y: 0.85, z: 0.4 },
+ sunColor: '#fff6d8',
+ sunSize: 0.035,
+});`}
+
+ + Небо — половина визуального впечатления от мира. С плоским фоном все + игры выглядят одинаково и дёшево; с кастомным небом — атмосферно и + «дорого». А связка неба с освещением даёт бесплатный приём: смена + времени суток одной строкой мгновенно меняет настроение всей сцены. +
+ +fadeTo между 'clear-summer-day' и
+ 'starry-night'. Добавь облака погуще на день и убери на ночь.
+ + Игра «собери монеты» с двумя системами удержания, как в Roblox: + таблица лидеров справа-сверху (монеты, время, уровень) и + достижения — всплывающие награды с редкостью, звуком и + страницей-витриной. Прогресс сохраняется в базе — закрыл + игру, вернулся завтра, а монеты и открытые ачивки на месте. +
+ +
+ Объяви столбцы. Первый primary: true — по нему сортируются
+ игроки в топе. Дальше меняй значения через me.add / me.set.
+
{`game.leaderstats.define('Монеты', { initial: 0, format: 'number', icon: '🪙', color: '#ffd23a', primary: true });
+game.leaderstats.define('Время', { initial: 0, format: 'time', icon: '⏱', color: '#7fd0ff' });
+game.leaderstats.define('Уровень', { initial: 1, format: 'number', icon: '⭐', color: '#b48bff' });
+
+// Время идёт само, монеты — за подбор
+game.every(1, () => game.leaderstats.me.add('Время', 1));
+game.leaderstats.me.add('Монеты', 1);`}
+
+
+ Объяви список достижений с редкостью (common / rare / epic /
+ legendary — разный цвет плашки и звук). Выдавай явно через
+ unlock или автоматически через bindToStat.
+
{`game.achievements.define([
+ { id:'first_coin', name:'Первая монета', description:'Подобрать монету', icon:'🪙', rarity:'common', points:5 },
+ { id:'fifty_coins', name:'Полная сумка', description:'Собрать 50 монет', icon:'💰', rarity:'rare', points:25 },
+]);
+
+// Авто-награда: как только Монеты >= 50 — плашка «Полная сумка» сама выедет
+game.achievements.bindToStat('fifty_coins', 'Монеты', { gte: 50 });
+
+// Явная выдача (на первой монете)
+game.achievements.unlock('first_coin');`}
+
+ + Кубок слева-снизу открывает страницу «Мои достижения»: + открытые — цветные с рамкой по редкости, закрытые — серые с + замком, скрытые — «?», сверху прогресс-бар «N из M (очки)». +
+ ++ Лидерборды и достижения — главный механизм удержания: ребёнок + возвращается в игру за новым рекордом и новой ачивкой. Это основа + симуляторов, ферм и PvP — в Roblox столбец «Coins / Wins / Level» + есть почти в каждой игре. +
+ +'speedrun', которое
+ выдаётся через bindToStat('Время', {'{'} lte: 30 {'}'}),
+ если собрать все монеты быстрее 30 секунд.
+ + Мини-шутер: волны зомби бегут к игроку, ты отстреливаешь + их из бластера, а над каждой целью всплывает облачко + урона — как в Roblox-RPG (Pet Sim, Anime Adventures). Зомби + гибнут, счётчик растёт, волны усиливаются. +
+ ++ Две строки превращают игру в шутер с фидбеком урона: выдаём + бластер и включаем авто-floater — теперь любой урон + по NPC сам рисует «-N» над целью, вручную вызывать ничего не надо. +
+{`game.player.giveTool('blaster-blaster-a', { equip: true }); // бластер в руки
+game.fx.autoMobFloaters(true); // облачко урона над любым мобом при попадании`}
+
+ {`function spawnWave(n){
+ const pl = game.player.position;
+ for (let i = 0; i < n; i++){
+ const a = (i / n) * Math.PI * 2;
+ const e = game.scene.spawnNpc('skin_retro-zombie', {
+ x: pl.x + Math.cos(a)*18, z: pl.z + Math.sin(a)*18,
+ name: 'Зомби', hp: 100, speed: 2.6,
+ });
+ if (e && e.follow) e.follow('player'); // зомби преследует игрока
+ }
+}
+game.after(1.5, () => spawnWave(5));
+game.every(14, () => spawnWave(8));`}
+
+ Стрелять из бластера — ЛКМ. В режиме от 3-го лица пуля летит
+ туда, куда кликнул курсором. Попал по зомби → облачко
+ урона (благодаря autoMobFloaters), убил → засчитан.
+
Когда нужен полный контроль — рисуй цифру сам:
+{`game.fx.damageFloater(pos, 25); // красный — обычный урон
+game.fx.damageFloater(pos, 80, { isCrit: true }); // жёлтый, больше + подскок
+game.fx.damageFloater(pos, 30, { isHeal: true }); // зелёный — лечение (+30)
+game.fx.damageFloater(pos, 50, { isMana: true }); // синий — мана
+game.fx.damageFloater(pos, 'Промах', { isMiss: true }); // серый текст`}
+
+ position — {'{x,y,z}'}, ссылка на объект или
+ 'player'; value — число или строка.
+
{`// общий stackKey → удары сливаются в «-25 ×N» вместо кучи цифр
+game.fx.damageFloater(enemy.position, 25, { stackKey: 'aoe_' + enemy.id });
+// comicStyle → BAM! (>50), KAPOW! (>100), POW! (крит) на жёлтой звезде
+game.fx.damageFloater(pos, 120, { comicStyle: true });`}
+
+
+ Без облачек урона стрельба ощущается «впустую». Это базовый
+ боевой фидбек: игрок видит, сколько нанёс, был ли крит, попал ли.
+ Связка бластер + autoMobFloaters + волны NPC — готовый
+ каркас любого шутера/выживания.
+
damageFloater(pos, 15, {'{'} color:
+ '#ff7a2a' {'}'}) каждые 0.5 сек 3 раза — эффект горения.
+ Или увеличь HP зомби и добавь крит каждый 5-й выстрел.
+ + Полноценный инвентарь как в Minecraft и RPG: сетка 8×5 + + хотбар на 9 слотов, предметы со стаками и + редкостями, перетаскивание мышью, ПКМ-меню, всплывающие + подсказки. Собираешь предметы на поляне — стаки растут, открываешь + инвентарь клавишей I и раскладываешь добычу. +
+ ++ Каждый предмет описывается один раз: имя, иконка-эмодзи, редкость, + размер стака, эффект использования. +
+{`game.items.define([
+ { id:'berry', name:'Ягоды', emoji:'🍓', rarity:'common', maxStack:16, value:2 },
+ { id:'iron', name:'Руда', emoji:'⛏️', rarity:'uncommon', maxStack:16, value:8 },
+ { id:'potion', name:'Зелье', emoji:'🧪', rarity:'rare', maxStack:8, onUseEffect:'heal:50' },
+ { id:'sword', name:'Меч', emoji:'⚔️', rarity:'legendary', maxStack:1, value:500 },
+]);`}
+
+ Редкости: common (серый), uncommon
+ (зелёный), rare (голубой), epic
+ (фиолетовый), legendary (золотой) — это цвет рамки слота.
+
{`game.inventory.give('sword', 1); // в стартовый набор
+game.inventory.give('berry', 5); // стак до maxStack, дальше — новый слот
+
+// сбор предмета с земли (на объекте-ягоде):
+game.self.onInteract(() => {
+ game.inventory.give('berry', 2);
+ game.self.delete(); // убрать собранный предмет
+}, { text:'Собрать', key:'e', distance:3 });`}
+
+ Собранное попадает сначала в хотбар (виден внизу экрана),
+ одинаковые предметы складываются в стак с учётом maxStack.
+
'quest' нельзя выбросить.
+ + Инвентарь — несущая конструкция RPG, выживания и симуляторов. + Сетка + хотбар + стаки + редкости — стандарт, который игроки + узнают мгновенно. Сочетается с крафтом, квестами и магазином. +
+ +'apple' с
+ onUseEffect:'heal:15', положи в хотбар и нажми ПКМ →
+ «Использовать» — HP восстановится, яблоко убавится на 1.
+