diff --git a/commands/profile.js b/commands/profile.js index 8633353..c0470a7 100644 --- a/commands/profile.js +++ b/commands/profile.js @@ -21,8 +21,6 @@ module.exports = async (ctx) => { 💰 Баланс ₽${spacesWithMarkdown(user.money)} - Ð${spacesWithMarkdown(user.dirtymoney)} - 💳: ${user.stealedcards} 🔵 Имущество 🏠 Жилье: ${property.house == 0 ? "Бездомный" : property.house.name} diff --git a/models/character.model.js b/models/character.model.js index 2e68745..e64acbc 100644 --- a/models/character.model.js +++ b/models/character.model.js @@ -21,6 +21,10 @@ const Character = sequelize.define('character', { type: DataTypes.INTEGER, defaultValue: 0 }, + firePoints: { + type: DataTypes.INTEGER, + defaultValue: 0 + }, hp: { type: DataTypes.INTEGER, defaultValue: 100 diff --git a/rpg.js b/rpg.js index cc29b36..765c9a7 100644 --- a/rpg.js +++ b/rpg.js @@ -78,27 +78,125 @@ rpg.action('rpg_profile', async (ctx) => { // Формируем профиль const profile = ` -🎭 Профиль персонажа: +🎭 Профиль персонажа + 👤 Имя: ${character.name || 'Не указано'} 🏆 Уровень: ${character.level} (${character.exp}/${utils.spaces(expToUp[character.level])}) + ❤️ Здоровье: ${character.hp}/${character.max_hp} +🔥 Стамина: ${character.stamina}/${character.max_stamina} + 💪 Сила (F): ${character.force} 🧠 Интеллект (I): ${character.intelligence} 🛡️ Устойчивость (R): ${character.resilience} 🔋 Выносливость (E): ${character.endurance} -🔥 Стамина: ${character.stamina}/${character.max_stamina} -💰 Грязные деньги: ${utils.spaces(character.dirtymoney)} -🃏 Карты: ${stolenCards.length} - `; +➕ Свободные очки F.I.R.E: ${character.firePoints} +💰 Баланс: ${utils.spaces(character.dirtymoney)}Ð +🃏 Украденные карты: ${stolenCards.length} + `; + const buttons = [ + [Markup.button.callback('💳 Карточки', 'view_cards')], + [Markup.button.callback('🎒 Инвентарь', 'inventory')], + ]; + + if (character.firePoints > 1) { + buttons.push([Markup.button.callback('➕ Распределить очки', 'fire_distribute')]); + } +buttons.push([Markup.button.callback('🔙 В меню', 'crime_menu')]); // Отправляем сообщение - ctx.editMessageText(profile.trim(), Markup.inlineKeyboard([ - [Markup.button.callback('💳 Карточки', 'view_cards')], - [Markup.button.callback('🎒 Инвентарь', 'inventory')], - [Markup.button.callback('🔙 В меню', 'crime_menu')], - ])); + ctx.editMessageText(profile.trim(), Markup.inlineKeyboard(buttons)); }); +// Основная команда для вывода кнопок распределения F.I.R.E. +rpg.action('fire_distribute', async (ctx) => { + // Получаем данные пользователя + const character = await CharacterModel.findOne({ where: { telegram_id: ctx.from.id } }); + if (!character) { + return ctx.reply('Вы ещё не создали персонажа!'); + } + + // Проверяем, есть ли свободные очки + if (character.firePoints <= 0) { + return ctx.reply('У вас нет свободных очков для распределения.'); + } + + // Формируем текст сообщения + const message = ` +🔥 Распределение очков F.I.R.E 🔥 + +У вас есть ${character.firePoints} свободных очков. +Выберите характеристику, чтобы увеличить её уровень: + +💪 Сила (F): ${character.force} +🧠 Интеллект (I): ${character.intelligence} +🛡️ Устойчивость (R): ${character.resilience} +🔋 Выносливость (E): ${character.endurance} + `; + + // Создаём кнопки для каждой характеристики + const keyboard = Markup.inlineKeyboard([ + Markup.button.callback('💪', 'increase_force'), + Markup.button.callback('🧠', 'increase_intelligence'), + Markup.button.callback('🎯', 'increase_resilience'), + Markup.button.callback('💖', 'increase_endurance'), + ], { columns: 2 }); + + // Отправляем сообщение с кнопками + await ctx.reply(message, keyboard); +}); + +// Обработчики для нажатий на кнопки +rpg.action(/^increase_(force|intelligence|resilience|endurance)$/, async (ctx) => { + const attribute = ctx.match[1]; // Получаем характеристику из callback_data + const character = await CharacterModel.findOne({ where: { telegram_id: ctx.from.id } }); + if (!character) { + return ctx.answerCbQuery('Персонаж не найден.'); + } + + // Проверяем наличие свободных очков + if (character.firePoints <= 0) { + return ctx.answerCbQuery('У вас недостаточно очков!'); + } + + // Прокачиваем выбранную характеристику + switch (attribute) { + case 'force': + character.force++; + break; + case 'intelligence': + character.intelligence++; + break; + case 'resilience': + character.resilience++; + break; + case 'endurance': + character.endurance++; + break; + } + + // Уменьшаем количество очков и сохраняем изменения + character.firePoints--; + await character.save(); + + // Отправляем обновлённое сообщение + const updatedMessage = ` +🔥 Распределение очков F.I.R.E 🔥 + +У вас есть ${character.firePoints} свободных очков. +Выберите характеристику, чтобы увеличить её уровень: + +💪 Сила (F): ${character.force} +🧠 Интеллект (I): ${character.intelligence} +🛡️ Устойчивость (R): ${character.resilience} +🔋 Выносливость (E): ${character.endurance} + `; + await ctx.editMessageText(updatedMessage, { reply_markup: ctx.update.callback_query.message.reply_markup }); + + ctx.answerCbQuery(`Вы увеличили ${attribute.toUpperCase()}!`); +}); + + const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); // Хранилище для отслеживания пользователей, которые уже прошли ввод @@ -1371,6 +1469,7 @@ async function Exp(ctx, character, experience) { if (character.exp >= expToUp[character.level]) { character.exp -= expToUp[character.level] character.level += 1 + character.firePoints += 1 await character.save() await ctx.sendMessage(`⤴️ Уровень вашего персонажа повысился до ${character.level}!`)} } @@ -1378,7 +1477,7 @@ async function Exp(ctx, character, experience) { // Периодическое выполнение задач function startRecoveryIntervals() { - const interval = 5 * 1000; // Интервал в миллисекундах (например, 1 минута) + const interval = 60000; // 1 мин Интервал в миллисекундах (например, 1 минута) setInterval(recoverHealth, interval); setInterval(recoverStamina, interval); }