138 lines
5.5 KiB
JavaScript
138 lines
5.5 KiB
JavaScript
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
|
||
} = 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 result = await ctx.replyWithDice({emoji: `🎯`})
|
||
switch(result.dice.value){
|
||
case 6:
|
||
enemyHP = enemyHP - (property.weapon.damage*1000)*10
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Head: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
break;
|
||
case 5:
|
||
if(enemyArmor > 0){
|
||
enemyArmor = enemyArmor - (property.weapon.damage*1000)*5
|
||
if(enemyArmor < 0) enemyHP = enemyHP + enemyArmor
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Chest: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
}else{
|
||
enemyHP = enemyHP - (property.weapon.damage*1000)*5
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Chest: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
}
|
||
break;
|
||
case 4:
|
||
if(enemyArmor > 0){
|
||
enemyArmor = enemyArmor - (property.weapon.damage*1000)*3
|
||
if(enemyArmor < 0) enemyHP = enemyHP + enemyArmor
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Stom: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
}else{
|
||
enemyHP = enemyHP - (property.weapon.damage*1000)*3
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Stom: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
}
|
||
break;
|
||
case 3:
|
||
enemyHP = enemyHP - (property.weapon.damage*1000)/2
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Arms: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
break;
|
||
case 2:
|
||
enemyHP = enemyHP - (property.weapon.damage*1000)/1.5
|
||
setTimeout(() => {
|
||
ctx.reply(`Enemy Legs: HP:${enemyHP} Armor: ${enemyArmor}`)
|
||
}, 1900)
|
||
break;
|
||
case 1:
|
||
setTimeout(() => {
|
||
ctx.reply(`Промах, лох`)
|
||
}, 1900)
|
||
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 |