This commit is contained in:
yaoyanwei
2025-09-08 16:43:50 +08:00
parent 43803f024b
commit e26f405ea8
13 changed files with 1043 additions and 45 deletions

94
tasks/tasks.model.js Normal file
View File

@@ -0,0 +1,94 @@
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 = [];
}
};