Ниже — пошаговая инструкция как это реализовать в BotMother (общий подход, который можно адаптировать под конкретные блоки/действия вашей панели). Основная идея — хранить для каждого пользователя набор переменных (баланс, инвентарь, время последнего «Добыть», звёзды) и управлять логикой через условия/действия.
1) Переменные (user‑переменные, хранятся индивидуально)
- user.balance (число) — деньги в $
- user.stars (число) — количество ⭐️ (если есть)
- user.last_mine (timestamp, число) — время последнего «Добыть» в секундах/миллисекундах
- user.inv_stone, user.inv_copper, user.inv_iron, user.inv_gold, user.inv_emerald, user.inv_ruby, user.inv_diamond, user.inv_antimatter (числа) — количество добытых руд
При первом заходе (в блоке Start) проверяйте, инициализированы ли переменные; если нет — задайте им значения 0:
- если user.balance == null → set user.balance = 0, user.stars = 0, все user.inv_* = 0, user.last_mine = 0.
2) Кнопка «Добыть» — логика с таймером и возможностью снять за 1⭐️
А. При нажатии «Добыть»:
- Получите текущее время now = current_timestamp() (в секундах или мс — используйте один формат).
- Если user.last_mine == 0 или now - user.last_mine >= 30 (секунд) → разрешаем копать:
- Вызвать генерацию руды (описано ниже).
- После выдачи руды: user.last_mine = now.
- Ответить пользователю: «Вы добыли: X (название руды). У вас в инвентаре: ...»
- Иначе (если прошло меньше 30 с):
- remaining = 30 - (now - user.last_mine) (целое число секунд).
- Показать сообщение: «Подождите remaining сек. Или снимите таймер за 1 ⭐️» и две кнопки: «Ждать» (возврат в меню) и «Снять за 1⭐️».
- Кнопка «Снять за 1⭐️»:
- Проверить user.stars >= 1: если нет → показать «Нет звёзд».
- Если да → user.stars -= 1; выполнить ту же процедуру, как при разрешённом «копать» (генерация руды) и обновить user.last_mine = now.
Примечание: в BotMother часто нет возможности «деактивировать» кнопку визуально — вы просто обрабатываете нажатие и показываете сообщение об ожидании. Если нужен визуальный эффект — можно динамически подменять клавиатуру (выдать другую клавиатуру без кнопки «Добыть»), но проще — проверять время на серверной логике.
3) Как генерировать руду (рандом + веса)
- Сделайте случайное число R = rand(1,1000) (или 1–100).
- Настройте диапазоны (пример на сумме 1000):
- Камень — 300 (1–300) — стоимость 10$
- Медь — 250 (301–550) — 25$
- Железо — 200 (551–750) — 40$
- Золото — 120 (751–870) — 70$
- Изумруд — 60 (871–930) — 105$
- Рубин — 40 (931–970) — 250$
- Алмаз — 20 (971–990) — 500$
- Антиматерия — 10 (991–1000) — 1000$
- По результату увеличьте соответствующий user.inv_<ore> на 1 (или на случайное количество, если хотите).
- Сообщение пользователю: «Вы получили: <название>. В инвентаре: Камень xN, Медь xM...».
4) Кнопка «Продать» — простая механика «Продать всё» и/или выбор по видам
Вариант A — «Продать всё»:
- Для каждой руды получить количество cnt = user.inv_<ore>.
- Считать стоимость total += cnt * price(<ore>).
- Установить user.inv_<ore> = 0 для всех видов.
- user.balance += total.
- Ответ: «Вы продали: Камень xN, Медь xM ... На сумму total $. Баланс — user.balance $».
Вариант B — «Продать конкретно»:
- Показать клавиатуру с кнопками для каждого типа руды (и «Продать всё»).
- При нажатии конкретного типа:
- Проверить cnt = user.inv_<ore> > 0, если 0 → «У вас нет такой руды».
- Иначе спросить: «Сколько продать?» или сделать «Продать всё [ore]».
- При продаже decrease user.inv_<ore> на проданное количество и add to user.balance.
5) Кнопка «Баланс»
- Выводите сообщение: «Баланс — {{user.balance}} $»
- Можно также показывать «Инвентарь: Камень xN, Медь xM ...» и внизу «Звёзды: {{user.stars}}».
6) Примеры действий в BotMother (порядок блоков/условий)
- Блок Start: инициализация переменных; показать клавиатуру с 6 кнопками.
- Блок «Добыть»:
- Вход → действие: вычислить now; условие: now - user.last_mine >= 30 ? → если да → генерация руды → обновить last_mine → ответ → кнопки назад.
- Если нет → вычислить remaining → показать сообщение с кнопками «Ждать» и «Снять за 1⭐️».
- Блок «Снять за 1⭐️»: проверить звезды, списать, выполнить генерацию руды.
- Блок «Продать»: меню (Продать всё / Продать по типу) → соответствующая логика.
- Блок «Баланс»: вывести user.balance и инвентарь.
7) Примеры выражений / вычислений
- remaining = 30 - (now - user.last_mine)
- user.balance = user.balance + total_price
- user.inv_iron = user.inv_iron + 1
Если в BotMother нет функций для арифметики/рандома/времени — можно:
- Для рандома: использовать встроенное действие Random (если есть) или внешний webhook, который вернёт JSON с выпадением.
- Для времени: использовать timestamp из системной переменной или вебхук.
8) Валидация и UX
- На экраны «Добыть»/«Продать» выводите краткую инфу: баланс, инвентарь, когда следующий «коп».
- Логику «снять таймер за 1⭐️» делайте явной — покажите что произойдёт, сколько останется звёзд.
- Считайте, что пользователь может ломать поток — проверяйте количество руды/звёзд перед изменениями.
9) Пример псевдокода (алгоритм блока «Добыть»)
1. now = current_timestamp()
2. if (user.last_mine == null) user.last_mine = 0
3. if (now - user.last_mine >= 30) {
R = rand(1,1000)
if R <= 300: ore = stone; price = 10; user.inv_stone += 1
else if R <= 550: ore = copper; price = 25; user.inv_copper += 1
... и т.д.
user.last_mine = now
send("Вы добыли: {ore}. В инвентаре: ...")
} else {
remaining = 30 - (now - user.last_mine)
send("Подождите {remaining} сек. Снять за 1⭐️?")
}
10) Хранение и резервное копирование
- Пользовательские переменные BotMother обычно сохраняются в облаке и привязаны к id пользователя. Если хотите бэкап — отправляйте данные на ваш сервер через webhook при изменениях.
Если нужно — могу:
- Прислать готовую схему блоков для BotMother (шаги в их редакторе) с точными названиями действий/условий, которые у вас есть в панели.
- Подготовить пример webhook-кода (Node.js / PHP) для рандома и хранения, если внутреннего функционала BotMother не хватает.
Напишите, какой функционал BotMother у вас доступен (есть ли Random, арифметические действия, системные переменные времени, вебхуки), и я адаптирую инструкцию под конкретные кнопки/действия в вашем редакторе.