finaltotransfer

Подготовка к переезду на другой сервер
This commit is contained in:
Degradin 2024-05-04 19:59:35 +03:00
parent 1051e44893
commit 906fffd2ca
29 changed files with 1747 additions and 1743 deletions

23
bot.js
View File

@ -72,7 +72,9 @@ const {
shot,
outmenu,
lobbyCreate,
lobbyMenu
lobbyMenu,
garage,
race
} = require('./commands')
const {
spaces,
@ -104,7 +106,8 @@ const {
const pocketsteal = require('./scenes/pocketsteal')
const shop = require('./scenes/shop')
const pve = require('./scenes/pve')
const stage = new Scenes.Stage([crime, pocketsteal, shop, pve]);
const newpve = require('./scenes/newpve')
const stage = new Scenes.Stage([crime, pocketsteal, shop, pve, newpve]);
const start = async () => {
try {
@ -282,7 +285,8 @@ bot.command('start', async (ctx) => {
})
bot.hears('Криминал', async (ctx) => {
await ctx.scene.enter('Crime')
await ctx.reply(`Closed`)
/*await ctx.scene.enter('Crime')*/
})
@ -326,6 +330,10 @@ bot.hears('💳 Баланс', async (ctx) => {
bot.hears('🎁 Бонус', bonus)
bot.hears('Гараж', garage)
bot.hears('Гонка', race)
bot.command('pay', pay)
bot.hears('Мир', worldMenu)
@ -435,10 +443,6 @@ bot.command('genpromo', genPromo)
///////////////////////////////////////Functions//////////////////////////////////////////////////////
setInterval(() => {
generatePromo()
}, 18000000);
setInterval(() => {
var today = new Date();
let hours = today.getHours();
@ -446,7 +450,10 @@ setInterval(() => {
weaponShopUpdate()
matPriceUpdate()
}
}, 360000);
/*if (hours == "9" || hours == "18" || hours == "12") {
generatePromo()
}*/
}, 3600000);
start()

View File

@ -13,7 +13,7 @@ module.exports = async (ctx) => {
let user = await UserModel.findByPk(ctx.from.id)
let property = await PropertyModel.findByPk(ctx.from.id)
if(user.money < 500000) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Открытие контейнера стоит ₽500.000`, {show_alert: true})
if(property.car.name) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас уже есть автомобиль\nПродайте текущий автомобиль: /sell car`, {show_alert: true})
if(property.car1.name) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас уже есть автомобиль\nПродайте текущий автомобиль: /sell car`, {show_alert: true})
user.money -= 500000
let userWin = null
switch(data){
@ -24,7 +24,8 @@ module.exports = async (ctx) => {
userWin = simplecars.random()
break;
}
property.car = userWin
property.car1 = userWin
property.car1.health = 100
user.save()
property.save()
ctx.deleteMessage()

37
commands/garage.js Normal file
View File

@ -0,0 +1,37 @@
const {
UserModel,
PropertyModel,
expToUp
} = require('../config')
const {
spacesWithMarkdown,
escape
} = require('../utils')
module.exports = async (ctx) => {
let user = await UserModel.findByPk(ctx.from.id);
let property = await PropertyModel.findByPk(ctx.from.id);
if (!user) return ctx.reply(`Ошибка #1`);
return ctx.replyWithMarkdownV2(`
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[🔺\\]` : ""}${user.status == 'silver' ? `\\[🔹\\]` : ""}${user.status == 'gold' ? `\\[🔸\\]` : ""}${user.status == 'admin' ? "✅" : ""}
🆔: ${ctx.from.id}
🚗 Гараж:
Слот 1: ${property.car1 == 0 ? "Пусто" : escape(property.car1.name) + `
Состояние: ${property.car1.health}%
Стоимость: ${property.car1.price}
Скорость: ${property.car1.speed}
Ускорение: ${property.car1.acceleration}
Управляемость: ${property.car1.control}
`}
Слот 2: ${property.car2 == 0 ? "Пусто" : escape(property.car2.name)}
Слот 3: ${property.car3 == 0 ? "Пусто" : escape(property.car3.name)}
Слот 4: ${property.car4 == 0 ? "Пусто" : escape(property.car4.name)}
Слот 5: ${property.car5 == 0 ? "Пусто" : escape(property.car5.name)}
`);
}
/*
🔫 Оружие: ${property.weapon == 0 ? "Безоружный" : escape(property.weapon.name)}
🥼 Экипировка: ${property.equipment == 0 ? "Нет" : property.equipment.name}
*/

View File

@ -36,5 +36,7 @@ module.exports = {
reportAnswer: require('./admin/reportAnswer'),
fastblock: require('./admin/fastblock'),
createPromo: require('./admin/createPromo'),
genPromo: require('./admin/genPromo')
genPromo: require('./admin/genPromo'),
garage: require('./garage'),
race: require('./race')
}

View File

@ -1,5 +1,6 @@
const {
Telegraf
Telegraf,
Markup
} = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN)
const {

View File

@ -26,9 +26,13 @@ module.exports = async (ctx) => {
🔵 Имущество
🏠 Жилье: ${property.house == 0 ? "Бездомный" : property.house.name}
🚗 Автомобиль: ${property.car == 0 ? "Пешком" : escape(property.car.name)}
🚗 Автомобиль: ${property.car1 == 0 ? "Пешком" : escape(property.car1.name)}
📱 Телефон: ${property.mobile == 0 ? "Нет" : property.mobile.name}
🔫 Оружие: ${property.weapon == 0 ? "Безоружный" : escape(property.weapon.name)}
🥼 Экипировка: ${property.equipment == 0 ? "Нет" : property.equipment.name}
`);
}
}
/*
🔫 Оружие: ${property.weapon == 0 ? "Безоружный" : escape(property.weapon.name)}
🥼 Экипировка: ${property.equipment == 0 ? "Нет" : property.equipment.name}
*/

View File

@ -88,7 +88,8 @@ module.exports = async (ctx) => {
await user.save()
await world.save()
await property.save()
return await ctx.reply(`Вы купили ${weaponshop[data.value].name}`)
await ctx.reply(`Вы купили ${weaponshop[data.value].name}`)
return delete weaponshop[data.value]
}
if (property.weapon.name) return await ctx.reply(`У вас уже есть оружие.`)
user.money -= weaponshop[data.value].price
@ -97,6 +98,7 @@ module.exports = async (ctx) => {
await user.save()
await world.save()
await property.save()
return await ctx.reply(`Вы купили ${weaponshop[data.value].name}`)
await ctx.reply(`Вы купили ${weaponshop[data.value].name}`)
return delete weaponshop[data.value]
}
}

View File

@ -56,11 +56,11 @@ module.exports = async (ctx) => {
return await ctx.reply(`Вы продали ${name}`)
}
if (ctx.args[1] == "car") {
if (!property.car.name) return await ctx.reply(`У вас нет автомобиля.`)
let name = property.car.name
user.money += Math.round(property.car.price/2)
world.balance -= Math.round(property.car.price/2)
property.car = 0
if (!property.car1.name) return await ctx.reply(`У вас нет автомобиля.`)
let name = property.car1.name
user.money += Math.round(property.car1.price/1.2)
world.balance -= Math.round(property.car1.price/1.2)
property.car1 = 0
await user.save()
await world.save()
await property.save()

86
commands/race.js Normal file
View File

@ -0,0 +1,86 @@
const sequelize = require('/workspace/degradin/Dev/Telegram/CampFire Play/db');
const {
rarecars,
simplecars,
UserModel,
PropertyModel
} = require('/workspace/degradin/Dev/Telegram/CampFire Play/config')
const {
spaces,
rand
} = require('/workspace/degradin/Dev/Telegram/CampFire Play/utils')
module.exports = async (ctx) => {
let user = await UserModel.findByPk(ctx.from.id)
let property = await PropertyModel.findByPk(ctx.from.id)
let userEnemy = rand(0,10)
console.log(userEnemy)
switch(userEnemy){
case 4: case 5: case 6: case 7:
userEnemy = rarecars.random()
break;
default:
userEnemy = simplecars.random()
break;
}
userEnemy.health = rand(10, 100)
//ctx.deleteMessage()
let enemyRate = (userEnemy.speed + userEnemy.acceleration + userEnemy.control) + userEnemy.health
let userRate = (property.car1.speed + property.car1.acceleration + property.car1.control) + property.car1.health
await ctx.sendPhoto(userEnemy.image, { caption: `
Автомобиль противника:
${userEnemy.name} | ${enemyRate}
Состояние: ${userEnemy.health}%
Скорость: ${userEnemy.speed}
Ускорение: ${userEnemy.acceleration}
Управляемость: ${userEnemy.control}
Ваш автомобиль:
${property.car1.name} | ${userRate}
Состояние: ${property.car1.health}%
Скорость: ${property.car1.speed}
Ускорение: ${property.car1.acceleration}
Управляемость: ${property.car1.control}
`})
let winner = "Nobody"
let winCheck = rand(0, 100)
console.log(winCheck)
if((userRate - enemyRate) > 10) {
winner = user.username
}else{
if(winCheck >= 50){
winner = userEnemy.name
}else{
winner = user.username
}
}
let carDamage = rand(1, 10)
property.car1.health = 5
const updateProperty = {
car1: sequelize.fn('jsonb_set', 'car1', 'health', sequelize.literal(`car1->'health' - ${carDamage}`)),
};
await property.update(updateProperty);
property.save()
return ctx.reply(`
🏁 Результаты заезда:
${userEnemy.name}
______🚗___________________
${user.username}
🚗_________________________
📣 Победитель ${winner}
Выигрыш: 50.000🔶
💬 Отчет:
${userEnemy.name}
Состояние: -${carDamage}%
${property.car1.name}
Состояние: -8%
`)
}

View File

@ -14,15 +14,15 @@ module.exports = async (ctx) => {
group: ['name', 'status'],
where: {
telegram_id: {
[Op.ne]: 275416286
[Op.notIn]: [275416286, 6489664401]
}
},
order: [
[sequelize.literal('money'), 'DESC']
],
limit: 10
limit: 15
})
let text = `🏆 Топ 10 игроков по балансу.\n\n`
let text = `🏆 Топ 15 игроков по балансу.\n\n`
for(i=0; i<topPlayer.length; i++){
text += `${topSym[i]}. ${topPlayer[i].status == 'bronze' ? `[🔺]` : ""}${topPlayer[i].status == 'silver' ? `[🔹]` : ""}${topPlayer[i].status == 'gold' ? `[🔸]` : ""} ${topPlayer[i].name} [₽${spaces(topPlayer[i].money)}]\n`
}

View File

@ -20,6 +20,7 @@ module.exports = {
LobbyModel: require('../models/lobby.model'),
mainChat : -1001895132127,
adminList : [275416286],
promoTopicId: 1807,
expToUp : [0, 10, 20, 40, 60, 100, 250, 370, 450, 575, 666, 777, 860, 999, 1000, 1177, 1234, 1350, 1488, 1515, 1610],
topSym : ['🥇', '🥈', '🥉', '4⃣', '5⃣', '6⃣', '7⃣', '8⃣', '9⃣', '🔟'],
topSym : ['🥇', '🥈', '🥉', '4⃣', '5⃣', '6⃣', '7⃣', '8⃣', '9⃣', '🔟', '🌫️', '🌫️', '🌫️', '🌫️', '🌫️'],
}

View File

@ -2,101 +2,56 @@
{
"name": "BMW 7 Series 2001",
"price": 1100000,
"speed": 47,
"max_speed": 65,
"acceleration": 40,
"max_acceleration": 57,
"control": 34,
"max_control": 53,
"image": "https://sun9-1.userapi.com/impg/d5DVc5oNorJw50mw0c1y_4iMA1gmFJQ9bqZ7IQ/uebjpdo7_dg.jpg?size=960x720&quality=96&sign=2e5cb705062b188c15050723a8598722&type=album"
},
{
"name": "Mercedes W140 S600 1997",
"price": 1300000,
"speed": 48,
"max_speed": 67,
"acceleration": 42,
"max_acceleration": 59,
"control": 32,
"max_control": 50,
"image": "https://sun9-10.userapi.com/impg/_UawxXF4t14mD_6aHahzdibBK5TbATlnW_Yzmg/n38ggX23gFo.jpg?size=959x960&quality=96&sign=911a96d2f290a114f41806de26dd9351&type=album"
},
{
"name": "Audi RS2 1994",
"price": 3500000,
"speed": 50,
"max_speed": 71,
"acceleration": 52,
"max_acceleration": 69,
"control": 34,
"max_control": 62,
"image": "https://sun9-37.userapi.com/impg/VnZ3YEAwLuLuF9OKhLdc8000uVH7oXuKt0RKWA/ucQP9J0Fo3A.jpg?size=1600x1200&quality=96&sign=fa9c200d9aedf424cbc9839949f5eeb0&type=album"
},
{
"name": "Lotus Omega 1991",
"price": 7000000,
"speed": 50,
"max_speed": 74,
"acceleration": 49,
"max_acceleration": 60,
"control": 37,
"max_control": 52,
"image": "https://sun9-40.userapi.com/impg/z_XO05RQoDz1sexN4jNOOb0VG_lHX9HhyU1hGQ/nPz-SGAgWoQ.jpg?size=1280x800&quality=96&sign=96f0c7b5e7e035433cb19e7a81f664da&type=album"
},
{
"name": "Acura RSX 2003",
"price": 1000000,
"speed": 45,
"max_speed": 63,
"acceleration": 43,
"max_acceleration": 66,
"control": 34,
"max_control": 62,
"image": "https://sun9-25.userapi.com/impg/bpq2RE5Olya6nuVmubYay4cH6Ju6akl6kdTaHw/_IAnNsU_HQw.jpg?size=1600x1200&quality=96&sign=e74da55a75a20d6ace2fc00059a975fb&type=album"
},
{
"name": "Honda NSX 1991",
"price": 6000000,
"image": "https://sun9-78.userapi.com/impg/GocdnvUVxZP1QkkGcJBKI2pMzmitnBlS3uMHOA/BKE2BFk44NQ.jpg?size=1080x1080&quality=96&sign=84eb4a7eae688ab34242bf98c0b3b453&type=album"
},
{
"name": "Mazda RX-7 FC 1990",
"price": 2000000,
"image": "https://sun9-16.userapi.com/impg/KSFDRrsRpHvePQdyFLMYPKJ8fO3r1HBFChItQQ/z3lILSdkoSQ.jpg?size=750x499&quality=96&sign=ce7cfe2238c8d2295f6d59c256a378a7&type=album"
},
{
"name": "Corvette C3 1990",
"price": 5000000,
"image": "https://sun9-30.userapi.com/impg/S104d3tiupLZNxIag76AzoTD7eSP2c23SnEaFQ/9qGBEj--af4.jpg?size=1024x768&quality=96&sign=86a959a0b03668f412f5d158017e611c&type=album"
},
{
"name": "Ford Mustang 302 boss 1970",
"price": 5000000,
"image": "https://sun9-33.userapi.com/impg/v5msKxJGvCm6_ku5HEVN0BntMV_5nti5VU_uUw/3_9wEI-wmr4.jpg?size=1600x1200&quality=96&sign=207c04e9ce19efd4ed896a1d33c07a8b&type=album"
},
{
"name": "Dodge Viper SRT10 2010",
"price": 7000000,
"image": "https://static1.topspeedimages.com/wordpress/wp-content/uploads/jpg/200912/2010-dodge-viper-srt10-1.jpg"
},
{
"name": "Alfa Romeo 4c 2015",
"price": 10000000,
"image": "https://sun9-66.userapi.com/impg/JhQb558Zh_1R7QGzpzMxnNcz5HL95QDPsLHrsA/vUb_j7G-g2M.jpg?size=1342x1920&quality=96&sign=3372c45b71a2aa9eb661cfaa0864875f&type=album"
},
{
"name": "Alfa Romeo Gulia 2020",
"price": 3500000,
"image": "https://sun9-25.userapi.com/impg/H7d5BjKtcR9_dHqbIec87PHewxJdb76-HmBcdg/4ThAZlSR3vM.jpg?size=1920x1280&quality=96&sign=55afcf8e5e1aefb3943b992d0d5586f7&type=album"
},
{
"name": "Lexus LFA 2012",
"price": 24000000,
"image": "https://sun9-59.userapi.com/impg/rs2uFK_yhce7n4LrUu6zRuEiMjmAZY1efF7rPw/M6KE-3yrCi0.jpg?size=960x1200&quality=96&sign=446b869ff12b7ec35eff551b01678cc4&type=album"
},
{
"name": "Buick GNX 1987",
"price": 7000000,
"image": "https://sun9-80.userapi.com/impg/9UoGREtyWSCVLLGFzywnNX_-eDncb1B7Ax63DA/hb3J0XrlYZE.jpg?size=736x1102&quality=96&sign=06ccae23f18eb06b93ba3e46129f7138&type=album"
},
{
"name": "Chevrolet Corvette Z06, 2006",
"price": 4200000,
"image": " https://w.forfun.com/fetch/9f/9f237b9f36e27d1fddf442020bd69ff4.jpeg"
},
{
"name": "Porsche 911",
"price": 7000000,
"image": "https://ivanglazunov.ru/wp-content/uploads/5/3/6/53621ef51acb742df6a27295963e65d4.jpeg"
},
{
"name": "Mercedes-Benz C 200",
"price": 3500000,
"image": "https://avtoshark.com/wp-content/uploads/2020/07/mersedes-c200.jpg"
},
{
"name": "Audi Q5",
"price": 4500000,
"image": "https://avatars.mds.yandex.net/get-autoru-vos/5278263/8baf8d9c6f3fabbe19ab206a9b712713/1200x900n"
},
{
"name": "Ferrari F8",
"price": 34000000,
"image": "https://avatars.mds.yandex.net/get-autoru-vos/2037331/cd075cbfc2d10c05bb0450dcc889d351/1200x900n"
},
{
"name": "Mercedes-Benz AMG GT S, 2017",
"price": 10500000,
"image": "https://avatars.mds.yandex.net/get-autoru-vos/2159790/270111424b42001ae010abc3367bcda9/1200x900n"
}
]

