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 'Ресурс';
|
default: return 'Ресурс';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Подписываемся на обновления данных
|
||||||
|
tg.subscribeToData((data) => {
|
||||||
|
console.log("Обновление данных:", data);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
61
rpg.js
61
rpg.js
@ -11,6 +11,7 @@ const utils = require('./utils');
|
|||||||
const handlers = require('./handlers');
|
const handlers = require('./handlers');
|
||||||
const { keyboard } = require('telegraf/markup');
|
const { keyboard } = require('telegraf/markup');
|
||||||
const { parse } = require('error-stack-parser');
|
const { parse } = require('error-stack-parser');
|
||||||
|
const { get } = require('http');
|
||||||
const {
|
const {
|
||||||
phones,
|
phones,
|
||||||
expToUp,
|
expToUp,
|
||||||
@ -1091,7 +1092,6 @@ rpg.action(/view_item_(\d+)/, async (ctx) => {
|
|||||||
try {
|
try {
|
||||||
// Формируем путь к картинке
|
// Формируем путь к картинке
|
||||||
let imagePath = path.join(__dirname, 'media/items', item.text_id + '.png'); // Путь к картинке
|
let imagePath = path.join(__dirname, 'media/items', item.text_id + '.png'); // Путь к картинке
|
||||||
console.log(imagePath);
|
|
||||||
|
|
||||||
// Проверяем существует ли файл
|
// Проверяем существует ли файл
|
||||||
if (!fs.existsSync(imagePath)) {
|
if (!fs.existsSync(imagePath)) {
|
||||||
@ -1140,7 +1140,7 @@ rpg.action(/use_item_(\d+)/, async (ctx) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (equippedItems.length > 0) {
|
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) => {
|
rpg.command('giveitem', async (ctx) => {
|
||||||
if (ctx.from.id != 275416286) return ctx.reply('Команда недоступна.')
|
if (ctx.from.id != 275416286) return ctx.reply('Команда недоступна.')
|
||||||
const itemId = parseInt(ctx.message.text.split(' ')[1], 10);
|
const itemId = parseInt(ctx.message.text.split(' ')[1], 10);
|
||||||
console.log(itemId)
|
|
||||||
let user = await UserModel.findByPk(ctx.from.id)
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
let character = await CharacterModel.findByPk(ctx.from.id);
|
let character = await CharacterModel.findByPk(ctx.from.id);
|
||||||
let item = await ItemsModel.findByPk(itemId);
|
let item = await ItemsModel.findByPk(itemId);
|
||||||
@ -2096,6 +2095,8 @@ rpg.action(/attack_\d+/, async (ctx) => {
|
|||||||
const battleId = ctx.match[0].split("_")[1];
|
const battleId = ctx.match[0].split("_")[1];
|
||||||
const battle = await Battle.findByPk(battleId);
|
const battle = await Battle.findByPk(battleId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!battle || battle.status !== "active") {
|
if (!battle || battle.status !== "active") {
|
||||||
logs(ctx, "Сражение завершено или не существует", { battleId });
|
logs(ctx, "Сражение завершено или не существует", { battleId });
|
||||||
return ctx.reply("Сражение завершено или не существует.");
|
return ctx.reply("Сражение завершено или не существует.");
|
||||||
@ -2112,7 +2113,12 @@ rpg.action(/attack_\d+/, async (ctx) => {
|
|||||||
logs(ctx, "Противник не найден", { enemyId: battle.enemy });
|
logs(ctx, "Противник не найден", { enemyId: battle.enemy });
|
||||||
return ctx.reply("Противник не найден.");
|
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 buttons = generateBattleButtons(character, battle);
|
||||||
const keyboard = Markup.inlineKeyboard(buttons);
|
const keyboard = Markup.inlineKeyboard(buttons);
|
||||||
@ -2168,6 +2174,27 @@ rpg.action(/hit_\d+/, async (ctx) => {
|
|||||||
battle.status = "completed";
|
battle.status = "completed";
|
||||||
await battle.save();
|
await battle.save();
|
||||||
logs(ctx, "Победа персонажа", { enemy, battle });
|
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}!`);
|
return ctx.editMessageText(`🎉 ${character.name} победил ${enemy.name}!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2248,12 +2275,10 @@ async function dropItem(character, enemyId, locationId) {
|
|||||||
// Загружаем данные о враге или локации
|
// Загружаем данные о враге или локации
|
||||||
let source = null;
|
let source = null;
|
||||||
if (enemyId) {
|
if (enemyId) {
|
||||||
console.log('enemyid')
|
|
||||||
source = await Enemy.findByPk(enemyId);
|
source = await Enemy.findByPk(enemyId);
|
||||||
if (!source) return null;
|
if (!source) return null;
|
||||||
items = source.loot; // Лут из врага
|
items = source.loot; // Лут из врага
|
||||||
} else if (locationId) {
|
} else if (locationId) {
|
||||||
console.log('locationid')
|
|
||||||
source = await Location.findByPk(locationId);
|
source = await Location.findByPk(locationId);
|
||||||
if (!source) return null;
|
if (!source) return null;
|
||||||
items = source.loot; // Лут из локации
|
items = source.loot; // Лут из локации
|
||||||
@ -2293,7 +2318,7 @@ async function dropItem(character, enemyId, locationId) {
|
|||||||
// Проверка, выпал ли предмет
|
// Проверка, выпал ли предмет
|
||||||
if (dropRoll <= finalChance) {
|
if (dropRoll <= finalChance) {
|
||||||
droppedItems.push(item); // Добавляем выпавший предмет в массив
|
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
|
// Если предметы выпали, возвращаем их, иначе null
|
||||||
if (droppedItems.length > 0) {
|
if (droppedItems.length > 0) {
|
||||||
|
rpg.sendMessage(character.telegram_id, `🎉 Вы нашли: ${droppedItems.map((item) => item.name).join(", ")}`);
|
||||||
return droppedItems; // Вернем массив выпавших предметов
|
return droppedItems; // Вернем массив выпавших предметов
|
||||||
} else {
|
} else {
|
||||||
return null; // Если ничего не выпало
|
return null; // Если ничего не выпало
|
||||||
@ -2406,6 +2432,27 @@ rpg.action(/critical_\d+/, async (ctx) => {
|
|||||||
if (battle.enemy_hp <= 0) {
|
if (battle.enemy_hp <= 0) {
|
||||||
battle.status = "completed";
|
battle.status = "completed";
|
||||||
await battle.save();
|
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(
|
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")}`
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user