diff --git a/src/community/docsGames.js b/src/community/docsGames.js index 06d58db..b7a30fd 100644 --- a/src/community/docsGames.js +++ b/src/community/docsGames.js @@ -358,4 +358,9 @@ export const GAMES = [ 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 }, ]; diff --git a/src/community/docsLessons.jsx b/src/community/docsLessons.jsx index 8562c3b..d2fba82 100644 --- a/src/community/docsLessons.jsx +++ b/src/community/docsLessons.jsx @@ -8691,6 +8691,94 @@ game.gui.onClick('btn-space', () => game.scene.skybox.fadeTo({ preset: 'space' ), }, + 'guide-leaderstats': { + body: ( + <> +
+ Игра «собери монеты» с двумя системами удержания, как в 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');`}
+
+ + Лидерборды и достижения — главный механизм удержания: ребёнок + возвращается в игру за новым рекордом и новой ачивкой. Это основа + симуляторов, ферм и PvP — в Roblox столбец «Coins / Wins / Level» + есть почти в каждой игре. +
+ +'speedrun', которое
+ выдаётся через bindToStat('Время', {'{'} lte: 30 {'}'}),
+ если собрать все монеты быстрее 30 секунд.
+