102
json/rarecars.json.dis Normal file
View File

@ -0,0 +1,102 @@
[
{
"name": "BMW 7 Series 2001",
"price": 1100000,
"image": "https://sun9-1.userapi.com/impg/d5DVc5oNorJw50mw0c1y_4iMA1gmFJQ9bqZ7IQ/uebjpdo7_dg.jpg?size=960x720&quality=96&sign=2e5cb705062b188c15050723a8598722&type=album"
},
{
"name": "Mercedes W140 S600 1997",
"price": 1300000,
"image": "https://sun9-10.userapi.com/impg/_UawxXF4t14mD_6aHahzdibBK5TbATlnW_Yzmg/n38ggX23gFo.jpg?size=959x960&quality=96&sign=911a96d2f290a114f41806de26dd9351&type=album"
},
{
"name": "Audi RS2 1994",
"price": 3500000,
"image": "https://sun9-37.userapi.com/impg/VnZ3YEAwLuLuF9OKhLdc8000uVH7oXuKt0RKWA/ucQP9J0Fo3A.jpg?size=1600x1200&quality=96&sign=fa9c200d9aedf424cbc9839949f5eeb0&type=album"
},
{
"name": "Lotus Omega 1991",
"price": 7000000,
"image": "https://sun9-40.userapi.com/impg/z_XO05RQoDz1sexN4jNOOb0VG_lHX9HhyU1hGQ/nPz-SGAgWoQ.jpg?size=1280x800&quality=96&sign=96f0c7b5e7e035433cb19e7a81f664da&type=album"
},
{
"name": "Acura RSX 2003",
"price": 1000000,
"image": "https://sun9-25.userapi.com/impg/bpq2RE5Olya6nuVmubYay4cH6Ju6akl6kdTaHw/_IAnNsU_HQw.jpg?size=1600x1200&quality=96&sign=e74da55a75a20d6ace2fc00059a975fb&type=album"
},
{
"name": "Honda NSX 1991",
"price": 6000000,
"image": "https://sun9-78.userapi.com/impg/GocdnvUVxZP1QkkGcJBKI2pMzmitnBlS3uMHOA/BKE2BFk44NQ.jpg?size=1080x1080&quality=96&sign=84eb4a7eae688ab34242bf98c0b3b453&type=album"
},
{
"name": "Mazda RX-7 FC 1990",
"price": 2000000,
"image": "https://sun9-16.userapi.com/impg/KSFDRrsRpHvePQdyFLMYPKJ8fO3r1HBFChItQQ/z3lILSdkoSQ.jpg?size=750x499&quality=96&sign=ce7cfe2238c8d2295f6d59c256a378a7&type=album"
},
{
"name": "Corvette C3 1990",
"price": 5000000,
"image": "https://sun9-30.userapi.com/impg/S104d3tiupLZNxIag76AzoTD7eSP2c23SnEaFQ/9qGBEj--af4.jpg?size=1024x768&quality=96&sign=86a959a0b03668f412f5d158017e611c&type=album"
},
{
"name": "Ford Mustang 302 boss 1970",
"price": 5000000,
"image": "https://sun9-33.userapi.com/impg/v5msKxJGvCm6_ku5HEVN0BntMV_5nti5VU_uUw/3_9wEI-wmr4.jpg?size=1600x1200&quality=96&sign=207c04e9ce19efd4ed896a1d33c07a8b&type=album"
},
{
"name": "Dodge Viper SRT10 2010",
"price": 7000000,
"image": "https://static1.topspeedimages.com/wordpress/wp-content/uploads/jpg/200912/2010-dodge-viper-srt10-1.jpg"
},
{
"name": "Alfa Romeo 4c 2015",
"price": 10000000,
"image": "https://sun9-66.userapi.com/impg/JhQb558Zh_1R7QGzpzMxnNcz5HL95QDPsLHrsA/vUb_j7G-g2M.jpg?size=1342x1920&quality=96&sign=3372c45b71a2aa9eb661cfaa0864875f&type=album"
},
{
"name": "Alfa Romeo Gulia 2020",
"price": 3500000,
"image": "https://sun9-25.userapi.com/impg/H7d5BjKtcR9_dHqbIec87PHewxJdb76-HmBcdg/4ThAZlSR3vM.jpg?size=1920x1280&quality=96&sign=55afcf8e5e1aefb3943b992d0d5586f7&type=album"
},
{
"name": "Lexus LFA 2012",
"price": 24000000,
"image": "https://sun9-59.userapi.com/impg/rs2uFK_yhce7n4LrUu6zRuEiMjmAZY1efF7rPw/M6KE-3yrCi0.jpg?size=960x1200&quality=96&sign=446b869ff12b7ec35eff551b01678cc4&type=album"
},
{
"name": "Buick GNX 1987",
"price": 7000000,
"image": "https://sun9-80.userapi.com/impg/9UoGREtyWSCVLLGFzywnNX_-eDncb1B7Ax63DA/hb3J0XrlYZE.jpg?size=736x1102&quality=96&sign=06ccae23f18eb06b93ba3e46129f7138&type=album"
},
{
"name": "Chevrolet Corvette Z06, 2006",
"price": 4200000,
"image": " https://w.forfun.com/fetch/9f/9f237b9f36e27d1fddf442020bd69ff4.jpeg"
},
{
"name": "Porsche 911",
"price": 7000000,
"image": "https://ivanglazunov.ru/wp-content/uploads/5/3/6/53621ef51acb742df6a27295963e65d4.jpeg"
},
{
"name": "Mercedes-Benz C 200",
"price": 3500000,
"image": "https://avtoshark.com/wp-content/uploads/2020/07/mersedes-c200.jpg"
},
{
"name": "Audi Q5",
"price": 4500000,
"image": "https://avatars.mds.yandex.net/get-autoru-vos/5278263/8baf8d9c6f3fabbe19ab206a9b712713/1200x900n"
},
{
"name": "Ferrari F8",
"price": 34000000,
"image": "https://avatars.mds.yandex.net/get-autoru-vos/2037331/cd075cbfc2d10c05bb0450dcc889d351/1200x900n"
},
{
"name": "Mercedes-Benz AMG GT S, 2017",
"price": 10500000,
"image": "https://avatars.mds.yandex.net/get-autoru-vos/2159790/270111424b42001ae010abc3367bcda9/1200x900n"
}
]

