94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
const mongoose = require("mongoose");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const Schema = mongoose.Schema;
|
|
|
|
// Task data structure based on the documentation
|
|
const playerTaskSchema = new Schema({
|
|
taskId: { type: String, required: true },
|
|
assignedTime: { type: Date, required: true },
|
|
expireTime: { type: Date, required: true },
|
|
status: { type: Number, required: true, default: 0 }, // 0: Active, 1: Completed, 2: Expired, 3: Claimed
|
|
progress: { type: Number, required: true, default: 0 }
|
|
});
|
|
|
|
const playerTaskDataSchema = new Schema({
|
|
userId: { type: String, required: true, index: true },
|
|
tasks: [playerTaskSchema],
|
|
lastDailyTaskAssigned: { type: Date, default: null }
|
|
});
|
|
|
|
playerTaskDataSchema.methods.toObj = function () {
|
|
var elem = this.toObject();
|
|
delete elem.__v;
|
|
delete elem._id;
|
|
return elem;
|
|
};
|
|
|
|
const PlayerTaskData = mongoose.model("PlayerTaskData", playerTaskDataSchema);
|
|
exports.PlayerTaskData = PlayerTaskData;
|
|
|
|
// Task configuration storage
|
|
let taskConfigurations = [];
|
|
|
|
// Get all task configurations
|
|
exports.getAllTaskConfigs = async () => {
|
|
return taskConfigurations;
|
|
};
|
|
|
|
// Get task configuration by ID
|
|
exports.getTaskConfigById = async (taskId) => {
|
|
return taskConfigurations.find(task => task.id === taskId);
|
|
};
|
|
|
|
// Get player tasks
|
|
exports.getPlayerTasks = async (userId) => {
|
|
try {
|
|
let playerTaskData = await PlayerTaskData.findOne({ userId: userId });
|
|
if (!playerTaskData) {
|
|
playerTaskData = new PlayerTaskData({
|
|
userId: userId,
|
|
tasks: [],
|
|
lastDailyTaskAssigned: null
|
|
});
|
|
await playerTaskData.save();
|
|
}
|
|
return playerTaskData;
|
|
} catch (e) {
|
|
console.error("Error getting player tasks:", e);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
// Save player tasks
|
|
exports.savePlayerTasks = async (playerTaskData) => {
|
|
try {
|
|
const updated = await PlayerTaskData.findOneAndUpdate(
|
|
{ userId: playerTaskData.userId },
|
|
playerTaskData,
|
|
{ new: true, upsert: true }
|
|
);
|
|
return updated;
|
|
} catch (e) {
|
|
console.error("Error saving player tasks:", e);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
// Initialize task configurations from file
|
|
exports.initializeTaskConfig = (configPath) => {
|
|
try {
|
|
if (fs.existsSync(configPath)) {
|
|
const configFile = fs.readFileSync(configPath, 'utf8');
|
|
taskConfigurations = JSON.parse(configFile);
|
|
console.log(`Loaded ${taskConfigurations.length} task configurations`);
|
|
} else {
|
|
console.log("Task configuration file not found, using empty configuration");
|
|
taskConfigurations = [];
|
|
}
|
|
} catch (e) {
|
|
console.error("Error initializing task configuration:", e);
|
|
taskConfigurations = [];
|
|
}
|
|
}; |