CampFirePlay/scenes/pve.js
Degradin 906fffd2ca finaltotransfer
Подготовка к переезду на другой сервер
2024-05-04 19:59:35 +03:00

132 lines
5.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const {
Telegraf,
Scenes,
Markup
} = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN)
const {
slots,
phones,
UserModel,
WorldModel,
SkillsModel,
PropertyModel
} = require('/workspace/degradin/Dev/Telegram/CampFire Play/config')
const {
spaces,
getSlot,
giveExp,
rand,
random,
setCooldown,
drop
} = require('/workspace/degradin/Dev/Telegram/CampFire Play/utils');
const pve = new Scenes.BaseScene('PVE');
pve.enter(async (ctx) => {
let property = await PropertyModel.findByPk(ctx.from.id)
ctx.reply(`Ваш противник:\n${ctx.session.enemy.name}\nЗдоровье: ${ctx.session.enemy.hp}\nБроня: ${ctx.session.enemy.armor}`, Markup.inlineKeyboard([
[
{text: `${property.weapon.name}`, callback_data: `attack`}
]
]));
});
pve.action('attack', async (ctx) => {
let enemyHP = ctx.session.enemy.hp
let enemyArmor = ctx.session.enemy.armor
let property = await PropertyModel.findByPk(ctx.from.id)
let resultTier = [
{hit: 'Head', droprate: 10},
{hit: 'Chest', droprate: 20},
{hit: 'Stom', droprate: 25},
{hit: 'Arms', droprate: 40},
{hit: 'Legs', droprate: 55},
{hit: 'Miss', droprate: 50}
]
let result = drop(resultTier)
console.log(result)
switch(result.hit){
case 'Head':
enemyHP = enemyHP - (property.weapon.damage*1000)*10
ctx.reply(`Enemy Head: HP:${enemyHP} Armor: ${enemyArmor}`)
break;
case 'Chest':
if(enemyArmor > 0){
enemyArmor = enemyArmor - (property.weapon.damage*1000)*5
if(enemyArmor < 0) enemyHP = enemyHP + enemyArmor
ctx.reply(`Enemy Chest: HP:${enemyHP} Armor: ${enemyArmor}`)
}else{
enemyHP = enemyHP - (property.weapon.damage*1000)*5
ctx.reply(`Enemy Chest: HP:${enemyHP} Armor: ${enemyArmor}`)
}
break;
case 'Stom':
if(enemyArmor > 0){
enemyArmor = enemyArmor - (property.weapon.damage*1000)*3
if(enemyArmor < 0) enemyHP = enemyHP + enemyArmor
ctx.reply(`Enemy Stom: HP:${enemyHP} Armor: ${enemyArmor}`)
}else{
enemyHP = enemyHP - (property.weapon.damage*1000)*3
ctx.reply(`Enemy Stom: HP:${enemyHP} Armor: ${enemyArmor}`)
}
break;
case 'Arms':
enemyHP = enemyHP - (property.weapon.damage*1000)/2
ctx.reply(`Enemy Arms: HP:${enemyHP} Armor: ${enemyArmor}`)
break;
case 'Legs':
enemyHP = enemyHP - (property.weapon.damage*1000)/1.5
ctx.reply(`Enemy Legs: HP:${enemyHP} Armor: ${enemyArmor}`)
break;
case 'Miss':
ctx.reply(`Промах, лох`)
break;
}
ctx.session.enemy.hp = enemyHP
ctx.session.enemy.armor = enemyArmor
if (enemyHP <= 0) {
console.log(ctx.session)
switch(ctx.session.stage){
case 'SHOP_KILL_CASHIER': case 'SHOP_GUARD_KILL': case 'SHOP_GUARD_STEALTH':
ctx.session.__scenes = { current: 'SHOP_ROBBERY', state: {} }
return ctx.sendMessage('Охранник обезврежен, вы подходите к кассиру:', Markup.inlineKeyboard([
[{text: 'Убить кассира и забрать все из кассы', callback_data: `SHOP_KILL_CASHIER`}],
//[{text: 'Приказать кассиру сдать кассу [Угроза]', callback_data: `SHOP_THREAT`}],
//[{text: 'Приказать кассиру сдать кассу [Убеждение]', callback_data: `SHOP_CONVICTION`}]
]))
case 'SHOP_CASH_SMASH':
ctx.session.__scenes = { current: 'SHOP_ROBBERY', state: {} }
return ctx.sendMessage('Вы завершили перестрелку с полицией, пора валить.', Markup.inlineKeyboard([
[{text: 'Завершить ограбление', callback_data: `SHOP_END`}]
]))
default:
return ctx.sendMessage('Ошибка выхода из сцены => DEBUG', Markup.inlineKeyboard([
[{text: 'Завершить ограбление [Магазин]', callback_data: `SHOP_END`}]
]))
}
} else {
// Противник еще жив, отправляем сообщение с обновленным HP и кнопкой для атаки
let enemyDmg = rand(0, 10)
ctx.session.user.hp -= enemyDmg
if(ctx.session.user.hp <= 0) {
ctx.editMessageText(`${ctx.session.enemy.name} наносит вам ${enemyDmg} урона.\n Осталось HP: ${ctx.session.user.hp}\nВы критически ранены!`, Markup.inlineKeyboard([
[
{text: 'Завершить ограбление', callback_data: `SHOP_END`}
]
]))
}
ctx.sendMessage(`${ctx.session.enemy.name} наносит вам ${enemyDmg} урона.\n Осталось HP: ${ctx.session.user.hp}`)
ctx.editMessageText(`Ваш противник:\n${ctx.session.enemy.name}\nЗдоровье: ${ctx.session.enemy.hp}\nБроня: ${ctx.session.enemy.armor}`, Markup.inlineKeyboard([
[
{text: `${property.weapon.name}`, callback_data: `attack`}
]
]));
}
});
pve.leave((ctx) => {
console.log('Завершено');
});
module.exports = pve