v5.9.8
Prepare to Battle Update
This commit is contained in:
parent
cea900ce46
commit
ec61cb2c60
5521
json/logs.json
5521
json/logs.json
File diff suppressed because it is too large
Load Diff
@ -229,6 +229,11 @@
|
||||
default: return 'Ресурс';
|
||||
}
|
||||
}
|
||||
|
||||
// Подписываемся на обновления данных
|
||||
tg.subscribeToData((data) => {
|
||||
console.log("Обновление данных:", data);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
61
rpg.js
61
rpg.js
@ -11,6 +11,7 @@ const utils = require('./utils');
|
||||
const handlers = require('./handlers');
|
||||
const { keyboard } = require('telegraf/markup');
|
||||
const { parse } = require('error-stack-parser');
|
||||
const { get } = require('http');
|
||||
const {
|
||||
phones,
|
||||
expToUp,
|
||||
@ -1091,7 +1092,6 @@ rpg.action(/view_item_(\d+)/, async (ctx) => {
|
||||
try {
|
||||
// Формируем путь к картинке
|
||||
let imagePath = path.join(__dirname, 'media/items', item.text_id + '.png'); // Путь к картинке
|
||||
console.log(imagePath);
|
||||
|
||||
// Проверяем существует ли файл
|
||||
if (!fs.existsSync(imagePath)) {
|
||||
@ -1140,7 +1140,7 @@ rpg.action(/use_item_(\d+)/, async (ctx) => {
|
||||
});
|
||||
|
||||
if (equippedItems.length > 0) {
|
||||
return ctx.answerCbQuery(`🚫 Вы не можете использовать ${item.name}, пока надеты другие предметы того же типа.`);
|
||||
return ctx.answerCbQuery(`🚫 Вы не можете использовать ${item.name}, пока надеты другие предметы того же типа.`, { show_alert: true } );
|
||||
}
|
||||
|
||||
// Применяем эффекты предмета
|
||||
@ -1267,7 +1267,6 @@ rpg.action(/buy_item_(\d+)/, async (ctx) => {
|
||||
rpg.command('giveitem', async (ctx) => {
|
||||
if (ctx.from.id != 275416286) return ctx.reply('Команда недоступна.')
|
||||
const itemId = parseInt(ctx.message.text.split(' ')[1], 10);
|
||||
console.log(itemId)
|
||||
let user = await UserModel.findByPk(ctx.from.id)
|
||||
let character = await CharacterModel.findByPk(ctx.from.id);
|
||||
let item = await ItemsModel.findByPk(itemId);
|
||||
@ -2096,6 +2095,8 @@ rpg.action(/attack_\d+/, async (ctx) => {
|
||||
const battleId = ctx.match[0].split("_")[1];
|
||||
const battle = await Battle.findByPk(battleId);
|
||||
|
||||
|
||||
|
||||
if (!battle || battle.status !== "active") {
|
||||
logs(ctx, "Сражение завершено или не существует", { battleId });
|
||||
return ctx.reply("Сражение завершено или не существует.");
|
||||
@ -2112,7 +2113,12 @@ rpg.action(/attack_\d+/, async (ctx) => {
|
||||
logs(ctx, "Противник не найден", { enemyId: battle.enemy });
|
||||
return ctx.reply("Противник не найден.");
|
||||
}
|
||||
|
||||
if (character.stamina < enemy.level * 3) {
|
||||
logs(ctx, "Недостаточно стамины", { character, enemy });
|
||||
return ctx.reply("У вас недостаточно стамины для атаки.");
|
||||
}
|
||||
character.stamina -= enemy.level * 3;
|
||||
await character.save();
|
||||
// Генерация кнопок
|
||||
const buttons = generateBattleButtons(character, battle);
|
||||
const keyboard = Markup.inlineKeyboard(buttons);
|
||||
@ -2168,6 +2174,27 @@ rpg.action(/hit_\d+/, async (ctx) => {
|
||||
battle.status = "completed";
|
||||
await battle.save();
|
||||
logs(ctx, "Победа персонажа", { enemy, battle });
|
||||
Exp(ctx, character, enemy.level * 10)
|
||||
let droppedItems = await dropItem(character, enemy.id);
|
||||
logs(ctx, "Предметы с врага", { droppedItems });
|
||||
if (droppedItems) {
|
||||
for (const item of droppedItems) {
|
||||
await InventoryModel.create({
|
||||
telegram_id: character.telegram_id,
|
||||
name: item.name,
|
||||
text_id: item.text_id,
|
||||
description: item.description,
|
||||
effectData: item.effectData,
|
||||
price: item.price,
|
||||
rarity: item.rarity,
|
||||
type: item.type,
|
||||
duration: item.duration,
|
||||
canBeEquipped: item.canBeEquipped,
|
||||
equipped: false,
|
||||
img: item.img
|
||||
});
|
||||
}
|
||||
}
|
||||
return ctx.editMessageText(`🎉 ${character.name} победил ${enemy.name}!`);
|
||||
}
|
||||
|
||||
@ -2248,12 +2275,10 @@ async function dropItem(character, enemyId, locationId) {
|
||||
// Загружаем данные о враге или локации
|
||||
let source = null;
|
||||
if (enemyId) {
|
||||
console.log('enemyid')
|
||||
source = await Enemy.findByPk(enemyId);
|
||||
if (!source) return null;
|
||||
items = source.loot; // Лут из врага
|
||||
} else if (locationId) {
|
||||
console.log('locationid')
|
||||
source = await Location.findByPk(locationId);
|
||||
if (!source) return null;
|
||||
items = source.loot; // Лут из локации
|
||||
@ -2293,7 +2318,7 @@ async function dropItem(character, enemyId, locationId) {
|
||||
// Проверка, выпал ли предмет
|
||||
if (dropRoll <= finalChance) {
|
||||
droppedItems.push(item); // Добавляем выпавший предмет в массив
|
||||
//console.log(`Предмет ${item.name} (id: ${item.id}) выпал с шансом ${finalChance * 100}%`);
|
||||
console.log(`Предмет ${item.name} (id: ${item.id}) выпал с шансом ${finalChance * 100}%`);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2348,6 +2373,7 @@ async function dropItemFast(character, inventory, items) {
|
||||
|
||||
// Если предметы выпали, возвращаем их, иначе null
|
||||
if (droppedItems.length > 0) {
|
||||
rpg.sendMessage(character.telegram_id, `🎉 Вы нашли: ${droppedItems.map((item) => item.name).join(", ")}`);
|
||||
return droppedItems; // Вернем массив выпавших предметов
|
||||
} else {
|
||||
return null; // Если ничего не выпало
|
||||
@ -2406,6 +2432,27 @@ rpg.action(/critical_\d+/, async (ctx) => {
|
||||
if (battle.enemy_hp <= 0) {
|
||||
battle.status = "completed";
|
||||
await battle.save();
|
||||
Exp(ctx, character, enemy.level * 11)
|
||||
let droppedItems = await dropItem(character, enemy.id);
|
||||
logs(ctx, "Предметы с врага", { droppedItems });
|
||||
if (droppedItems) {
|
||||
for (const item of droppedItems) {
|
||||
await InventoryModel.create({
|
||||
telegram_id: character.telegram_id,
|
||||
name: item.name,
|
||||
text_id: item.text_id,
|
||||
description: item.description,
|
||||
effectData: item.effectData,
|
||||
price: item.price,
|
||||
rarity: item.rarity,
|
||||
type: item.type,
|
||||
duration: item.duration,
|
||||
canBeEquipped: item.canBeEquipped,
|
||||
equipped: false,
|
||||
img: item.img
|
||||
});
|
||||
}
|
||||
}
|
||||
return ctx.editMessageText(
|
||||
`🎉 ${character.name} победил ${enemy.name}!\n\n📜 Логи битвы:\n${battle.logs.slice(-5).map((log) => `• ${log}`).join("\n")}`
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user