From ba90bf5c7d9b8c11742371094cbc2a96c4c6c58c Mon Sep 17 00:00:00 2001 From: min Date: Sat, 6 Jun 2026 10:11:18 +0300 Subject: [PATCH] =?UTF-8?q?feat(studio):=20=D0=BA=D0=B8=D1=82=20=C2=AB?= =?UTF-8?q?=D0=A2=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D0=B0=20=D0=BB=D0=B8=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D0=B2=C2=BB=20=D0=B2=20Toolbox=20=E2=86=92?= =?UTF-8?q?=20=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=85=D0=B0=D0=BD=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Новый кит (категория ui): определяет лидерборд (Очки primary + Время), время идёт само, очки растут от broadcast('score'|'coins'). Сохраняется в БД. Работает вместе со счётчиком монет/очков. Всего 47 китов. Co-Authored-By: Claude Opus 4.8 --- src/editor/engine/GameplayKits.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/editor/engine/GameplayKits.js b/src/editor/engine/GameplayKits.js index b120af7..b79e8aa 100644 --- a/src/editor/engine/GameplayKits.js +++ b/src/editor/engine/GameplayKits.js @@ -552,6 +552,22 @@ let score = 0; function show(){ game.ui.set('score', '⭐ ' + score, { x:8, y:6, anchor:'top', color:'#ffd23a', size:22 }); } show(); game.onMessage('score', (m) => { score += (m && m.add) ? m.add : 1; show(); });` }], + }, + { + id: 'leaderboard', + name: 'Таблица лидеров', + desc: 'Лидерборд справа-сверху (Очки/Время). Растёт от монет и очков других механик. Сохраняется в БД между сессиями. (Задача 20)', + icon: 'trophy', category: 'ui', + scripts: [{ attachTo: 'global', code: +`// Таблица лидеров: столбцы «Очки» (primary) и «Время». +game.leaderstats.define('Очки', { initial: 0, format: 'number', icon: '⭐', color: '#ffd23a', primary: true }); +game.leaderstats.define('Время', { initial: 0, format: 'time', icon: '⏱', color: '#7fd0ff' }); +// Время идёт само. +game.every(1, () => game.leaderstats.me.add('Время', 1)); +// Любая механика, шлющая broadcast('score',{add}) или ('coins',{add}), +// автоматически добавляет очки в таблицу. +game.onMessage('score', (m) => game.leaderstats.me.add('Очки', (m && m.add) ? m.add : 1)); +game.onMessage('coins', (m) => game.leaderstats.me.add('Очки', (m && m.add) ? m.add : 1));` }], }, { id: 'hp-bar',