View File

@ -2,61 +2,45 @@
{
"name": "Subaru Legacy II",
"price": 267000,
"speed": 25,
"max_speed": 37,
"acceleration": 20,
"max_acceleration": 32,
"control": 22,
"max_control": 35,
"image": "https://avatars.mds.yandex.net/get-verba/1540742/2a00000185547e7c4fe6a1ef0a2cccdcc91d/cattouchret"
},
{
"name": "Peugeot 206",
"price": 290000,
"speed": 18,
"max_speed": 30,
"acceleration": 15,
"max_acceleration": 27,
"control": 25,
"max_control": 38,
"image": "https://avatars.mds.yandex.net/get-verba/1030388/2a000001609d64c298bd8a1807bbd401efe8/cattouchret"
},
{
"name": "Ford Focus II",
"price": 350000,
"speed": 20,
"max_speed": 32,
"acceleration": 19,
"max_acceleration": 29,
"control": 21,
"max_control": 36,
"image": "https://avatars.mds.yandex.net/get-verba/1030388/2a000001609579d292099d1496c4184c3a1a/cattouchret"
},
{
"name": "Chevrolet Lanos",
"price": 250000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609b62fdc53e55145a10f2ec6ecc/cattouchret"
},
{
"name": "Opel Astra H",
"price": 450000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609cedee6fbec659b57da48df99a/cattouchret"
},
{
"name": "Mitsubishi Lancer IX",
"price": 380000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a0000016099a4e6be992d7b50134fd908fd/thumb_m_2x"
},
{
"name": "Mitsubishi Lancer X",
"price": 680000,
"speed": 40,
"max_speed": 54,
"acceleration": 35,
"max_acceleration": 42,
"control": 34,
"max_control": 43,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609bda17487cc63d8b957ab4aab2/cattouchret"
},
{
"name": "Cadillac STS I",
"price": 420000,
"image": "https://avatars.mds.yandex.net/get-verba/787013/2a000001609c8f446bce6bfd7271b1c276aa/cattouchret"
},
{
"name": "Toyota Mark II VIII (X100)",
"price": 380000,
"image": "https://avatars.mds.yandex.net/get-verba/787013/2a000001609d5a2d4aef665d95347c1aea99/cattouchret"
},
{
"name": "Renault Logan",
"price": 400000,
"image": "https://cartechnic.ru/800/renault/logan/renault_logan_2013_1.jpg"
},
{
"name": "Mazda 3",
"price": 500000,
"image": "https://a.d-cd.net/da371e4s-1920.jpg"
},
{
"name": "Hot Wheels Lamborghini Sian FKP 37 Orange Коллекционная",
"price": 1000,
"image": "https://ir.ozone.ru/s3/multimedia-4/wc700/6769855444.jpg"
}
]

