v5.4
FIRE System distribute points mechanic
This commit is contained in:
parent
7e6980207f
commit
471fe54715
@ -21,8 +21,6 @@ module.exports = async (ctx) => {
|
||||
|
||||
💰 Баланс
|
||||
₽${spacesWithMarkdown(user.money)}
|
||||
Ð${spacesWithMarkdown(user.dirtymoney)}
|
||||
💳: ${user.stealedcards}
|
||||
|
||||
🔵 Имущество
|
||||
🏠 Жилье: ${property.house == 0 ? "Бездомный" : property.house.name}
|
||||
|
@ -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
|
||||
|
121
rpg.js
121
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user