Update rpg.js
This commit is contained in:
parent
d78a11bce2
commit
74012d2fbc
64
rpg.js
64
rpg.js
@ -1873,7 +1873,7 @@ async function Exp(ctx, character, experience) {
|
||||
|
||||
// Периодическое выполнение задач
|
||||
function startRecoveryIntervals() {
|
||||
const interval = 1000; // 1 мин Интервал в миллисекундах (например, 1 минута)
|
||||
const interval = 60000; // 1 мин Интервал в миллисекундах (например, 1 минута)
|
||||
setInterval(recoverHealth, interval);
|
||||
setInterval(recoverStamina, interval);
|
||||
}
|
||||
@ -2223,7 +2223,7 @@ const enemyTurn = async (ctx, character, battle) => {
|
||||
await character.save();
|
||||
await battle.save({ fields: ["logs", "status"] });
|
||||
logs(ctx, "Поражение персонажа", { enemy, battle });
|
||||
return;
|
||||
return await ctx.editMessageText( `⚔️ Вы проиграли!\n\n` + `💔 Противник нанес ${character.name} ${damage} урона!\n\n` + `📜 Логи битвы:\n${logMessage || "Пока ничего не произошло."}`);
|
||||
}
|
||||
|
||||
await character.save();
|
||||
@ -2322,6 +2322,7 @@ rpg.action(/hit_\d+/, async (ctx) => {
|
||||
if (battle.enemy_hp <= 0) {
|
||||
battle.status = "completed";
|
||||
await battle.save();
|
||||
let items = "";
|
||||
logs(ctx, "Победа персонажа", { enemy, battle });
|
||||
Exp(ctx, character, enemy.level * 5)
|
||||
character.enemiesKilled += 1;
|
||||
@ -2345,8 +2346,11 @@ rpg.action(/hit_\d+/, async (ctx) => {
|
||||
img: item.img
|
||||
});
|
||||
}
|
||||
items = droppedItems.map((item) => item.name).join(", ");
|
||||
}
|
||||
return ctx.editMessageText(`🎉 ${character.name} победил ${enemy.name}!`);
|
||||
return ctx.editMessageText(
|
||||
`🎉 ${character.name} победил ${enemy.name}!\n\n📜 Логи битвы:\n${battle.logs.slice(-5).map((log) => `• ${log}`).join("\n")}\n🧩 Выпавшие предметы: ${items}`
|
||||
);
|
||||
}
|
||||
|
||||
await battle.save();
|
||||
@ -2371,36 +2375,34 @@ rpg.action(/hit_\d+/, async (ctx) => {
|
||||
function generateBattleButtons(character, battle) {
|
||||
let ctx = { from: { id: character.telegram_id } };
|
||||
const totalButtons = 10;
|
||||
const intelligenceFactor = Math.min(character.intelligence || 1, totalButtons - 2); // Уменьшаем на 2 для кнопки критического удара и гарантированного промаха
|
||||
const intelligenceFactor = Math.min(character.intelligence || 1, 100); // Ограничиваем интеллект значением 100 (или любым другим максимальным значением)
|
||||
const attackChance = (intelligenceFactor / 100); // Вероятность появления кнопки атаки
|
||||
const missChance = 1 - attackChance; // Вероятность промаха
|
||||
|
||||
const buttons = [];
|
||||
|
||||
// Генерация кнопок с уроном от атаки
|
||||
for (let i = 0; i < intelligenceFactor; i++) {
|
||||
// Обязательно добавляем одну кнопку с критическим ударом
|
||||
buttons.push({
|
||||
text: `🎯`,
|
||||
callback_data: `hit_${battle.id}`,
|
||||
});
|
||||
}
|
||||
|
||||
// Генерация кнопки с критическим уроном
|
||||
buttons.push({
|
||||
text: `🎯`,
|
||||
text: `🔥`, // Символ для критического удара
|
||||
callback_data: `critical_${battle.id}`,
|
||||
});
|
||||
|
||||
// Гарантированная кнопка промаха
|
||||
buttons.push({
|
||||
text: "🎯",
|
||||
callback_data: `miss_${battle.id}`,
|
||||
});
|
||||
|
||||
// Заполнение оставшихся кнопок (если не хватает до totalButtons)
|
||||
// Генерация оставшихся кнопок для битвы
|
||||
while (buttons.length < totalButtons) {
|
||||
if (Math.random() < attackChance) {
|
||||
// Кнопка атаки (с шансом, определяемым интеллектом)
|
||||
buttons.push({
|
||||
text: "🎯",
|
||||
text: `🎯`, // Символ для атаки
|
||||
callback_data: `hit_${battle.id}`,
|
||||
});
|
||||
} else if (Math.random() < missChance) {
|
||||
// Кнопка промаха (с шансом появления промаха)
|
||||
buttons.push({
|
||||
text: "❌", // Символ для промаха
|
||||
callback_data: `miss_${battle.id}`,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Перетасовывание кнопок
|
||||
const shuffledButtons = buttons.sort(() => Math.random() - 0.5);
|
||||
@ -2410,10 +2412,12 @@ function generateBattleButtons(character, battle) {
|
||||
for (let i = 0; i < shuffledButtons.length; i += 5) {
|
||||
rows.push(shuffledButtons.slice(i, i + 5));
|
||||
}
|
||||
|
||||
logs(ctx, "Генерация кнопок для битвы", { battle, keyboard: rows });
|
||||
return rows;
|
||||
}
|
||||
|
||||
|
||||
// Функция выпадения предмета с врага или локации с учетом аксессуаров и управляемого шанса
|
||||
async function dropItem(character, enemyId, locationId) {
|
||||
let items = [];
|
||||
@ -2473,8 +2477,14 @@ async function dropItem(character, enemyId, locationId) {
|
||||
}
|
||||
}
|
||||
|
||||
// Теперь среди выпавших рандомом выбираем треть предметов (минимум 1)
|
||||
const itemsToDrop = Math.max(1, Math.floor(droppedItems.length / 3));
|
||||
droppedItems = droppedItems.sort(() => Math.random() - 0.5).slice(0, itemsToDrop);
|
||||
console.log(`${droppedItems.length} предметов выпало`);
|
||||
|
||||
// Если предметы выпали, возвращаем их, иначе null
|
||||
if (droppedItems.length > 0) {
|
||||
// Отправляем сообщение игроку о найденных предметах
|
||||
return droppedItems; // Вернем массив выпавших предметов
|
||||
} else {
|
||||
return null; // Если ничего не выпало
|
||||
@ -2583,12 +2593,13 @@ rpg.action(/critical_\d+/, async (ctx) => {
|
||||
if (battle.enemy_hp <= 0) {
|
||||
battle.status = "completed";
|
||||
await battle.save();
|
||||
let items = '';
|
||||
Exp(ctx, character, enemy.level * 6)
|
||||
character.enemiesKilled += 1;
|
||||
await character.save();
|
||||
let droppedItems = await dropItem(character, enemy.id);
|
||||
logs(ctx, "Предметы с врага", { droppedItems });
|
||||
if (droppedItems) {
|
||||
if (droppedItems.length > 0) {
|
||||
for (const item of droppedItems) {
|
||||
await InventoryModel.create({
|
||||
telegram_id: character.telegram_id,
|
||||
@ -2605,9 +2616,11 @@ rpg.action(/critical_\d+/, async (ctx) => {
|
||||
img: item.img
|
||||
});
|
||||
}
|
||||
items = droppedItems.map((item) => item.name).join(", ");
|
||||
}
|
||||
|
||||
return ctx.editMessageText(
|
||||
`🎉 ${character.name} победил ${enemy.name}!\n\n📜 Логи битвы:\n${battle.logs.slice(-5).map((log) => `• ${log}`).join("\n")}`
|
||||
`🎉 ${character.name} победил ${enemy.name}!\n\n📜 Логи битвы:\n${battle.logs.slice(-5).map((log) => `• ${log}`).join("\n")}\n🧩 Выпавшие предметы: ${items}`
|
||||
);
|
||||
}
|
||||
|
||||
@ -2652,8 +2665,9 @@ rpg.action(/miss_\d+/, async (ctx) => {
|
||||
// Логи
|
||||
battle.logs = battle.logs || [];
|
||||
battle.logs.push(`${character.name} промахнулся.`);
|
||||
await enemyTurn(ctx, character, battle);
|
||||
await battle.save({ fields: ["enemy_hp", "logs"] });
|
||||
await enemyTurn(ctx, character, battle);
|
||||
|
||||
|
||||
// Генерация новых кнопок
|
||||
const buttons = generateBattleButtons(character, battle);
|
||||
|
Loading…
Reference in New Issue
Block a user