62
json/simplecars.json.dis Normal file
View File

@ -0,0 +1,62 @@
[
{
"name": "Subaru Legacy II",
"price": 267000,
"image": "https://avatars.mds.yandex.net/get-verba/1540742/2a00000185547e7c4fe6a1ef0a2cccdcc91d/cattouchret"
},
{
"name": "Peugeot 206",
"price": 290000,
"image": "https://avatars.mds.yandex.net/get-verba/1030388/2a000001609d64c298bd8a1807bbd401efe8/cattouchret"
},
{
"name": "Ford Focus II",
"price": 350000,
"image": "https://avatars.mds.yandex.net/get-verba/1030388/2a000001609579d292099d1496c4184c3a1a/cattouchret"
},
{
"name": "Chevrolet Lanos",
"price": 250000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609b62fdc53e55145a10f2ec6ecc/cattouchret"
},
{
"name": "Opel Astra H",
"price": 450000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609cedee6fbec659b57da48df99a/cattouchret"
},
{
"name": "Mitsubishi Lancer IX",
"price": 380000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a0000016099a4e6be992d7b50134fd908fd/thumb_m_2x"
},
{
"name": "Mitsubishi Lancer X",
"price": 680000,
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609bda17487cc63d8b957ab4aab2/cattouchret"
},
{
"name": "Cadillac STS I",
"price": 420000,
"image": "https://avatars.mds.yandex.net/get-verba/787013/2a000001609c8f446bce6bfd7271b1c276aa/cattouchret"
},
{
"name": "Toyota Mark II VIII (X100)",
"price": 380000,
"image": "https://avatars.mds.yandex.net/get-verba/787013/2a000001609d5a2d4aef665d95347c1aea99/cattouchret"
},
{
"name": "Renault Logan",
"price": 400000,
"image": "https://cartechnic.ru/800/renault/logan/renault_logan_2013_1.jpg"
},
{
"name": "Mazda 3",
"price": 500000,
"image": "https://a.d-cd.net/da371e4s-1920.jpg"
},
{
"name": "Hot Wheels Lamborghini Sian FKP 37 Orange Коллекционная",
"price": 1000,
"image": "https://ir.ozone.ru/s3/multimedia-4/wc700/6769855444.jpg"
}
]

