From 9f2cca1a49fbcf6fa4721ae454f357faa2e9fd80 Mon Sep 17 00:00:00 2001 From: min Date: Sun, 7 Jun 2026 15:07:42 +0300 Subject: [PATCH] =?UTF-8?q?docs(studio):=20=D0=B2=D0=B8=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=2044=20=E2=80=94=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B0=20#65=20+=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=8C=D1=8F=20=C2=AB=D0=A1=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=20=D0=B8=20=D1=81=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20(=D0=B8=D0=BD=D0=B2=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D1=8C=20drag-drop)=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Карточка g5 #65 guide-inventory (openProjectId 2685) + статья: items.define, inventory.give/take, окно по I (сетка 8×5 + хотбар 9), drag-drop, стаки, редкости, ПКМ-меню, tooltip, сортировка. 2 скрина (scene окно / play сбор). Co-Authored-By: Claude Opus 4.8 --- src/community/docsGames.js | 5 +++ src/community/docsLessons.jsx | 83 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/src/community/docsGames.js b/src/community/docsGames.js index 40a4d65..1923434 100644 --- a/src/community/docsGames.js +++ b/src/community/docsGames.js @@ -368,4 +368,9 @@ export const GAMES = [ 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/docsLessons.jsx b/src/community/docsLessons.jsx index 9aa1c79..a4c85a8 100644 --- a/src/community/docsLessons.jsx +++ b/src/community/docsLessons.jsx @@ -8867,6 +8867,89 @@ game.fx.damageFloater(pos, 120, { comicStyle: true });`} ), }, + 'guide-inventory': { + body: ( + <> +

Что получится

+

+ Полноценный инвентарь как в Minecraft и RPG: сетка 8×5 + + хотбар на 9 слотов, предметы со стаками и + редкостями, перетаскивание мышью, ПКМ-меню, всплывающие + подсказки. Собираешь предметы на поляне — стаки растут, открываешь + инвентарь клавишей I и раскладываешь добычу. +

+ + + +

Шаг 1. Определи предметы

+

+ Каждый предмет описывается один раз: имя, иконка-эмодзи, редкость, + размер стака, эффект использования. +

+ + {`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 (золотой) — это цвет рамки слота. +

+ +

Шаг 2. Выдавай и собирай предметы

+ {`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. +

+ + + +

Шаг 3. Окно инвентаря

+
    +
  • I — открыть/закрыть окно (Esc тоже закрывает);
  • +
  • Перетаскивание мышью — поменять слоты местами или + слить стаки;
  • +
  • ПКМ по слоту — меню: использовать / разделить / выбросить;
  • +
  • Наведение — tooltip (название цветом редкости, описание, цена);
  • +
  • Сорт. — расставить по редкости;
  • +
  • 1-9 — выбрать активный слот хотбара.
  • +
+ + + Всё хранится в движке и сериализуется в проект автоматически — + дописывать сохранение не нужно. Предметы с тегом + 'quest' нельзя выбросить. + + +

Почему это важно

+

+ Инвентарь — несущая конструкция RPG, выживания и симуляторов. + Сетка + хотбар + стаки + редкости — стандарт, который игроки + узнают мгновенно. Сочетается с крафтом, квестами и магазином. +

+ + + Добавь предмет 'apple' с + onUseEffect:'heal:15', положи в хотбар и нажми ПКМ → + «Использовать» — HP восстановится, яблоко убавится на 1. + + + ), + }, + }; /** Есть ли готовый текст урока для игры с таким id. */