v6.3
Обновление меню организации Новая система инвайт кодов
This commit is contained in:
parent
a31b383dae
commit
9e2eef59de
73
bot.js
73
bot.js
@ -263,22 +263,22 @@ bot.command('start', async (ctx) => {
|
||||
|
||||
if (inviter) {
|
||||
inviter.money += 250000;
|
||||
await inviter.save();
|
||||
|
||||
|
||||
user.money += 250000;
|
||||
user.referated = true;
|
||||
|
||||
// Управление статусами
|
||||
if (user.status === 'bronze') {
|
||||
user.statustime += 60 * 60 * 24 * 3; // +3 дня
|
||||
if (inviter.status === 'bronze') {
|
||||
inviter.statustime += 4320
|
||||
await ctx.reply('Ваш статус "Bronze" продлен на 3 дня.');
|
||||
} else if (user.status === 'user') {
|
||||
user.status = 'bronze';
|
||||
user.statustime = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 3;
|
||||
} else if (inviter.status === 'user') {
|
||||
inviter.status = 'bronze';
|
||||
inviter.statustime = 4320
|
||||
await ctx.reply('Вам выдан статус "Bronze" на 3 дня.');
|
||||
}
|
||||
|
||||
await user.save();
|
||||
await inviter.save();
|
||||
|
||||
// Обновление данных приглашения
|
||||
invite.users.push(ctx.from.id);
|
||||
@ -625,7 +625,6 @@ bot.action('manage_organization', async (ctx) => {
|
||||
const buttons = [
|
||||
[{ text: '👥 Участники', callback_data: 'org_members' }],
|
||||
[{ text: '📞 Пригласить', callback_data: 'org_invite' }],
|
||||
[{ text: '🔧 Настройки', callback_data: 'org_settings' }],
|
||||
[{ text: '🚫 Расформировать', callback_data: `dissolve_organization_${business.id}` }],
|
||||
[{ text: '⬅️ Назад', callback_data: 'organization_menu' }]
|
||||
];
|
||||
@ -776,9 +775,6 @@ bot.action('org_invite', async (ctx) => {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////Enterprise Update 20.12.2024//////////////////////////////////////////////////
|
||||
|
||||
// Обновление меню "Предприятия"
|
||||
@ -973,6 +969,39 @@ bot.action(/build_(wood|coal|oil|metall|gold|diamond)/, async (ctx) => {
|
||||
if (user.money < price) {
|
||||
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)}` // Название предприятия
|
||||
@ -1095,6 +1124,10 @@ bot.action('buy_warehouse', async (ctx) => {
|
||||
return await ctx.reply('Произошла ошибка. Пользователь не найден.');
|
||||
}
|
||||
|
||||
if (user.level < 5) {
|
||||
return await ctx.reply('Для покупки склада необходим 5 уровень.');
|
||||
}
|
||||
|
||||
// Получаем цены на металл и дерево
|
||||
const woodPrice = await ResourcePriceModel.findOne({ where: { resource: 'wood' } });
|
||||
const metallPrice = await ResourcePriceModel.findOne({ where: { resource: 'metall' } });
|
||||
@ -2167,6 +2200,22 @@ setInterval(() => {
|
||||
}*/
|
||||
}, 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()
|
||||
|
||||
bot.launch()
|
||||
bot.launch()
|
||||
|
@ -9,6 +9,7 @@ const {
|
||||
weapons,
|
||||
equipment,
|
||||
UserModel,
|
||||
InviteModel,
|
||||
WorldModel,
|
||||
JobModel,
|
||||
PropertyModel,
|
||||
@ -40,10 +41,20 @@ const {
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
let user = await UserModel.findByPk(ctx.from.id);
|
||||
return ctx.reply(`
|
||||
ℹ️ Для приглашения друга по реферальной системе, отправьте ему ссылку-приглашение
|
||||
Как только он перейдет по ней и начнет игру, Вы получите ₽25.000.
|
||||
|
||||
Ваша ссылка: https://t.me/CampFireGameBot?start=${user.telegram_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( `
|
||||
ℹ️ Для приглашения друга по реферальной системе, отправьте ему ссылку-приглашение
|
||||
Как только он перейдет по ней и начнет игру, Вы получите 3 дня статуса "Bronze".
|
||||
Ваша ссылка: https://t.me/CampFireGameBot?start=${invite.uid})
|
||||
`);
|
||||
}
|
||||
|
||||
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: `🔧 Управление`,
|
||||
callback_data: "manage_organization"
|
||||
},
|
||||
{ text: '❌ Ликвидировать организацию',
|
||||
callback_data: `dissolve_organization_${business.id}`
|
||||
}]
|
||||
])
|
||||
.oneTime()
|
||||
|
@ -11,9 +11,12 @@ const {
|
||||
module.exports = async (ctx) => {
|
||||
let user = await UserModel.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`);
|
||||
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}
|
||||
|
||||
📶 Уровень: ${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) => {
|
||||
return ctx.answerCbQuery("Функционал в разработке.");
|
||||
const locationId = ctx.match[0].split("_")[1];
|
||||
const location = await Location.findByPk(locationId);
|
||||
|
||||
@ -2017,7 +2018,7 @@ rpg.action(/explore_\d+/, async (ctx) => {
|
||||
character.stamina -= location.level; // Снимаем стамину за исследование
|
||||
await character.save();
|
||||
// У локации такой же свой массив лута как и у врагов, поэтому можно использовать ту же функцию dropLoot
|
||||
const loot = dropLoot(location.loot);
|
||||
const loot = dropItem(location.loot);
|
||||
const experience = Math.floor(Math.random() * 10) + 5; // Опыт за исследование
|
||||
await Exp(ctx, character, experience)
|
||||
await ctx.reply(`Вы исследовали локацию ${location.name} и нашли:\n${loot.join("\n")}\n\n`);
|
||||
|
Loading…
Reference in New Issue
Block a user