View File

@ -1,57 +1,57 @@
{
"0": {
"name": "G36C",
"price": 38999,
"damage": 0.035,
"type": "weapon"
},
"1": {
"name": "M1911",
"price": 13000,
"damage": 0.018,
"type": "weapon"
},
"1": {
"name": "ПМ",
"price": 13000,
"damage": 0.01,
"type": "weapon"
},
"2": {
"name": "АК101",
"price": 49999,
"damage": 0.04,
"name": "HK UMP",
"price": 33999,
"damage": 0.028,
"type": "weapon"
},
"3": {
"name": "ТТ",
"price": 12000,
"damage": 0.15,
"type": "weapon"
},
"4": {
"name": "ПП19 `Бизон`",
"price": 24999,
"damage": 0.023,
"type": "weapon"
},
"4": {
"name": "Glock 17",
"price": 7999,
"damage": 0.013,
"type": "weapon"
},
"5": {
"name": "Бронежилет M2",
"price": 1000,
"name": "Картонные накладки",
"price": 350,
"type": "equipment"
},
"6": {
"name": "Бронежилет M6",
"price": 1000,
"name": "Бронежилет M5",
"price": 150000,
"type": "equipment"
},
"7": {
"name": "Картонные накладки",
"price": 1000,
"name": "Бронежилет M1",
"price": 25000,
"type": "equipment"
},
"8": {
"name": "Бронежилет M2",
"price": 1000,
"name": "Бронежилет M3",
"price": 60000,
"type": "equipment"
},
"9": {
"name": "Бронежилет M5",
"price": 1000,
"name": "Бронежилет M1",
"price": 25000,
"type": "equipment"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 117 KiB

View File

@ -4,7 +4,11 @@ const {DataTypes} = require('sequelize');
const Property = sequelize.define('property', {
telegram_id: {type: DataTypes.STRING, primaryKey: true, unique: true},
house: {type: DataTypes.JSON, defaultValue: 0},
car: {type: DataTypes.JSON, defaultValue: 0},
car1: {type: DataTypes.JSON, defaultValue: 0},
car2: {type: DataTypes.JSON, defaultValue: 0},
car3: {type: DataTypes.JSON, defaultValue: 0},
car4: {type: DataTypes.JSON, defaultValue: 0},
car5: {type: DataTypes.JSON, defaultValue: 0},
mobile: {type: DataTypes.JSON, defaultValue: 0},
weapon: {type: DataTypes.JSON, defaultValue: 0},
equipment: {type: DataTypes.JSON, defaultValue: 0}

2518
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@
"error-stack-parser": "^2.1.4",
"fs": "^0.0.1-security",
"node-telegram-bot-api": "^0.52.0",
"nodemon": "^2.0.7",
"nodemon": "^3.0.1",
"pg": "^8.6.0",
"pg-hstore": "^2.3.3",
"pm2": "^5.3.0",

2
run.bat Normal file
View File

@ -0,0 +1,2 @@
nodemon --ignore json/ .\index.js
pause

View File

@ -1,2 +1,3 @@
[System.Console]::Title = 'CampFireGame'
nodemon --ignore json/ .\index.js
nodemon --ignore json/ .\index.js
pause

249
scenes/newpve.js Normal file
View File

@ -0,0 +1,249 @@
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 newpve = new Scenes.BaseScene('NEWPVE');
const resultTier = [
{hit: 'Head', droprate: 10},
{hit: 'Chest', droprate: 14},
{hit: 'Stom', droprate: 16},
{hit: 'Arms', droprate: 18},
{hit: 'Legs', droprate: 20},
{hit: 'Miss', droprate: 22}
]
newpve.enter(async (ctx) => {
let property = await PropertyModel.findByPk(ctx.from.id)
let mainMessage = await ctx.reply(`Ваш противник:\n${ctx.session.enemy.name}\nЗдоровье: ${ctx.session.enemy.hp}\nБроня: ${ctx.session.enemy.armor}`, Markup.inlineKeyboard([
[{text: '👮', callback_data: `HIT_HEAD`}],
[{text: '💪', callback_data: `HIT_ARM`},{text: '👕', callback_data: `HIT_CHEST`},{text: '💪', callback_data: `HIT_ARM`}],
[{text: '👖', callback_data: `HIT_STOM`}],
[{text: '🦵', callback_data: `HIT_LEG`},{text: '🦵', callback_data: `HIT_LEG`}],
]));
ctx.session.mainMessage = mainMessage
ctx.session.battlelog = `\nBattle Log:\n`
});
newpve.on('callback_query', async (ctx, next) => {
ctx.session.stage = `SHOP_KILL_CASHIER`
setTimeout(() => {
if(ctx.session.enemy.hp <= 0){
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`}]
]))
}
}
}, 500);
return next().then(() => {
})
})
newpve.action('HIT_HEAD', async (ctx) => {
let result = drop(resultTier)
let msg = ctx.session.mainMessage
if(rand(1,100) >= 25){
ctx.session.battlelog += `\nВы промахиваетесь!\n${ctx.session.enemy.name} наносит вам 10 урона.`
}else{
let enemyHP = ctx.session.enemy.hp
let property = await PropertyModel.findByPk(ctx.from.id)
enemyHP = enemyHP - (property.weapon.damage*1000)*10
ctx.session.enemy.hp = enemyHP
ctx.session.battlelog += `\nВы попадаете в голову: ${(property.weapon.damage*1000)*10} урона.`
}
await bot.telegram.editMessageText(
msg.chat.id, // ID чата
msg.message_id, // ID сообщения, которое вы хотите изменить
undefined, // Inline-клавиатуру оставьте неопределенной, чтобы она не изменилась
`Ваш противник:\n${ctx.session.enemy.name}\nЗдоровье: ${ctx.session.enemy.hp}\nБроня: ${ctx.session.enemy.armor}` + ctx.session.battlelog, Markup.inlineKeyboard([
[{text: '👮', callback_data: `HIT_HEAD`}],
[{text: '💪', callback_data: `HIT_ARM`},{text: '👕', callback_data: `HIT_CHEST`},{text: '💪', callback_data: `HIT_ARM`}],
[{text: '👖', callback_data: `HIT_STOM`}],
[{text: '🦵', callback_data: `HIT_LEG`},{text: '🦵', callback_data: `HIT_LEG`}],
])
)
})
newpve.action('HIT_CHEST', async (ctx) => {
let result = drop(resultTier)
let msg = ctx.session.mainMessage
if(rand(1,100) >= 50){
ctx.session.battlelog += `\nВы промахиваетесь!\n${ctx.session.enemy.name} наносит вам 10 урона.`
}else{
let enemyHP = ctx.session.enemy.hp
let enemyArmor = ctx.session.enemy.armor
let property = await PropertyModel.findByPk(ctx.from.id)
if(enemyArmor > 0){
enemyArmor = enemyArmor - (property.weapon.damage*1000)*5
if(enemyArmor < 0) enemyHP = enemyHP + enemyArmor
ctx.session.battlelog += `\nВы попадаете в бронежилет: ${(property.weapon.damage*1000)*5} урона.`
}else{
enemyHP = enemyHP - (property.weapon.damage*1000)*5
ctx.session.battlelog += `\nВы попадаете в грудь: ${(property.weapon.damage*1000)*5} урона.`
}
ctx.session.enemy.armor = enemyArmor
ctx.session.enemy.hp = enemyHP
}
await bot.telegram.editMessageText(
msg.chat.id, // ID чата
msg.message_id, // ID сообщения, которое вы хотите изменить
undefined, // Inline-клавиатуру оставьте неопределенной, чтобы она не изменилась
`Ваш противник:\n${ctx.session.enemy.name}\nЗдоровье: ${ctx.session.enemy.hp}\nБроня: ${ctx.session.enemy.armor}` + ctx.session.battlelog, Markup.inlineKeyboard([
[{text: '👮', callback_data: `HIT_HEAD`}],
[{text: '💪', callback_data: `HIT_ARM`},{text: '👕', callback_data: `HIT_CHEST`},{text: '💪', callback_data: `HIT_ARM`}],
[{text: '👖', callback_data: `HIT_STOM`}],
[{text: '🦵', callback_data: `HIT_LEG`},{text: '🦵', callback_data: `HIT_LEG`}],
])
)
})
newpve.action('HIT_LEG', async (ctx) => {
let result = drop(resultTier)
let msg = ctx.session.mainMessage
if(rand(1,100) >= 70){
ctx.session.battlelog += `\nВы промахиваетесь!\n${ctx.session.enemy.name} наносит вам 10 урона.`
}else{
let enemyHP = ctx.session.enemy.hp
let property = await PropertyModel.findByPk(ctx.from.id)
enemyHP = enemyHP - (property.weapon.damage*1000)/1.5
ctx.session.enemy.hp = enemyHP
ctx.session.battlelog += `\nВы попадаете в ногу: ${(property.weapon.damage*1000)/1.5} урона.`
}
await bot.telegram.editMessageText(
msg.chat.id, // ID чата
msg.message_id, // ID сообщения, которое вы хотите изменить
undefined, // Inline-клавиатуру оставьте неопределенной, чтобы она не изменилась
`Ваш противник:\n${ctx.session.enemy.name}\nЗдоровье: ${ctx.session.enemy.hp}\nБроня: ${ctx.session.enemy.armor}` + ctx.session.battlelog, Markup.inlineKeyboard([
[{text: '👮', callback_data: `HIT_HEAD`}],
[{text: '💪', callback_data: `HIT_ARM`},{text: '👕', callback_data: `HIT_CHEST`},{text: '💪', callback_data: `HIT_ARM`}],
[{text: '👖', callback_data: `HIT_STOM`}],
[{text: '🦵', callback_data: `HIT_LEG`},{text: '🦵', callback_data: `HIT_LEG`}],
])
)
})
newpve.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 = 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`}
]
]));
}
});
newpve.leave((ctx) => {
console.log('Завершено');
});
module.exports = newpve

View File

@ -124,7 +124,8 @@ steal.action(`POCKET_BAG`, async (ctx) => {
let values = 0
for(i=1; i<=times; i++){
switch(i) {
randomize = rand(1,100)
switch(randomize) {
case 2:
values = rand(10000, 50000)
moneyIn += values

View File

@ -18,7 +18,8 @@ getSlot,
giveExp,
rand,
random,
setCooldown
setCooldown,
drop
} = require('/workspace/degradin/Dev/Telegram/CampFire Play/utils');
const pve = new Scenes.BaseScene('PVE');
@ -35,58 +36,51 @@ 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:
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
setTimeout(() => {
ctx.reply(`Enemy Head: HP:${enemyHP} Armor: ${enemyArmor}`)
}, 1900)
break;
case 5:
case 'Chest':
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:
case 'Stom':
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:
case 'Arms':
enemyHP = enemyHP - (property.weapon.damage*1000)/2
setTimeout(() => {
ctx.reply(`Enemy Arms: HP:${enemyHP} Armor: ${enemyArmor}`)
}, 1900)
break;
case 2:
case 'Legs':
enemyHP = enemyHP - (property.weapon.damage*1000)/1.5
setTimeout(() => {
ctx.reply(`Enemy Legs: HP:${enemyHP} Armor: ${enemyArmor}`)
}, 1900)
break;
case 1:
setTimeout(() => {
case 'Miss':
ctx.reply(`Промах, лох`)
}, 1900)
break;
}
ctx.session.enemy.hp = enemyHP

View File

@ -41,9 +41,10 @@ shop.enter(async (ctx) => {
[
{text: 'SOLO', callback_data: `SHOP_SOLO`},
{text: 'DUO', callback_data: `SHOP_DUO`},
{text: 'GROUP', callback_data: `SHOP_GROUP`}
{text: 'GROUP', callback_data: `SHOP_GROUP`},
{text: 'ADMIN', callback_data: `SHOP_ADMIN`}
]
]))
]).resize())
});
shop.action(`SHOP_DUO`, async (ctx) => {
@ -54,6 +55,30 @@ shop.action(`SHOP_GROUP`, async (ctx) => {
ctx.reply(`Еще не доступно.`)
});
shop.action(`DEBUG_PVE`, async (ctx) => {
let user = await UserModel.findByPk(ctx.from.id)
let skill = await SkillsModel.findByPk(ctx.from.id)
ctx.session.enemy = {
name: 'Полицейский',
hp: 100,
armor: 100
}
return ctx.scene.enter('NEWPVE')
});
shop.action(`SHOP_ADMIN`, async (ctx) => {
let user = await UserModel.findByPk(ctx.from.id)
if(user.status != 'admin') return ctx.editMessageText(`Написано же ADMIN блять.`)
return ctx.editMessageText('Admin Panel', Markup.inlineKeyboard([
[{text: 'New PVE', callback_data: `DEBUG_PVE`}],
[{text: 'Убить охранника [Владение оружием]', callback_data: `SHOP_GUARD_KILL`}]
]))
});
shop.action(`SHOP_SOLO`, async (ctx) => {
let property = await PropertyModel.findByPk(ctx.from.id);
if(property.equipment != 0){
@ -133,7 +158,7 @@ shop.action(`SHOP_GUARD_KILL`, async (ctx) => {
ctx.session.stage = 'SHOP_GUARD_KILL'
ctx.session.enemy = {
name: 'Охранник',
hp: 100,
hp: 1000,
armor: 20
}
return ctx.scene.enter('PVE')
@ -199,6 +224,8 @@ shop.action(`SHOP_CASH_SMASH`, async (ctx) => {
let user = await UserModel.findByPk(ctx.from.id)
let skill = await SkillsModel.findByPk(ctx.from.id)
let chance = rand(0, 100)
let cashIn = rand(1000, 10000)
let timer = 1000
if(chance < 50) {
ctx.editMessageText('Вы разбили кассовый аппарат, и сработала сигнализация.')
ctx.session.stage = 'SHOP_CASH_SMASH'
@ -207,11 +234,34 @@ shop.action(`SHOP_CASH_SMASH`, async (ctx) => {
hp: 100,
armor: 100
}
for(i=0; i<rand(3,10);i++){
setTimeout(() => {
cashIn += rand(1000, 10000)
ctx.editMessageText(`⏏️ Вы достали из кассы: Ð${cashIn}`)
}, timer)
timer += 500
}
setTimeout(() => {
user.dirtymoney += cashIn
user.save()
return ctx.editMessageText(`Вы достали из кассы Ð${cashIn}, пора валить.`)
}, timer+300)
return ctx.scene.enter('PVE')
}
return ctx.editMessageText('Вы разбили кассовый аппарат и достали кэш, пора валить.', Markup.inlineKeyboard([
[{text: 'Завершить ограбление', callback_data: `SHOP_END`}]
for(i=0; i<rand(3,10);i++){
setTimeout(() => {
cashIn += rand(1000, 10000)
ctx.editMessageText(`⏏️ Вы достали из кассы: Ð${cashIn}`)
}, timer)
timer += 500
}
setTimeout(() => {
user.dirtymoney += cashIn
user.save()
return ctx.editMessageText(`Вы достали из кассы Ð${cashIn}, пора валить.`, Markup.inlineKeyboard([
[{text: 'Завершить ограбление', callback_data: `SHOP_END`}]
]))
}, timer+300)
});
shop.action(`SHOP_CASH_BREAK_SUCCESS`, async (ctx) => {

19
utils/drop.js Normal file
View File

@ -0,0 +1,19 @@
module.exports = (items) => {
// Сумма всех droprate в массиве
let total = 0;
// Цикл по всем предметам и добавление их droprate к общей сумме
for (let item of items) {
total += item.droprate;
}
// Случайное число от 0 до total
let random = Math.random() * total;
// Цикл по всем предметам и вычитание их droprate из random
for (let item of items) {
random -= item.droprate;
// Если random стал отрицательным или равным нулю, значит этот предмет выпал
if (random <= 0) {
console.log(item.hit)
return item;
}
}
}

View File

@ -13,6 +13,7 @@ const setCooldown = require('./setCooldown')
const weaponShopUpdate = require('./weaponShopUpdate')
const stats = require('./stats')
const escapeHTML = require('./html-escape')
const drop = require(('./drop'))
module.exports = {
spaces,
@ -29,5 +30,6 @@ module.exports = {
setCooldown,
weaponShopUpdate,
stats,
escapeHTML
escapeHTML,
drop
}

View File

@ -16,7 +16,7 @@ module.exports = (user, seconds, type) => {
cooldown.endTime = Math.trunc(Date.now() / 1000 + (seconds/100*50))
break;
case `admin`:
cooldown.endTime = Math.trunc(Date.now() / 1000)
cooldown.endTime = Math.trunc(Date.now() / 1000 + 5)
break;
}
cooldown.timeLeft = cooldown.endTime - cooldown.currentTime