v6.3
Обновление меню организации Новая система инвайт кодов
This commit is contained in:
parent
a31b383dae
commit
9e2eef59de
71
bot.js
71
bot.js
@ -263,22 +263,22 @@ bot.command('start', async (ctx) => {
|
|||||||
|
|
||||||
if (inviter) {
|
if (inviter) {
|
||||||
inviter.money += 250000;
|
inviter.money += 250000;
|
||||||
await inviter.save();
|
|
||||||
|
|
||||||
user.money += 250000;
|
user.money += 250000;
|
||||||
user.referated = true;
|
user.referated = true;
|
||||||
|
|
||||||
// Управление статусами
|
// Управление статусами
|
||||||
if (user.status === 'bronze') {
|
if (inviter.status === 'bronze') {
|
||||||
user.statustime += 60 * 60 * 24 * 3; // +3 дня
|
inviter.statustime += 4320
|
||||||
await ctx.reply('Ваш статус "Bronze" продлен на 3 дня.');
|
await ctx.reply('Ваш статус "Bronze" продлен на 3 дня.');
|
||||||
} else if (user.status === 'user') {
|
} else if (inviter.status === 'user') {
|
||||||
user.status = 'bronze';
|
inviter.status = 'bronze';
|
||||||
user.statustime = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 3;
|
inviter.statustime = 4320
|
||||||
await ctx.reply('Вам выдан статус "Bronze" на 3 дня.');
|
await ctx.reply('Вам выдан статус "Bronze" на 3 дня.');
|
||||||
}
|
}
|
||||||
|
|
||||||
await user.save();
|
await user.save();
|
||||||
|
await inviter.save();
|
||||||
|
|
||||||
// Обновление данных приглашения
|
// Обновление данных приглашения
|
||||||
invite.users.push(ctx.from.id);
|
invite.users.push(ctx.from.id);
|
||||||
@ -625,7 +625,6 @@ bot.action('manage_organization', async (ctx) => {
|
|||||||
const buttons = [
|
const buttons = [
|
||||||
[{ text: '👥 Участники', callback_data: 'org_members' }],
|
[{ text: '👥 Участники', callback_data: 'org_members' }],
|
||||||
[{ text: '📞 Пригласить', callback_data: 'org_invite' }],
|
[{ text: '📞 Пригласить', callback_data: 'org_invite' }],
|
||||||
[{ text: '🔧 Настройки', callback_data: 'org_settings' }],
|
|
||||||
[{ text: '🚫 Расформировать', callback_data: `dissolve_organization_${business.id}` }],
|
[{ text: '🚫 Расформировать', callback_data: `dissolve_organization_${business.id}` }],
|
||||||
[{ text: '⬅️ Назад', callback_data: 'organization_menu' }]
|
[{ text: '⬅️ Назад', callback_data: 'organization_menu' }]
|
||||||
];
|
];
|
||||||
@ -776,9 +775,6 @@ bot.action('org_invite', async (ctx) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////Enterprise Update 20.12.2024//////////////////////////////////////////////////
|
/////////////////////////////////////Enterprise Update 20.12.2024//////////////////////////////////////////////////
|
||||||
|
|
||||||
// Обновление меню "Предприятия"
|
// Обновление меню "Предприятия"
|
||||||
@ -973,6 +969,39 @@ bot.action(/build_(wood|coal|oil|metall|gold|diamond)/, async (ctx) => {
|
|||||||
if (user.money < price) {
|
if (user.money < price) {
|
||||||
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас недостаточно средств для постройки предприятия. Необходимо ${utils.spaces(price)} руб.`, { show_alert: true })
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас недостаточно средств для постройки предприятия. Необходимо ${utils.spaces(price)} руб.`, { show_alert: true })
|
||||||
}
|
}
|
||||||
|
// Проверка уровня, для покупки предприятия, для покупки деревообрабатывающего предприятия нужен 5 уровень и каждое следующее предприятие требует уровень выше
|
||||||
|
switch (type) {
|
||||||
|
case 'wood':
|
||||||
|
if (user.level < 5) {
|
||||||
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Для постройки деревообрабатывающего предприятия необходим 5 уровень.`, { show_alert: true })
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'coal':
|
||||||
|
if (user.level < 6) {
|
||||||
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Для постройки угольного предприятия необходим 10 уровень.`, { show_alert: true })
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'oil':
|
||||||
|
if (user.level < 7) {
|
||||||
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Для постройки нефтяного предприятия необходим 15 уровень.`, { show_alert: true })
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'metall':
|
||||||
|
if (user.level < 9) {
|
||||||
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Для постройки металлургического предприятия необходим 20 уровень.`, { show_alert: true })
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'gold':
|
||||||
|
if (user.level < 12) {
|
||||||
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Для постройки золотодобывающего предприятия необходим 25 уровень.`, { show_alert: true })
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'diamond':
|
||||||
|
if (user.level < 15) {
|
||||||
|
return await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Для постройки алмазодобывающего предприятия необходим 30 уровень.`, { show_alert: true })
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Строим предприятие
|
// Строим предприятие
|
||||||
let enterpriseName = `${user.username}'s ${getReadableType(type)}` // Название предприятия
|
let enterpriseName = `${user.username}'s ${getReadableType(type)}` // Название предприятия
|
||||||
@ -1095,6 +1124,10 @@ bot.action('buy_warehouse', async (ctx) => {
|
|||||||
return await ctx.reply('Произошла ошибка. Пользователь не найден.');
|
return await ctx.reply('Произошла ошибка. Пользователь не найден.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (user.level < 5) {
|
||||||
|
return await ctx.reply('Для покупки склада необходим 5 уровень.');
|
||||||
|
}
|
||||||
|
|
||||||
// Получаем цены на металл и дерево
|
// Получаем цены на металл и дерево
|
||||||
const woodPrice = await ResourcePriceModel.findOne({ where: { resource: 'wood' } });
|
const woodPrice = await ResourcePriceModel.findOne({ where: { resource: 'wood' } });
|
||||||
const metallPrice = await ResourcePriceModel.findOne({ where: { resource: 'metall' } });
|
const metallPrice = await ResourcePriceModel.findOne({ where: { resource: 'metall' } });
|
||||||
@ -2167,6 +2200,22 @@ setInterval(() => {
|
|||||||
}*/
|
}*/
|
||||||
}, 3600000);
|
}, 3600000);
|
||||||
|
|
||||||
|
// cron на проверку остается ли у пользователя привелегия user.status == 'bronze' || user.status == 'silver' || user.status == 'gold' из user.statustime (оставшиеся минуты)
|
||||||
|
schedule.scheduleJob('*/1 * * * *', async () => {
|
||||||
|
const users = await UserModel.findAll();
|
||||||
|
for (const user of users) {
|
||||||
|
if (user.status == 'bronze' || user.status == 'silver' || user.status == 'gold') {
|
||||||
|
if (user.statustime > 0) {
|
||||||
|
user.statustime -= 1
|
||||||
|
await user.save()
|
||||||
|
} else {
|
||||||
|
user.status = 'user'
|
||||||
|
await user.save()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|
||||||
bot.launch()
|
bot.launch()
|
@ -9,6 +9,7 @@ const {
|
|||||||
weapons,
|
weapons,
|
||||||
equipment,
|
equipment,
|
||||||
UserModel,
|
UserModel,
|
||||||
|
InviteModel,
|
||||||
WorldModel,
|
WorldModel,
|
||||||
JobModel,
|
JobModel,
|
||||||
PropertyModel,
|
PropertyModel,
|
||||||
@ -40,10 +41,20 @@ const {
|
|||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
let user = await UserModel.findByPk(ctx.from.id);
|
let user = await UserModel.findByPk(ctx.from.id);
|
||||||
|
const invites = await InviteModel.findAll({ where: { type: 'referral', author: ctx.from.id } });
|
||||||
|
if (invites.length == 0) {
|
||||||
|
const invite = await InviteModel.create({ author: ctx.from.id, uid: `${user.username}_ref_invite`, type: 'referral' });
|
||||||
return ctx.reply( `
|
return ctx.reply( `
|
||||||
ℹ️ Для приглашения друга по реферальной системе, отправьте ему ссылку-приглашение
|
ℹ️ Для приглашения друга по реферальной системе, отправьте ему ссылку-приглашение
|
||||||
Как только он перейдет по ней и начнет игру, Вы получите ₽25.000.
|
Как только он перейдет по ней и начнет игру, Вы получите 3 дня статуса "Bronze".
|
||||||
|
Ваша ссылка: https://t.me/CampFireGameBot?start=${invite.uid})
|
||||||
Ваша ссылка: https://t.me/CampFireGameBot?start=${user.telegram_id}
|
`);
|
||||||
`)
|
}
|
||||||
|
|
||||||
|
const invite = invites[0];
|
||||||
|
return ctx.reply( `
|
||||||
|
ℹ️ Для приглашения друга по реферальной системе, отправьте ему ссылку-приглашение
|
||||||
|
Как только он перейдет по ней и начнет игру, Вы получите 3 дня статуса "Bronze".
|
||||||
|
Ваша ссылка: https://t.me/CampFireGameBot?start=${invite.uid})
|
||||||
|
`);
|
||||||
}
|
}
|
@ -53,9 +53,6 @@ module.exports = async (ctx) => {
|
|||||||
{
|
{
|
||||||
text: `🔧 Управление`,
|
text: `🔧 Управление`,
|
||||||
callback_data: "manage_organization"
|
callback_data: "manage_organization"
|
||||||
},
|
|
||||||
{ text: '❌ Ликвидировать организацию',
|
|
||||||
callback_data: `dissolve_organization_${business.id}`
|
|
||||||
}]
|
}]
|
||||||
])
|
])
|
||||||
.oneTime()
|
.oneTime()
|
||||||
|
@ -11,9 +11,12 @@ const {
|
|||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
let user = await UserModel.findByPk(ctx.from.id);
|
let user = await UserModel.findByPk(ctx.from.id);
|
||||||
let property = await PropertyModel.findByPk(ctx.from.id);
|
let property = await PropertyModel.findByPk(ctx.from.id);
|
||||||
|
// statustime хранит минуты, которые остались до смены статуса, формируем текстовое представление
|
||||||
|
let hours = Math.floor(user.statustime / 60);
|
||||||
|
let minutes = user.statustime % 60;
|
||||||
if (!user) return ctx.reply(`Ошибка #1`);
|
if (!user) return ctx.reply(`Ошибка #1`);
|
||||||
return ctx.replyWithMarkdownV2(`
|
return ctx.replyWithMarkdownV2(`
|
||||||
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[🔺\\]` : ""}${user.status == 'silver' ? `\\[🔹\\]` : ""}${user.status == 'gold' ? `\\[🔸\\]` : ""}${user.status == 'admin' ? "✅" : ""}
|
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[🔺\\]` : ""}${user.status == 'silver' ? `\\[🔹\\]` : ""}${user.status == 'gold' ? `\\[🔸\\]` : ""}${user.status == 'admin' ? "✅" : ""} ${user.status == 'user' ? "" : ` ${hours} ч\\. ${minutes} мин\\.`}
|
||||||
🆔: ${ctx.from.id}
|
🆔: ${ctx.from.id}
|
||||||
|
|
||||||
📶 Уровень: ${user.level} \\| ${user.exp} / ${expToUp[user.level]}
|
📶 Уровень: ${user.level} \\| ${user.exp} / ${expToUp[user.level]}
|
||||||
|
5463
json/logs.json
5463
json/logs.json
File diff suppressed because it is too large
Load Diff
3
rpg.js
3
rpg.js
@ -1991,6 +1991,7 @@ rpg.action(/viewlocation_\d+/, async (ctx) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
rpg.action(/explore_\d+/, async (ctx) => {
|
rpg.action(/explore_\d+/, async (ctx) => {
|
||||||
|
return ctx.answerCbQuery("Функционал в разработке.");
|
||||||
const locationId = ctx.match[0].split("_")[1];
|
const locationId = ctx.match[0].split("_")[1];
|
||||||
const location = await Location.findByPk(locationId);
|
const location = await Location.findByPk(locationId);
|
||||||
|
|
||||||
@ -2017,7 +2018,7 @@ rpg.action(/explore_\d+/, async (ctx) => {
|
|||||||
character.stamina -= location.level; // Снимаем стамину за исследование
|
character.stamina -= location.level; // Снимаем стамину за исследование
|
||||||
await character.save();
|
await character.save();
|
||||||
// У локации такой же свой массив лута как и у врагов, поэтому можно использовать ту же функцию dropLoot
|
// У локации такой же свой массив лута как и у врагов, поэтому можно использовать ту же функцию dropLoot
|
||||||
const loot = dropLoot(location.loot);
|
const loot = dropItem(location.loot);
|
||||||
const experience = Math.floor(Math.random() * 10) + 5; // Опыт за исследование
|
const experience = Math.floor(Math.random() * 10) + 5; // Опыт за исследование
|
||||||
await Exp(ctx, character, experience)
|
await Exp(ctx, character, experience)
|
||||||
await ctx.reply(`Вы исследовали локацию ${location.name} и нашли:\n${loot.join("\n")}\n\n`);
|
await ctx.reply(`Вы исследовали локацию ${location.name} и нашли:\n${loot.join("\n")}\n\n`);
|
||||||
|
Loading…
Reference in New Issue
Block a user