v5.1
Crons, cards, no inventory
This commit is contained in:
parent
43b32b942b
commit
b51eebc623
10
bot.js
10
bot.js
@ -1,6 +1,7 @@
|
||||
// Подключаем необходимые библиотеки
|
||||
const { Telegraf, Scenes, session, Markup, Stage } = require('telegraf');
|
||||
const { Op } = require('sequelize');
|
||||
const schedule = require('node-schedule');
|
||||
const sequelize = require('./db'); // Подключение базы данных
|
||||
// Подключаем обработчики
|
||||
const commands = require('./commands');
|
||||
@ -1396,13 +1397,12 @@ resetCasinoFlag();
|
||||
|
||||
// Запускаем функцию
|
||||
updateResourcePricesMessage();
|
||||
// Запускаем процесс восстановления цен каждые 15 минут
|
||||
setInterval(recoverResourcePrices, 15 * 60 * 1000);
|
||||
// Запускаем обновление каждые 15 минут
|
||||
setInterval(updateResourcePricesMessage, 15 * 60 * 1000);
|
||||
schedule.scheduleJob('*/15 * * * *', recoverResourcePrices);
|
||||
schedule.scheduleJob('*/15 * * * *', updateResourcePricesMessage);
|
||||
// Запускаем процессы каждый час
|
||||
setInterval(resourceProduction, 60 * 60 * 1000);
|
||||
setInterval(resourceTransportation, 60 * 60 * 1000);
|
||||
schedule.scheduleJob('0 * * * *', resourceProduction); // Каждый час в начале часа
|
||||
schedule.scheduleJob('0 * * * *', resourceTransportation); // Каждый час
|
||||
|
||||
|
||||
bot.command('force_prod', async (ctx) => {
|
||||
|
@ -10,6 +10,8 @@ module.exports = {
|
||||
equipment : require('../presets/equipment.json'),
|
||||
UserModel : require('../models/user.model'),
|
||||
CharacterModel : require('../models/character.model'),
|
||||
ItemsModel : require('../models/items.model'),
|
||||
StolenCardsModel : require('../models/stolencards.model'),
|
||||
WorldModel : require('../models/world.model'),
|
||||
JobModel : require('../models/job.model'),
|
||||
PropertyModel : require('../models/property.model'),
|
||||
|
@ -24,59 +24,57 @@ const Character = sequelize.define('character', {
|
||||
hp: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 100
|
||||
}, // Текущее здоровье
|
||||
},
|
||||
max_hp: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 100
|
||||
}, // Максимальное здоровье
|
||||
},
|
||||
armor: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
}, // Броня для уменьшения урона
|
||||
},
|
||||
stamina: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 100
|
||||
}, // Текущая выносливость
|
||||
},
|
||||
max_stamina: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 100
|
||||
}, // Максимальная выносливость
|
||||
},
|
||||
force: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
}, // "F": физическая сила, влияет на урон
|
||||
},
|
||||
intelligence: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
}, // "I": интеллект для исследований/крафта
|
||||
},
|
||||
resilience: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
}, // "R": устойчивость, влияет на здоровье и защиту
|
||||
},
|
||||
endurance: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 1
|
||||
}, // "E": выносливость, влияет на количество выполняемых заданий
|
||||
},
|
||||
dirtymoney: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
}, // Грязные деньги, заработанные нелегально
|
||||
},
|
||||
stealedcards: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
}, // Украденные карточки
|
||||
},
|
||||
shoprobcd: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
}, // КД на ограбление магазина
|
||||
},
|
||||
pocketstealcd: {
|
||||
type: DataTypes.INTEGER,
|
||||
defaultValue: 0
|
||||
}, // КД на кражу из кармана
|
||||
inventory: {
|
||||
type: DataTypes.JSON,
|
||||
defaultValue: []
|
||||
}, // Инвентарь, где будут храниться предметы
|
||||
},
|
||||
activeEffects: { type: DataTypes.JSON, allowNull: true, defaultValue: [] },
|
||||
equippedItems: { type: DataTypes.ARRAY(DataTypes.INTEGER), allowNull: true, defaultValue: [] },
|
||||
});
|
||||
|
||||
module.exports = Character;
|
||||
|
41
models/inventory.model.js
Normal file
41
models/inventory.model.js
Normal file
@ -0,0 +1,41 @@
|
||||
const { DataTypes } = require('sequelize');
|
||||
const sequelize = require('../db');
|
||||
|
||||
const Inventory = sequelize.define('inventory', {
|
||||
telegram_id: {
|
||||
type: DataTypes.BIGINT,
|
||||
primaryKey: true
|
||||
},
|
||||
name: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
description: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: false,
|
||||
},
|
||||
effectData: {
|
||||
type: DataTypes.JSON,
|
||||
allowNull: true
|
||||
},
|
||||
price: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
},
|
||||
rarity: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
},
|
||||
type: {
|
||||
type: DataTypes.STRING, // Тип предмета (например, "инструмент", "ресурс")
|
||||
allowNull: false,
|
||||
},
|
||||
duration: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true
|
||||
}, // Длительность эффекта в секундах
|
||||
});
|
||||
|
||||
|
||||
|
||||
module.exports = Inventory;
|
40
models/items.model.js
Normal file
40
models/items.model.js
Normal file
@ -0,0 +1,40 @@
|
||||
const { DataTypes } = require('sequelize');
|
||||
const sequelize = require('../db');
|
||||
|
||||
const Item = sequelize.define('item', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
},
|
||||
name: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
description: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: false,
|
||||
},
|
||||
effectData: {
|
||||
type: DataTypes.JSON,
|
||||
allowNull: true
|
||||
},
|
||||
price: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
},
|
||||
rarity: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
},
|
||||
type: {
|
||||
type: DataTypes.STRING, // Тип предмета (например, "инструмент", "ресурс")
|
||||
allowNull: false,
|
||||
},
|
||||
duration: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true
|
||||
}, // Длительность эффекта в секундах
|
||||
});
|
||||
|
||||
module.exports = Item;
|
45
models/stolencards.model.js
Normal file
45
models/stolencards.model.js
Normal file
@ -0,0 +1,45 @@
|
||||
const { DataTypes } = require('sequelize');
|
||||
const sequelize = require('../db');
|
||||
|
||||
const StolenCard = sequelize.define('stolencard', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
},
|
||||
userId: {
|
||||
type: DataTypes.BIGINT,
|
||||
allowNull: false,
|
||||
},
|
||||
balance: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
},
|
||||
cardNumber: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
unique: true,
|
||||
},
|
||||
pin: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
cvv: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
holderName: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
bankName: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
expiresDate: {
|
||||
type: DataTypes.STRING,
|
||||
allowNull: false,
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = StolenCard;
|
65
package-lock.json
generated
65
package-lock.json
generated
@ -9,9 +9,11 @@
|
||||
"version": "0.0.2",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@faker-js/faker": "^9.3.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"error-stack-parser": "^2.1.4",
|
||||
"fs": "^0.0.1-security",
|
||||
"node-schedule": "^2.1.1",
|
||||
"nodemon": "^3.0.1",
|
||||
"pg": "^8.6.0",
|
||||
"pg-hstore": "^2.3.3",
|
||||
@ -23,6 +25,22 @@
|
||||
"voucher-code-generator": "^1.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@faker-js/faker": {
|
||||
"version": "9.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.3.0.tgz",
|
||||
"integrity": "sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/fakerjs"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.0.0",
|
||||
"npm": ">=9.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@pm2/agent": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.0.4.tgz",
|
||||
@ -574,6 +592,18 @@
|
||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cron-parser": {
|
||||
"version": "4.9.0",
|
||||
"resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz",
|
||||
"integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"luxon": "^3.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/croner": {
|
||||
"version": "4.1.97",
|
||||
"resolved": "https://registry.npmjs.org/croner/-/croner-4.1.97.tgz",
|
||||
@ -1078,6 +1108,12 @@
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/long-timeout": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz",
|
||||
"integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
"version": "7.18.3",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
|
||||
@ -1087,6 +1123,15 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
|
||||
"integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
@ -1220,6 +1265,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/node-schedule": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz",
|
||||
"integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cron-parser": "^4.2.0",
|
||||
"long-timeout": "0.1.1",
|
||||
"sorted-array-functions": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/nodemon": {
|
||||
"version": "3.1.9",
|
||||
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz",
|
||||
@ -1956,6 +2015,12 @@
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/sorted-array-functions": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz",
|
||||
"integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
|
@ -11,9 +11,11 @@
|
||||
"author": "Degradin",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@faker-js/faker": "^9.3.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"error-stack-parser": "^2.1.4",
|
||||
"fs": "^0.0.1-security",
|
||||
"node-schedule": "^2.1.1",
|
||||
"nodemon": "^3.0.1",
|
||||
"pg": "^8.6.0",
|
||||
"pg-hstore": "^2.3.3",
|
||||
|
Loading…
Reference in New Issue
Block a user